From 35d17146213228445b0f30548aca01c9e1a71154 Mon Sep 17 00:00:00 2001 From: zach Date: Fri, 15 Aug 2008 14:53:17 -0400 Subject: [PATCH] Twitter-compatible API: support for new in_reply_to_status_id in statuses/update darcs-hash:20080815185317-ca946-11c3f9f7255180d5d6ea7b115b3e33b2abb7fe93.gz --- actions/twitapistatuses.php | 24 +++++++++++++++++++----- classes/Notice.php | 3 ++- lib/twitterapi.php | 4 +++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php index b2bbb16f06..3f9e930737 100644 --- a/actions/twitapistatuses.php +++ b/actions/twitapistatuses.php @@ -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); diff --git a/classes/Notice.php b/classes/Notice.php index cb220394dd..6aa8e375b0 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -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); diff --git a/lib/twitterapi.php b/lib/twitterapi.php index 30d5bba237..8b4c24cabc 100644 --- a/lib/twitterapi.php +++ b/lib/twitterapi.php @@ -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'); }