X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Ftwitapistatuses.php;h=3041240dded4dd59fdff76e5da2f49f0f0637672;hb=c55e3089c555c0a9f12b997f25b7f4f397a0e2c6;hp=7a7523af21e46ecd1cb8508a3a32bc822ac083a5;hpb=3a124c5f53810d9a4a943e8c1a6d7b9e513eedbb;p=quix0rs-gnu-social.git diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php index 7a7523af21..3041240dde 100644 --- a/actions/twitapistatuses.php +++ b/actions/twitapistatuses.php @@ -61,7 +61,10 @@ class TwitapistatusesAction extends TwitterapiAction { # XXX: sub-optimal performance - $notice->is_local = 1; + if (common_config('public', 'localonly')) { + $notice->is_local = 1; + } + $notice->orderBy('created DESC, notice.id DESC'); $notice->limit($MAX_PUBSTATUSES); $cnt = $notice->find(); @@ -82,12 +85,12 @@ class TwitapistatusesAction extends TwitterapiAction { $this->show_json_timeline($notice); break; default: - common_user_error("API method not found!", $code = 404); + common_user_error(_('API method not found!'), $code = 404); break; } } else { - common_server_error('Couldn\'t find any statuses.', $code = 503); + common_server_error(_('Couldn\'t find any statuses.'), $code = 503); } exit(); @@ -253,7 +256,7 @@ class TwitapistatusesAction extends TwitterapiAction { $this->show_json_timeline($notice); break; default: - common_user_error("API method not found!", $code = 404); + common_user_error(_('API method not found!'), $code = 404); } exit(); @@ -364,7 +367,7 @@ class TwitapistatusesAction extends TwitterapiAction { $this->show_json_timeline($notice); break; default: - common_user_error("API method not found!", $code = 404); + common_user_error(_('API method not found!'), $code = 404); } exit(); @@ -374,10 +377,15 @@ class TwitapistatusesAction extends TwitterapiAction { parent::handle($args); - $user = $apidata['user']; + if ($_SERVER['REQUEST_METHOD'] != 'POST') { + $this->client_error(_('This method requires a POST.'), 400, $apidata['content-type']); + exit(); + } - $status = htmlspecialchars_decode($this->trimmed('status')); + $user = $apidata['user']; + $status = $this->trimmed('status'); $source = $this->trimmed('source'); + $in_reply_to_status_id = intval($this->trimmed('in_reply_to_status_id')); if (!$source) { $source = 'api'; @@ -391,22 +399,36 @@ class TwitapistatusesAction extends TwitterapiAction { // errror? -- Zach exit(); - } else if (strlen($status) > 140) { + } else if (mb_strlen($status) > 140) { // XXX: Twitter truncates anything over 140, flags the status // as "truncated." Sending this error may screw up some clients // that assume Twitter will truncate for them. Should we just // truncate too? -- Zach - header('HTTP/1.1 406 Not Acceptable'); - print "That's too long. Max notice size is 140 chars.\n"; + $this->client_error(_('That\'s too long. Max notice size is 140 chars.'), $code = 406, $apidata['content-type']); exit(); } - $notice = Notice::saveNew($user->id, $status, $source); + $reply_to = NULL; + + if ($in_reply_to_status_id) { + + // check whether notice actually exists + $reply = Notice::staticGet($in_reply_to_status_id); + + if ($reply) { + $reply_to = $in_reply_to_status_id; + } else { + $this->client_error(_('Not found'), $code = 404, $apidata['content-type']); + exit(); + } + } + + $notice = Notice::saveNew($user->id, $status, $source, 1, $reply_to); if (is_string($notice)) { $this->server_error($notice); - return; + exit(); } common_broadcast_notice($notice); @@ -507,7 +529,7 @@ class TwitapistatusesAction extends TwitterapiAction { $this->show_json_timeline($notices); break; default: - common_user_error("API method not found!", $code = 404); + common_user_error(_('API method not found!'), $code = 404); } @@ -516,6 +538,25 @@ class TwitapistatusesAction extends TwitterapiAction { } + function show($args, $apidata) { + parent::handle($args); + + $notice_id = $apidata['api_arg']; + $notice = Notice::staticGet($notice_id); + + if ($notice) { + if ($apidata['content-type'] == 'xml') { + $this->show_single_xml_status($notice); + } elseif ($apidata['content-type'] == 'json') { + $this->show_single_json_status($notice); + } + } else { + // XXX: Twitter just sets a 404 header and doens't bother to return an err msg + $this->client_error(_('No status with that ID found.'), 404, $apidata['content-type']); + } + + exit(); + } /* @@ -534,8 +575,44 @@ class TwitapistatusesAction extends TwitterapiAction { */ function destroy($args, $apidata) { + parent::handle($args); - common_server_error("API method under construction.", $code=501); + + common_debug($_SERVER['REQUEST_METHOD']); + + // Check for RESTfulness + if (!in_array($_SERVER['REQUEST_METHOD'], array('POST', 'DELETE'))) { + // XXX: Twitter just prints the err msg, no XML / JSON. + $this->client_error(_('This method requires a POST or DELETE.'), 400, $apidata['content-type']); + exit(); + } + + $user = $apidata['user']; + $notice_id = $apidata['api_arg']; + $notice = Notice::staticGet($notice_id); + + if (!$notice) { + $this->client_error(_('No status found with that ID.'), 404, $apidata['content-type']); + exit(); + } + + if ($user->id == $notice->profile_id) { + $replies = new Reply; + $replies->get('notice_id', $notice_id); + common_dequeue_notice($notice); + $replies->delete(); + $notice->delete(); + + if ($apidata['content-type'] == 'xml') { + $this->show_single_xml_status($notice); + } elseif ($apidata['content-type'] == 'json') { + $this->show_single_json_status($notice); + } + } else { + $this->client_error(_('You may not delete another user\'s status.'), 403, $apidata['content-type']); + } + + exit(); } # User Methods @@ -688,7 +765,7 @@ class TwitapistatusesAction extends TwitterapiAction { */ function featured($args, $apidata) { parent::handle($args); - common_server_error("API method under construction.", $code=501); + common_server_error(_('API method under construction.'), $code=501); } function get_user($id, $apidata) { @@ -702,4 +779,3 @@ class TwitapistatusesAction extends TwitterapiAction { } } -