noticeaction improvements
[statusnet:freesocial.git] / actions / delete.php
1 <?php
2 /**
3  * StatusNet, the distributed open-source microblogging tool
4  *
5  * Class for deleting a notice
6  *
7  * PHP version 5
8  *
9  * LICENCE: This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU Affero General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU Affero General Public License for more details.
18  *
19  * You should have received a copy of the GNU Affero General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  * @category  Personal
23  * @package   StatusNet
24  * @author    Evan Prodromou <evan@status.net>
25  * @author    Sarven Capadisli <csarven@status.net>
26  * @author    Mikael Nordfeldth <mmn@hethane.se>
27  * @copyright 2008 StatusNet, Inc.
28  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
29  * @link      http://status.net/
30  */
31
32 if (!defined('STATUSNET') && !defined('LACONICA')) {
33     exit(1);
34 }
35
36 // @todo FIXME: documentation needed.
37 class DeleteAction extends FormAction
38 {
39     var $notice = null;
40         var $type   = null;
41
42     function prepare($args)
43     {
44         parent::prepare($args);
45
46         if (!$this->scoped) {
47             // TRANS: Error message displayed when trying to perform an action that requires a logged in user.
48             common_user_error(_('Not logged in.'));
49             exit;
50         }
51
52                 $this->type = $this->trimmed('type');
53
54         switch ($this->type) {
55         case 'notice':
56             $this->notice = Notice::staticGet($this->trimmed('id'));
57             if (!$this->notice) {
58                 // TRANS: Error message displayed trying to delete a non-existing notice.
59                 throw new ServerException(_m('No such notice.'));
60             }
61             if ($this->notice->profile_id != $this->scoped->id &&
62                    !$this->scoped->hasRight(Right::DELETEOTHERSNOTICE)) {
63                 // TRANS: Error message displayed trying to delete a notice that was not made by the current user.
64                 throw new ClientException(_m('Cannot delete this notice.'));
65             }
66             break;
67         default:
68             throw new ServerException('No such delete action available');
69         }
70
71         return true;
72     }
73
74     function title()
75     {
76         // TRANS: Page title when deleting something.
77         return _m('Delete');
78     }
79
80     function handlePost()
81     {
82                 parent::handlePost();
83
84         if ($this->arg('yes')) {
85             if (Event::handle('StartDeleteOwnNotice', array($this->scoped, $this->notice))) {
86                 $this->notice->delete();
87                 Event::handle('EndDeleteOwnNotice', array($this->scoped, $this->notice));
88             }
89                         if (StatusNet::isAjax()) {
90                                 // blank page
91                                 return;
92                         }
93                 }
94         $url = StatusNet::isAjax()
95                                 ? common_local_url('notice', array('id'=>$this->notice->id), array('ajax'=>'true'))
96                                 : common_get_returnto();
97
98         if ($url) {
99             common_set_returnto(null);
100         } else {
101             $url = common_local_url('public');
102         }
103
104         common_redirect($url, 303);
105     }
106 }