]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/apistatusesdestroy.php
Change to more recent code style in ApiStatusesDestroyAction
[quix0rs-gnu-social.git] / actions / apistatusesdestroy.php
1 <?php
2 /**
3  * StatusNet, the distributed open-source microblogging tool
4  *
5  * Destroy a notice through the API
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  API
23  * @package   StatusNet
24  * @author    Craig Andrews <candrews@integralblue.com>
25  * @author    Evan Prodromou <evan@status.net>
26  * @author    Jeffery To <jeffery.to@gmail.com>
27  * @author    Tom Blankenship <mac65@mac65.com>
28  * @author    Mike Cochrane <mikec@mikenz.geek.nz>
29  * @author    Robin Millette <robin@millette.info>
30  * @author    Zach Copley <zach@status.net>
31  * @copyright 2009 StatusNet, Inc.
32  * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
33  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
34  * @link      http://status.net/
35  */
36
37 if (!defined('STATUSNET')) {
38     exit(1);
39 }
40
41 /**
42  * Deletes one of the authenticating user's statuses (notices).
43  *
44  * @category API
45  * @package  StatusNet
46  * @author   Craig Andrews <candrews@integralblue.com>
47  * @author   Evan Prodromou <evan@status.net>
48  * @author   Jeffery To <jeffery.to@gmail.com>
49  * @author   Tom Blankenship <mac65@mac65.com>
50  * @author   Mike Cochrane <mikec@mikenz.geek.nz>
51  * @author   Robin Millette <robin@millette.info>
52  * @author   Zach Copley <zach@status.net>
53  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
54  * @link     http://status.net/
55  */
56 class ApiStatusesDestroyAction extends ApiAuthAction
57 {
58     var $status = null;
59
60     /**
61      * Take arguments for running
62      *
63      * @param array $args $_REQUEST args
64      *
65      * @return boolean success flag
66      */
67     function prepare($args)
68     {
69         parent::prepare($args);
70
71         $this->notice_id = (int)$this->trimmed('id');
72
73         if (empty($notice_id)) {
74             $this->notice_id = (int)$this->arg('id');
75         }
76
77         $this->notice = Notice::getKV((int)$this->notice_id);
78
79         return true;
80      }
81
82     /**
83      * Handle the request
84      *
85      * Delete the notice and all related replies
86      *
87      * @param array $args $_REQUEST data (unused)
88      *
89      * @return void
90      */
91     function handle($args)
92     {
93         parent::handle($args);
94
95         if (!in_array($this->format, array('xml', 'json'))) {
96             $this->clientError(
97                 // TRANS: Client error displayed when coming across a non-supported API method.
98                 _('API method not found.'),
99                 404
100             );
101             return;
102         }
103
104         if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
105             $this->clientError(
106                 // TRANS: Client error displayed trying to delete a status not using POST or DELETE.
107                 // TRANS: POST and DELETE should not be translated.
108                 _('This method requires a POST or DELETE.'),
109                 400,
110                 $this->format
111             );
112             return;
113         }
114
115         if (empty($this->notice)) {
116             $this->clientError(
117                 // TRANS: Client error displayed trying to delete a status with an invalid ID.
118                 _('No status found with that ID.'),
119                 404, $this->format
120             );
121             return;
122         }
123
124         if ($this->scoped->sameAs($this->notice->getProfile()) || $this->scoped->hasRight(Right::DELETEOTHERSNOTICE)) {
125             if (Event::handle('StartDeleteOwnNotice', array($this->auth_user, $this->notice))) {
126                 $this->notice->deleteAs($this->scoped);
127                 Event::handle('EndDeleteOwnNotice', array($this->auth_user, $this->notice));
128             }
129                 $this->showNotice();
130         } else {
131             $this->clientError(
132                 // TRANS: Client error displayed trying to delete a status of another user.
133                 _('You may not delete another user\'s status.'),
134                 403,
135                 $this->format
136             );
137         }
138     }
139
140     /**
141      * Show the deleted notice
142      *
143      * @return void
144      */
145     function showNotice()
146     {
147         if (!empty($this->notice)) {
148             if ($this->format == 'xml') {
149                 $this->showSingleXmlStatus($this->notice);
150             } elseif ($this->format == 'json') {
151                 $this->show_single_json_status($this->notice);
152             }
153         }
154     }
155 }