]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Twitter-compatible API: support for new in_reply_to_status_id in statuses/update
authorzach <zach@copley.name>
Fri, 15 Aug 2008 18:53:17 +0000 (14:53 -0400)
committerzach <zach@copley.name>
Fri, 15 Aug 2008 18:53:17 +0000 (14:53 -0400)
darcs-hash:20080815185317-ca946-11c3f9f7255180d5d6ea7b115b3e33b2abb7fe93.gz

actions/twitapistatuses.php
classes/Notice.php
lib/twitterapi.php

index b2bbb16f068799b022b2ac0316678a96e95b7e12..3f9e930737760c7a1a5b0653188345c87bcbd381 100644 (file)
@@ -375,9 +375,9 @@ class TwitapistatusesAction extends TwitterapiAction {
                parent::handle($args);
 
                $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';
@@ -397,16 +397,30 @@ class TwitapistatusesAction extends TwitterapiAction {
                    // 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);
index cb220394dde149d61d3f80c548f29536b923b6a7..6aa8e375b0c412fa2d5e5037ab47153b695c85d9 100644 (file)
@@ -76,11 +76,12 @@ class Notice extends DB_DataObject
                return true;
        }
        
-       static function saveNew($profile_id, $content, $source=NULL, $is_local=1) {
+       static function saveNew($profile_id, $content, $source=NULL, $is_local=1, $reply_to=NULL) {
                
                $notice = new Notice();
                $notice->profile_id = $profile_id;
                $notice->is_local = $is_local;
+               $notice->reply_to = $reply_to;
                $notice->created = DB_DataObject_Cast::dateTime();
                $notice->content = $content;
                $notice->rendered = common_render_content($notice->content, $notice);
index 30d5bba237f34dd98a3cc26d923b1102a71db2d0..8b4c24cabc77f8152b2e75c3cacc0275c48e0c7d 100644 (file)
@@ -158,13 +158,15 @@ class TwitterapiAction extends Action {
                $notice = Notice::staticGet($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: This is all that Twitter does.  It doesn't show an XML or JSON error msg.
+                       // Should we call client_error() to be more consistent?
                        header('HTTP/1.1 404 Not Found');
                }