3 * Block a user action class.
9 * @author Evan Prodromou <evan@status.net>
10 * @author Robin Millette <millette@status.net>
11 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
12 * @link http://status.net/
14 * StatusNet - the distributed open-source microblogging tool
15 * Copyright (C) 2008, 2009, StatusNet, Inc.
17 * This program is free software: you can redistribute it and/or modify
18 * it under the terms of the GNU Affero General Public License as published by
19 * the Free Software Foundation, either version 3 of the License, or
20 * (at your option) any later version.
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU Affero General Public License for more details.
27 * You should have received a copy of the GNU Affero General Public License
28 * along with this program. If not, see <http://www.gnu.org/licenses/>.
31 if (!defined('STATUSNET') && !defined('LACONICA')) {
36 * Block a user action class.
40 * @author Evan Prodromou <evan@status.net>
41 * @author Robin Millette <millette@status.net>
42 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
43 * @link http://status.net/
45 class BlockAction extends ProfileFormAction
50 * Take arguments for running
52 * @param array $args $_REQUEST args
54 * @return boolean success flag
56 function prepare($args)
58 if (!parent::prepare($args)) {
62 $cur = common_current_user();
64 assert(!empty($cur)); // checked by parent
66 if ($cur->hasBlocked($this->profile)) {
67 // TRANS: Client error displayed when blocking a user that has already been blocked.
68 $this->clientError(_('You already blocked that user.'));
78 * Shows a page with list of favorite notices
80 * @param array $args $_REQUEST args; handled in prepare()
84 function handle($args)
86 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
87 if ($this->arg('no')) {
88 $this->returnToPrevious();
89 } elseif ($this->arg('yes')) {
91 $this->returnToPrevious();
100 function showContent() {
101 $this->areYouSureForm();
105 // TRANS: Title for block user page.
106 return _('Block user');
109 function showNoticeForm() {
116 * Shows a confirmation form.
120 function areYouSureForm()
122 // @fixme if we ajaxify the confirmation form, skip the preview on ajax hits
123 $profile = new ArrayWrapper(array($this->profile));
124 $preview = new ProfileList($profile, $this);
128 $id = $this->profile->id;
129 $this->elementStart('form', array('id' => 'block-' . $id,
131 'class' => 'form_settings form_entity_block',
132 'action' => common_local_url('block')));
133 $this->elementStart('fieldset');
134 $this->hidden('token', common_session_token());
135 // TRANS: Legend for block user form.
136 $this->element('legend', _('Block user'));
137 $this->element('p', null,
138 // TRANS: Explanation of consequences when blocking a user on the block user page.
139 _('Are you sure you want to block this user? '.
140 'Afterwards, they will be unsubscribed from you, '.
141 'unable to subscribe to you in the future, and '.
142 'you will not be notified of any @-replies from them.'));
143 $this->element('input', array('id' => 'blockto-' . $id,
144 'name' => 'profileid',
147 foreach ($this->args as $k => $v) {
148 if (substr($k, 0, 9) == 'returnto-') {
149 $this->hidden($k, $v);
152 $this->submit('form_action-no',
153 // TRANS: Button label on the user block form.
155 'submit form_action-primary',
157 // TRANS: Submit button title for 'No' when blocking a user.
158 _('Do not block this user.'));
159 $this->submit('form_action-yes',
160 // TRANS: Button label on the user block form.
162 'submit form_action-secondary',
164 // TRANS: Submit button title for 'Yes' when blocking a user.
165 _('Block this user.'));
166 $this->elementEnd('fieldset');
167 $this->elementEnd('form');
171 * Actually block a user.
176 function handlePost()
178 $cur = common_current_user();
180 if (Event::handle('StartBlockProfile', array($cur, $this->profile))) {
181 $result = $cur->block($this->profile);
183 Event::handle('EndBlockProfile', array($cur, $this->profile));
188 // TRANS: Server error displayed when blocking a user fails.
189 $this->serverError(_('Failed to save block information.'));
194 function showScripts()
196 parent::showScripts();
197 $this->autofocus('form_action-yes');
201 * Override for form session token checks; on our first hit we're just
202 * requesting confirmation, which doesn't need a token. We need to be
203 * able to take regular GET requests from email!
205 * @throws ClientException if token is bad on POST request or if we have
206 * confirmation parameters which could trigger something.
208 function checkSessionToken()
210 if ($_SERVER['REQUEST_METHOD'] == 'POST' ||
214 return parent::checkSessionToken();
219 * If we reached this form without returnto arguments, return to the
220 * current user's subscription list.
224 function defaultReturnTo()
226 $user = common_current_user();
228 return common_local_url('subscribers',
229 array('nickname' => $user->nickname));
231 return common_local_url('public');