]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Implement friendships/show API method
authorZach Copley <zach@controlyourself.ca>
Fri, 3 Jul 2009 22:42:12 +0000 (15:42 -0700)
committerZach Copley <zach@controlyourself.ca>
Fri, 3 Jul 2009 22:42:12 +0000 (15:42 -0700)
actions/twitapifriendships.php
lib/twitterapi.php

index 35e0164318b03e0aac0b0f2fd91f90f329491eac..5fb55e9ffed488ddcd47ae6bfc08ff5ecb109e14 100644 (file)
@@ -162,7 +162,6 @@ class TwitapifriendshipsAction extends TwitterapiAction
 
     function show($args, $apidata)
     {
-
         parent::handle($args);
 
         if (!in_array($apidata['content-type'], array('xml', 'json'))) {
@@ -170,8 +169,76 @@ class TwitapifriendshipsAction extends TwitterapiAction
             return;
         }
 
-        print "gar";
+        $source_id          = (int)$this->trimmed('source_id');
+        $source_screen_name = $this->trimmed('source_screen_name');
+
+        // If the source is not specified for an unauthenticated request,
+        // the method will return an HTTP 403.
+
+        if (empty($source_id) && empty($source_screen_name)) {
+            if (empty($apidata['user'])) {
+                $this->clientError(_('Could not determine source user.'),
+                        $code = 403);
+                return;
+            }
+        }
+
+        $source = null;
+
+        if (!empty($source_id)) {
+            $source = User::staticGet($source_id);
+        } elseif (!empty($source_screen_name)) {
+            $source = User::staticGet('nickname', $source_screen_name);
+        } else {
+            $source = $apidata['user'];
+        }
+
+        // If a source or target is specified but does not exist,
+        // the method will return an HTTP 404.
 
+        if (empty($source)) {
+            $this->clientError(_('Could not determine source user.'),
+                $code = 404);
+            return;
+        }
+
+        $target_id          = (int)$this->trimmed('target_id');
+        $target_screen_name = $this->trimmed('target_screen_name');
+
+        $target = null;
+
+        if (!empty($target_id)) {
+            $target = User::staticGet($target_id);
+        } elseif (!empty($target_screen_name)) {
+            $target = User::staticGet('nickname', $target_screen_name);
+        } else {
+            $this->clientError(_('Target user not specified.'),
+                $code = 403);
+            return;
+        }
+
+        if (empty($target)) {
+            $this->clientError(_('Could not find target user.'),
+                $code = 404);
+            return;
+        }
+
+        $result = $this->twitter_relationship_array($source, $target);
+
+        switch ($apidata['content-type']) {
+        case 'xml':
+            $this->init_document('xml');
+            $this->show_twitter_xml_relationship($result[relationship]);
+            $this->end_document('xml');
+            break;
+        case 'json':
+            $this->init_document('json');
+            print json_encode($result);
+            $this->end_document('json');
+            break;
+        default:
+            break;
+        }
     }
 
-}
\ No newline at end of file
+}
index f538a0298148e2c49659dab968e5cb7c5c89a381..40e5b5067796e45e1d914a3d2bca335ddd16524a 100644 (file)
@@ -278,6 +278,67 @@ class TwitterapiAction extends Action
         return $twitter_dm;
     }
 
+    function twitter_relationship_array($source, $target)
+    {
+        $relationship = array();
+
+        $relationship['source'] =
+            $this->relationship_details_array($source, $target);
+        $relationship['target'] =
+            $this->relationship_details_array($target, $source);
+
+        return array('relationship' => $relationship);
+    }
+
+    function relationship_details_array($source, $target)
+    {
+        $details = array();
+
+        $details['screen_name'] = $source->nickname;
+        $details['followed_by'] = $target->isSubscribed($source);
+        $details['following'] = $source->isSubscribed($target);
+
+        $notifications = false;
+
+        if ($source->isSubscribed($target)) {
+
+            $sub = Subscription::pkeyGet(array('subscriber' =>
+                $source->id, 'subscribed' => $target->id));
+
+            if (!empty($sub)) {
+                $notifications = ($sub->jabber || $sub->sms);
+            }
+        }
+
+        $details['notifications_enabled'] = $notifications;
+        $details['blocking'] = $source->hasBlocked($target);
+        $details['id'] = $source->id;
+
+        return $details;
+    }
+
+    function show_twitter_xml_relationship($relationship)
+    {
+        $this->elementStart('relationship');
+
+        foreach($relationship as $element => $value) {
+            if ($element == 'source' || $element == 'target') {
+                $this->elementStart($element);
+                $this->show_xml_relationship_details($value);
+                $this->elementEnd($element);
+            }
+        }
+
+        $this->elementEnd('relationship');
+    }
+
+    function show_xml_relationship_details($details)
+    {
+        foreach($details as $element => $value) {
+            $this->element($element, null, $value);
+        }
+    }
+
     function show_twitter_xml_status($twitter_status)
     {
         $this->elementStart('status');