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