summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzach <zach@controlyourself.ca>2008-10-04 23:09:15 -0400
committerzach <zach@controlyourself.ca>2008-10-04 23:09:15 -0400
commit2c2821799dcc767f059287af5fb740783a78819f (patch)
tree87b3dd596a7d225a4d990b95b96b34fcda95b695
parent06a80c829b7e183f42bafd1dfd92b65f11dad42b (diff)
Twitter-compatible API - hooked in command interpreter
darcs-hash:20081005030915-462f3-0c0541f062020ee958f1df0361e27f44d6c35e95.gz
-rw-r--r--actions/twitapistatuses.php71
1 files changed, 47 insertions, 24 deletions
diff --git a/actions/twitapistatuses.php b/actions/twitapistatuses.php
index 16ed7484c..9865111d7 100644
--- a/actions/twitapistatuses.php
+++ b/actions/twitapistatuses.php
@@ -331,39 +331,50 @@ class TwitapistatusesAction extends TwitterapiAction {
return;
}
- $reply_to = NULL;
+ // Check for commands
+ $inter = new CommandInterpreter();
+ $cmd = $inter->handle_command($user, $status);
- if ($in_reply_to_status_id) {
+ if ($cmd) {
- // check whether notice actually exists
- $reply = Notice::staticGet($in_reply_to_status_id);
+ if ($this->supported($cmd)) {
+ $cmd->execute(new Channel());
+ }
- if ($reply) {
- $reply_to = $in_reply_to_status_id;
- } else {
- $this->client_error(_('Not found'), $code = 404, $apidata['content-type']);
- return;
+ // cmd not supported? Twitter just returns your latest status.
+ // And, it returns your last status whether the cmd was successful
+ // or not!
+ $n = $user->getCurrentNotice();
+ $apidata['api_arg'] = $n->id;
+ } else {
+
+ $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']);
+ return;
+ }
}
- }
- $notice = Notice::saveNew($user->id, $status, $source, 1, $reply_to);
+ $notice = Notice::saveNew($user->id, $status, $source, 1, $reply_to);
- if (is_string($notice)) {
- $this->server_error($notice);
- return;
- }
+ if (is_string($notice)) {
+ $this->server_error($notice);
+ return;
+ }
- common_broadcast_notice($notice);
+ common_broadcast_notice($notice);
+ $apidata['api_arg'] = $notice->id;
+ }
- // FIXME: Bad Hack
- // I should be able to just sent this notice off for display,
- // but $notice->created does not contain a string at this
- // point and I don't know how to convert it to one here. So
- // I'm forced to have DBObject pull the notice back out of the
- // DB before printing. --Zach
- $apidata['api_arg'] = $notice->id;
$this->show($args, $apidata);
-
}
/*
@@ -688,5 +699,17 @@ class TwitapistatusesAction extends TwitterapiAction {
return User::staticGet('nickname', $id);
}
}
+
+ function supported($cmd) {
+
+ $cmdlist = array('MessageCommand', 'SubCommand', 'UnsubCommand', 'FavCommand');
+
+ if (in_array(get_class($cmd), $cmdlist)) {
+ return true;
+ }
+
+ return false;
+ }
+
}