Refactoring ApiStatusesDestroyAction
This commit is contained in:
parent
446c930823
commit
2696e13b19
@ -34,9 +34,7 @@
|
|||||||
* @link http://status.net/
|
* @link http://status.net/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('STATUSNET')) {
|
if (!defined('GNUSOCIAL')) { exit(1); }
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes one of the authenticating user's statuses (notices).
|
* Deletes one of the authenticating user's statuses (notices).
|
||||||
@ -55,86 +53,46 @@ if (!defined('STATUSNET')) {
|
|||||||
*/
|
*/
|
||||||
class ApiStatusesDestroyAction extends ApiAuthAction
|
class ApiStatusesDestroyAction extends ApiAuthAction
|
||||||
{
|
{
|
||||||
var $status = null;
|
protected function prepare(array $args=array())
|
||||||
|
|
||||||
/**
|
|
||||||
* Take arguments for running
|
|
||||||
*
|
|
||||||
* @param array $args $_REQUEST args
|
|
||||||
*
|
|
||||||
* @return boolean success flag
|
|
||||||
*/
|
|
||||||
function prepare($args)
|
|
||||||
{
|
{
|
||||||
parent::prepare($args);
|
parent::prepare($args);
|
||||||
|
|
||||||
$this->notice_id = (int)$this->trimmed('id');
|
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
||||||
|
// TRANS: Client error displayed trying to delete a status not using POST or DELETE.
|
||||||
if (empty($notice_id)) {
|
// TRANS: POST and DELETE should not be translated.
|
||||||
$this->notice_id = (int)$this->arg('id');
|
throw new ClientException(_('This method requires a POST or DELETE.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->notice = Notice::getKV((int)$this->notice_id);
|
// FIXME: Return with a Not Acceptable status code?
|
||||||
|
if (!in_array($this->format, array('xml', 'json'))) {
|
||||||
|
// TRANS: Client error displayed when coming across a non-supported API method.
|
||||||
|
throw new ClientException(_('API method not found.'), 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->notice = Notice::getByID($this->trimmed('id'));
|
||||||
|
} catch (NoResultException $e) {
|
||||||
|
// TRANS: Client error displayed trying to delete a status with an invalid ID.
|
||||||
|
throw new ClientException(_('No status found with that ID.'), 404);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function handle()
|
||||||
* Handle the request
|
|
||||||
*
|
|
||||||
* Delete the notice and all related replies
|
|
||||||
*
|
|
||||||
* @param array $args $_REQUEST data (unused)
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
function handle($args)
|
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
parent::handle();
|
||||||
|
|
||||||
if (!in_array($this->format, array('xml', 'json'))) {
|
if (!$this->scoped->sameAs($this->notice->getProfile()) && !$this->scoped->hasRight(Right::DELETEOTHERSNOTICE)) {
|
||||||
$this->clientError(
|
// TRANS: Client error displayed trying to delete a status of another user.
|
||||||
// TRANS: Client error displayed when coming across a non-supported API method.
|
throw new AuthorizationException(_('You may not delete another user\'s status.'));
|
||||||
_('API method not found.'),
|
|
||||||
404
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
if (Event::handle('StartDeleteOwnNotice', array($this->scoped->getUser(), $this->notice))) {
|
||||||
$this->clientError(
|
|
||||||
// TRANS: Client error displayed trying to delete a status not using POST or DELETE.
|
|
||||||
// TRANS: POST and DELETE should not be translated.
|
|
||||||
_('This method requires a POST or DELETE.'),
|
|
||||||
400,
|
|
||||||
$this->format
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($this->notice)) {
|
|
||||||
$this->clientError(
|
|
||||||
// TRANS: Client error displayed trying to delete a status with an invalid ID.
|
|
||||||
_('No status found with that ID.'),
|
|
||||||
404, $this->format
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->scoped->sameAs($this->notice->getProfile()) || $this->scoped->hasRight(Right::DELETEOTHERSNOTICE)) {
|
|
||||||
if (Event::handle('StartDeleteOwnNotice', array($this->auth_user, $this->notice))) {
|
|
||||||
$this->notice->deleteAs($this->scoped);
|
$this->notice->deleteAs($this->scoped);
|
||||||
Event::handle('EndDeleteOwnNotice', array($this->auth_user, $this->notice));
|
Event::handle('EndDeleteOwnNotice', array($this->scoped->getUser(), $this->notice));
|
||||||
}
|
}
|
||||||
$this->showNotice();
|
$this->showNotice();
|
||||||
} else {
|
|
||||||
$this->clientError(
|
|
||||||
// TRANS: Client error displayed trying to delete a status of another user.
|
|
||||||
_('You may not delete another user\'s status.'),
|
|
||||||
403,
|
|
||||||
$this->format
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user