]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/twitapistatuses.php
fix format string, again again
[quix0rs-gnu-social.git] / actions / twitapistatuses.php
index 7a7523af21e46ecd1cb8508a3a32bc822ac083a5..3041240dded4dd59fdff76e5da2f49f0f0637672 100644 (file)
@@ -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 {
        }
 }
 
-