forked from GNUsocial/gnu-social
Ticket 1612 - make destory (and create) favorites work via API
This commit is contained in:
parent
7e25a7f3aa
commit
8992e8fa7a
@ -34,6 +34,11 @@ class TwitapifavoritesAction extends TwitterapiAction
|
|||||||
$user = $this->get_user($apidata['api_arg'], $apidata);
|
$user = $this->get_user($apidata['api_arg'], $apidata);
|
||||||
|
|
||||||
if (empty($user)) {
|
if (empty($user)) {
|
||||||
|
if ($apidata['content-type'] == 'xml') {
|
||||||
|
$this->show_single_xml_status($notice);
|
||||||
|
} elseif ($apidata['content-type'] == 'json') {
|
||||||
|
$this->show_single_json_status($notice);
|
||||||
|
}
|
||||||
$this->clientError('Not Found', 404, $apidata['content-type']);
|
$this->clientError('Not Found', 404, $apidata['content-type']);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -91,7 +96,6 @@ class TwitapifavoritesAction extends TwitterapiAction
|
|||||||
|
|
||||||
// Check for RESTfulness
|
// Check for RESTfulness
|
||||||
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
||||||
// XXX: Twitter just prints the err msg, no XML / JSON.
|
|
||||||
$this->clientError(_('This method requires a POST or DELETE.'),
|
$this->clientError(_('This method requires a POST or DELETE.'),
|
||||||
400, $apidata['content-type']);
|
400, $apidata['content-type']);
|
||||||
return;
|
return;
|
||||||
@ -102,10 +106,9 @@ class TwitapifavoritesAction extends TwitterapiAction
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $apidata['user']; // Always the auth user
|
$user = $apidata['user']; // Always the auth user
|
||||||
|
|
||||||
$notice_id = $apidata['api_arg'];
|
$notice_id = $apidata['api_arg'];
|
||||||
$notice = Notice::staticGet($notice_id);
|
$notice = Notice::staticGet($notice_id);
|
||||||
|
|
||||||
if (empty($notice)) {
|
if (empty($notice)) {
|
||||||
$this->clientError(_('No status found with that ID.'),
|
$this->clientError(_('No status found with that ID.'),
|
||||||
@ -115,7 +118,7 @@ class TwitapifavoritesAction extends TwitterapiAction
|
|||||||
|
|
||||||
// XXX: Twitter lets you fave things repeatedly via api.
|
// XXX: Twitter lets you fave things repeatedly via api.
|
||||||
if ($user->hasFave($notice)) {
|
if ($user->hasFave($notice)) {
|
||||||
$this->clientError(_('This notice is already a favorite!'),
|
$this->clientError(_('This status is already a favorite!'),
|
||||||
403, $apidata['content-type']);
|
403, $apidata['content-type']);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -123,7 +126,7 @@ class TwitapifavoritesAction extends TwitterapiAction
|
|||||||
$fave = Fave::addNew($user, $notice);
|
$fave = Fave::addNew($user, $notice);
|
||||||
|
|
||||||
if (empty($fave)) {
|
if (empty($fave)) {
|
||||||
$this->serverError(_('Could not create favorite.'));
|
$this->clientError(_('Could not create favorite.'));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,7 +144,55 @@ class TwitapifavoritesAction extends TwitterapiAction
|
|||||||
function destroy($args, $apidata)
|
function destroy($args, $apidata)
|
||||||
{
|
{
|
||||||
parent::handle($args);
|
parent::handle($args);
|
||||||
$this->serverError(_('API method under construction.'), $code=501);
|
|
||||||
|
// Check for RESTfulness
|
||||||
|
if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) {
|
||||||
|
$this->clientError(_('This method requires a POST or DELETE.'),
|
||||||
|
400, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!in_array($apidata['content-type'], array('xml', 'json'))) {
|
||||||
|
$this->clientError(_('API method not found!'), $code = 404);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = $apidata['user']; // Always the auth user
|
||||||
|
$notice_id = $apidata['api_arg'];
|
||||||
|
$notice = Notice::staticGet($notice_id);
|
||||||
|
|
||||||
|
if (empty($notice)) {
|
||||||
|
$this->clientError(_('No status found with that ID.'),
|
||||||
|
404, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fave = new Fave();
|
||||||
|
$fave->user_id = $this->id;
|
||||||
|
$fave->notice_id = $notice->id;
|
||||||
|
|
||||||
|
if (!$fave->find(true)) {
|
||||||
|
$this->clientError(_('That status is not a favorite!'),
|
||||||
|
403, $apidata['content-type']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $fave->delete();
|
||||||
|
|
||||||
|
if (!$result) {
|
||||||
|
common_log_db_error($fave, 'DELETE', __FILE__);
|
||||||
|
$this->clientError(_('Could not delete favorite.'), 404);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$user->blowFavesCache();
|
||||||
|
|
||||||
|
if ($apidata['content-type'] == 'xml') {
|
||||||
|
$this->show_single_xml_status($notice);
|
||||||
|
} elseif ($apidata['content-type'] == 'json') {
|
||||||
|
$this->show_single_json_status($notice);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: these two funcs swiped from faves.
|
// XXX: these two funcs swiped from faves.
|
||||||
|
@ -351,7 +351,8 @@ class Router
|
|||||||
|
|
||||||
$m->connect('api/favorites/:method/:argument',
|
$m->connect('api/favorites/:method/:argument',
|
||||||
array('action' => 'api',
|
array('action' => 'api',
|
||||||
'apiaction' => 'favorites'));
|
'apiaction' => 'favorites',
|
||||||
|
array('method' => '(create|destroy)')));
|
||||||
|
|
||||||
$m->connect('api/favorites/:argument',
|
$m->connect('api/favorites/:argument',
|
||||||
array('action' => 'api',
|
array('action' => 'api',
|
||||||
|
Loading…
Reference in New Issue
Block a user