]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/block.php
a9fcfb49c58ea13df22d4b5caa63ad0faaa83d8f
[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
57     function handle($args=NULL) {
58         if ($_SERVER['REQUEST_METHOD'] == 'POST') {
59             if ($this->arg('block')) {
60                 $this->are_you_sure_form();
61             } else if ($this->arg('no')) {
62                 $cur = common_current_user();
63                 common_redirect(common_local_url('subscribers',
64                                                  array('nickname' => $cur->nickname)));
65             } else if ($this->arg('yes')) {
66                 $this->block_profile();
67             }
68         }
69     }
70
71     function are_you_sure_form() {
72
73         $id = $this->profile->id;
74
75         common_element_start('p', NULL,
76                              _('Are you sure you want to block this user? '.
77                                'Afterwards, they will be unsubscribed from you, '.
78                                'unable to subscribe to you in the future, and '.
79                                'you will not be notified of any @-replies from them.'));
80
81         common_element_start('form', array('id' => 'block-' . $id,
82                                            'method' => 'post',
83                                            'class' => 'block',
84                                            'action' => common_local_url('block')));
85
86         common_hidden('token', common_session_token());
87
88         common_element('input', array('id' => 'blockto-' . $id,
89                                       'name' => 'blockto',
90                                       'type' => 'hidden',
91                                       'value' => $id));
92
93         common_submit('no', _('No'));
94         common_submit('yes', _('Yes'));
95
96         common_element_end('form');
97     }
98
99     function block_profile() {
100
101         $cur = common_current_user();
102
103         if ($cur->hasBlocked($this->profile)) {
104             $this->client_error(_('You have already blocked this user.'));
105             return;
106         }
107
108         # Add a new block record
109
110         $block = new Profile_block();
111
112         # Begin a transaction
113
114         $block->query('BEGIN');
115
116         $block->blocker = $cur->id;
117         $block->blocked = $this->profile->id;
118
119         $result = $block->insert();
120
121         if (!$result) {
122             common_log_db_error($block, 'INSERT', __FILE__);
123             $this->server_error(_('Could not save new block record.'));
124             return;
125         }
126
127         # Cancel their subscription, if it exists
128
129                 $sub = Subscription::pkeyGet(array('subscriber' => $this->profile->id,
130                                                                                    'subscribed' => $cur->id));
131
132         if ($sub) {
133             $result = $sub->delete();
134             if (!$result) {
135                 common_log_db_error($sub, 'DELETE', __FILE__);
136                 $this->server_error(_('Could not delete subscription.'));
137                 return;
138             }
139         }
140
141         $block->query('COMMIT');
142
143         common_redirect(common_local_url('subscribers',
144                                          array('nickname' => $cur->nickname)));
145     }
146 }