summaryrefslogtreecommitdiff
path: root/actions
diff options
context:
space:
mode:
authorEvan Prodromou <evan@prodromou.name>2008-07-18 00:13:23 -0400
committerEvan Prodromou <evan@prodromou.name>2008-07-18 00:13:23 -0400
commit902bab5818123a8e8fd6e10c7a49f16d050d2b0c (patch)
tree5738928f08d0c1153d0cb546d487be26cf6e4fcf /actions
parent2ebe1fc61cb71cf9468763b837263e9101151127 (diff)
show friendship stuff
darcs-hash:20080718041323-84dde-2cc93bd2ced792797db634c4c4cd2a72a6ae61be.gz
Diffstat (limited to 'actions')
-rw-r--r--actions/twitapifriendships.php133
1 files changed, 128 insertions, 5 deletions
diff --git a/actions/twitapifriendships.php b/actions/twitapifriendships.php
index e4888008b..c8fe95029 100644
--- a/actions/twitapifriendships.php
+++ b/actions/twitapifriendships.php
@@ -23,23 +23,146 @@ require_once(INSTALLDIR.'/lib/twitterapi.php');
class TwitapifriendshipsAction extends TwitterapiAction {
-
function create($args, $apidata) {
parent::handle($args);
- common_server_error("API method under construction.", $code=501);
+
+ $id = $this->trimmed('id');
+
+ $other = $this->get_user($id);
+
+ if (!$other) {
+ $this->client_error(_('No such user'));
+ return;
+ }
+
+ $user = $apidata['user'];
+
+ if ($user->isSubscribed($other)) {
+ $this->client_error(_('Already subscribed.'));
+ return;
+ }
+
+ $sub = new Subscription();
+ $sub->subscriber = $user->id;
+ $sub->subscribed = $other->id;
+
+ $result = $sub->insert();
+
+ if (!$result) {
+ $this->server_error(_('Could not subscribe'));
+ return;
+ }
+
+ mail_subscribe_notify($other, $user);
+
+ $this->show_profile($other);
exit();
}
+ //destroy
+ //
+ //Discontinues friendship with the user specified in the ID parameter as the authenticating user. Returns the un-friended user in the requested format when successful. Returns a string describing the failure condition when unsuccessful.
+ //
+ //URL: http://twitter.com/friendships/destroy/id.format
+ //
+ //Formats: xml, json
+ //
+ //Parameters:
+ //
+ //* id. Required. The ID or screen name of the user with whom to discontinue friendship. Ex: http://twitter.com/friendships/destroy/12345.json or http://twitter.com/friendships/destroy/bob.xml
+
function destroy($args, $apidata) {
parent::handle($args);
- common_server_error("API method under construction.", $code=501);
+ $id = $this->trimmed('id');
+
+ # We can't subscribe to a remote person, but we can unsub
+
+ $other = $this->get_profile($id);
+ $user = $apidata['user'];
+
+ $sub = new Subscription();
+ $sub->subscriber = $user->id;
+ $sub->subscribed = $other->id;
+
+ if ($sub->fetch(TRUE)) {
+ $sub->delete();
+ }
+
+ $this->show_profile($other);
exit();
}
+
+ // Tests if a friendship exists between two users.
+ //
+ //
+ // URL: http://twitter.com/friendships/exists.format
+ //
+ // Formats: xml, json, none
+ //
+ // Parameters:
+ //
+ // * user_a. Required. The ID or screen_name of the first user to test friendship for.
+ // * user_b. Required. The ID or screen_name of the second user to test friendship for.
+ // * Ex: http://twitter.com/friendships/exists.xml?user_a=alice&user_b=bob
function exists($args, $apidata) {
parent::handle($args);
- common_server_error("API method under construction.", $code=501);
- exit();
+ $user_a_id = $this->trimmed('user_a');
+ $user_b_id = $this->trimmed('user_b');
+ $user_a = $this->get_profile($user_a_id);
+ $user_b = $this->get_profile($user_b_id);
+
+ if (!$user_a || !$user_b) {
+ $this->client_error(_('No such user'));
+ return;
+ }
+
+ if ($user_a->isSubscribed($user_b)) {
+ $result = 'true';
+ } else {
+ $result = 'false';
+ }
+
+ switch ($apidata['content-type']) {
+ case 'xml':
+ common_start_xml();
+ common_element('friends', NULL, $result);
+ common_end_xml();
+ break;
+ case 'json':
+ print json_encode($result);
+ print "\n";
+ break;
+ default:
+ print $result;
+ break;
+ }
+
+ }
+
+ function get_profile($id) {
+ if (is_numeric($id)) {
+ return Profile::staticGet($id);
+ } else {
+ $user = User::staticGet('nickname', $id);
+ return $user->getProfile();
+ }
+ }
+
+ function get_user($id) {
+ if (is_numeric($id)) {
+ return User::staticGet($id);
+ } else {
+ $user = User::staticGet('nickname', $id);
+ return $user->getProfile();
+ }
}
+ function show_profile($profile) {
+ $profile_array = $this->user_array($profile);
+ $notice = $profile->getCurrentStatus();
+ if ($notice) {
+ $status_array = $this->status_array($notice):
+ }
+ }
} \ No newline at end of file