]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/block.php
fb553da6e957d557f9801f1ed159065f62998817
[quix0rs-gnu-social.git] / actions / block.php
1 <?php
2 /*
3  * Laconica - a distributed open-source microblogging tool
4  * Copyright (C) 2008, Controlez-Vous, Inc.
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 if (!defined('LACONICA')) { exit(1); }
21
22 class BlockAction extends Action {
23
24     var $profile = NULL;
25
26     function prepare($args) {
27
28         parent::prepare($args);
29
30         if (!common_logged_in()) {
31             $this->client_error(_('Not logged in.'));
32             return false;
33         }
34
35                 $token = $this->trimmed('token');
36
37                 if (!$token || $token != common_session_token()) {
38                         $this->client_error(_('There was a problem with your session token. Try again, please.'));
39                         return;
40                 }
41
42         $id = $this->trimmed('blockto');
43
44         if (!$id) {
45             $this->client_error(_('No profile specified.'));
46             return false;
47         }
48
49         $this->profile = Profile::staticGet('id', $id);
50
51         if (!$this->profile) {
52             $this->client_error(_('No profile with that ID.'));
53             return false;
54         }
55
56         return true;
57     }
58
59     function handle($args) {
60         parent::handle($args);
61         if ($_SERVER['REQUEST_METHOD'] == 'POST') {
62             if ($this->arg('block')) {
63                 $this->are_you_sure_form();
64             } else if ($this->arg('no')) {
65                 $cur = common_current_user();
66                 common_redirect(common_local_url('subscribers',
67                                                  array('nickname' => $cur->nickname)));
68             } else if ($this->arg('yes')) {
69                 $this->block_profile();
70             }
71         }
72     }
73
74     function are_you_sure_form() {
75
76         $id = $this->profile->id;
77
78                 common_show_header(_('Block user'));
79
80         common_element('p', NULL,
81                        _('Are you sure you want to block this user? '.
82                          'Afterwards, they will be unsubscribed from you, '.
83                          'unable to subscribe to you in the future, and '.
84                          'you will not be notified of any @-replies from them.'));
85
86         common_element_start('form', array('id' => 'block-' . $id,
87                                            'method' => 'post',
88                                            'class' => 'block',
89                                            'action' => common_local_url('block')));
90
91         common_hidden('token', common_session_token());
92
93         common_element('input', array('id' => 'blockto-' . $id,
94                                       'name' => 'blockto',
95                                       'type' => 'hidden',
96                                       'value' => $id));
97
98         foreach ($this->args as $k => $v) {
99             if (substr($k, 0, 9) == 'returnto-') {
100                 common_hidden($k, $v);
101             }
102         }
103
104         common_submit('no', _('No'));
105         common_submit('yes', _('Yes'));
106
107         common_element_end('form');
108
109         common_show_footer();
110     }
111
112     function block_profile() {
113
114         $cur = common_current_user();
115
116         if ($cur->hasBlocked($this->profile)) {
117             $this->client_error(_('You have already blocked this user.'));
118             return;
119         }
120
121         # Add a new block record
122
123         $block = new Profile_block();
124
125         # Begin a transaction
126
127         $block->query('BEGIN');
128
129         $block->blocker = $cur->id;
130         $block->blocked = $this->profile->id;
131
132         $result = $block->insert();
133
134         if (!$result) {
135             common_log_db_error($block, 'INSERT', __FILE__);
136             $this->server_error(_('Could not save new block record.'));
137             return;
138         }
139
140         # Cancel their subscription, if it exists
141
142                 $sub = Subscription::pkeyGet(array('subscriber' => $this->profile->id,
143                                                                                    'subscribed' => $cur->id));
144
145         if ($sub) {
146             $result = $sub->delete();
147             if (!$result) {
148                 common_log_db_error($sub, 'DELETE', __FILE__);
149                 $this->server_error(_('Could not delete subscription.'));
150                 return;
151             }
152         }
153
154         $block->query('COMMIT');
155
156         # Now, gotta figure where we go back to
157
158         foreach ($this->args as $k => $v) {
159             if ($k == 'returnto-action') {
160                 $action = $v;
161             } else if (substr($k, 0, 9) == 'returnto-') {
162                 $args[substr($k, 9)] = $v;
163             }
164         }
165
166         if ($action) {
167             common_redirect(common_local_url($action, $args));
168         } else {
169             common_redirect(common_local_url('subscriptions',
170                                              array('nickname' => $cur->nickname)));
171         }
172     }
173 }