From 902bab5818123a8e8fd6e10c7a49f16d050d2b0c Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 18 Jul 2008 00:13:23 -0400 Subject: show friendship stuff darcs-hash:20080718041323-84dde-2cc93bd2ced792797db634c4c4cd2a72a6ae61be.gz --- actions/twitapifriendships.php | 133 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 128 insertions(+), 5 deletions(-) (limited to 'actions/twitapifriendships.php') 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 -- cgit v1.2.3-54-g00ecf