From: Zach Copley <zach@controlyourself.ca>
Date: Sat, 30 May 2009 02:23:53 +0000 (-0700)
Subject: Ticket #1568 - API should return full user objects
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=78f8b91a13ee07ed3344fd6411a0829a16bef4b1;p=quix0rs-gnu-social.git

Ticket #1568 - API should return full user objects
---

diff --git a/actions/twitapiusers.php b/actions/twitapiusers.php
index 1542cfb33e..b90bbfa985 100644
--- a/actions/twitapiusers.php
+++ b/actions/twitapiusers.php
@@ -25,110 +25,61 @@ class TwitapiusersAction extends TwitterapiAction
 {
 
     function show($args, $apidata)
-    {        
+    {
         parent::handle($args);
 
-        if (!in_array($apidata['content-type'], array('xml', 'json'))) {            
+        if (!in_array($apidata['content-type'], array('xml', 'json'))) {
             $this->clientError(_('API method not found!'), $code = 404);
             return;
         }
-                
-		$user = null;
-		$email = $this->arg('email');
-		$user_id = $this->arg('user_id');
-
-		if ($email) {
-			$user = User::staticGet('email', $email);
-		} elseif ($user_id) {
-		 	$user = $this->get_user($user_id);  
-		} elseif (isset($apidata['api_arg'])) {
-			$user = $this->get_user($apidata['api_arg']);
-	    } elseif (isset($apidata['user'])) {
-	        $user = $apidata['user'];
-	    }
-	
-		if (!$user) {		    
-			// XXX: Twitter returns a random(?) user instead of throwing and err! -- Zach
-			$this->client_error(_('Not found.'), 404, $apidata['content-type']);
-			return;
-		}
-
-		$profile = $user->getProfile();
-
-		if (!$profile) {
-			common_server_error(_('User has no profile.'));
-			return;
-		}
-
-		$twitter_user = $this->twitter_user_array($profile, true);
-
-		// Add in extended user fields offered up by this method
-		$twitter_user['created_at'] = $this->date_twitter($profile->created);
-
-		$subbed = DB_DataObject::factory('subscription');
-		$subbed->subscriber = $profile->id;
-		$subbed_count = (int) $subbed->count() - 1;
-
-		$notices = DB_DataObject::factory('notice');
-		$notices->profile_id = $profile->id;
-		$notice_count = (int) $notices->count();
-
-		$twitter_user['friends_count'] = (is_int($subbed_count)) ? $subbed_count : 0;
-		$twitter_user['statuses_count'] = (is_int($notice_count)) ? $notice_count : 0;
-
-		// Other fields Twitter sends...
-		$twitter_user['profile_background_color'] = '';
-		$twitter_user['profile_background_image_url'] = '';
-		$twitter_user['profile_text_color'] = '';
-		$twitter_user['profile_link_color'] = '';
-		$twitter_user['profile_sidebar_fill_color'] = '';
-		$twitter_user['profile_sidebar_border_color'] = '';
-		$twitter_user['profile_background_tile'] = false;
-
-		$faves = DB_DataObject::factory('fave');
-		$faves->user_id = $user->id;
-		$faves_count = (int) $faves->count();
-		$twitter_user['favourites_count'] = $faves_count;
-
-		$timezone = 'UTC';
-
-		if ($user->timezone) {
-			$timezone = $user->timezone;
-		}
-
-		$t = new DateTime;
-		$t->setTimezone(new DateTimeZone($timezone));
-		$twitter_user['utc_offset'] = $t->format('Z');
-		$twitter_user['time_zone'] = $timezone;
-
-		if (isset($apidata['user'])) {
-
-			$twitter_user['following'] = $apidata['user']->isSubscribed($profile);
-            
-			// Notifications on?
-			$sub = Subscription::pkeyGet(array('subscriber' =>
-				$apidata['user']->id, 'subscribed' => $profile->id));
-            
-			if ($sub) {
-				$twitter_user['notifications'] = ($sub->jabber || $sub->sms);
-			}
-		}
-        
-		if ($apidata['content-type'] == 'xml') {
-			$this->init_document('xml');
-			$this->show_twitter_xml_user($twitter_user);
-			$this->end_document('xml');
-		} elseif ($apidata['content-type'] == 'json') {
-			$this->init_document('json');
-			$this->show_json_objects($twitter_user);
-			$this->end_document('json');
-		} else {
-		    
-		    // This is in case 'show' was called via /account/verify_credentials
-		    // without a format (xml or json).
+
+        $user = null;
+        $email = $this->arg('email');
+        $user_id = $this->arg('user_id');
+
+        // XXX: email field deprecated in Twitter's API
+
+        // XXX: Also: need to add screen_name param
+
+        if ($email) {
+            $user = User::staticGet('email', $email);
+        } elseif ($user_id) {
+            $user = $this->get_user($user_id);
+        } elseif (isset($apidata['api_arg'])) {
+            $user = $this->get_user($apidata['api_arg']);
+        } elseif (isset($apidata['user'])) {
+            $user = $apidata['user'];
+        }
+
+        if (!$user) {
+            $this->client_error(_('Not found.'), 404, $apidata['content-type']);
+            return;
+        }
+
+        $profile = $user->getProfile();
+
+        if (!$profile) {
+            common_server_error(_('User has no profile.'));
+            return;
+        }
+
+        $twitter_user = $this->twitter_user_array($profile, true);
+
+        if ($apidata['content-type'] == 'xml') {
+            $this->init_document('xml');
+            $this->show_twitter_xml_user($twitter_user);
+            $this->end_document('xml');
+        } elseif ($apidata['content-type'] == 'json') {
+            $this->init_document('json');
+            $this->show_json_objects($twitter_user);
+            $this->end_document('json');
+        } else {
+
+            // This is in case 'show' was called via /account/verify_credentials
+            // without a format (xml or json).
             header('Content-Type: text/html; charset=utf-8');
             print 'Authorized';
         }
 
-	}
+    }
 }
diff --git a/lib/twitterapi.php b/lib/twitterapi.php
index caf8c07163..1d527b935f 100644
--- a/lib/twitterapi.php
+++ b/lib/twitterapi.php
@@ -54,7 +54,7 @@ class TwitterapiAction extends Action
     /**
      * Overrides XMLOutputter::element to write booleans as strings (true|false).
      * See that method's documentation for more info.
-     * 
+     *
      * @param string $tag     Element type or tagname
      * @param array  $attrs   Array of element attributes, as
      *                        key-value pairs
@@ -70,24 +70,85 @@ class TwitterapiAction extends Action
 
         return parent::element($tag, $attrs, $content);
     }
-    
+
     function twitter_user_array($profile, $get_notice=false)
     {
-
         $twitter_user = array();
 
+        $twitter_user['id'] = intval($profile->id);
         $twitter_user['name'] = $profile->getBestName();
-        $twitter_user['followers_count'] = $this->count_subscriptions($profile);
         $twitter_user['screen_name'] = $profile->nickname;
-        $twitter_user['description'] = ($profile->bio) ? $profile->bio : null;
         $twitter_user['location'] = ($profile->location) ? $profile->location : null;
-        $twitter_user['id'] = intval($profile->id);
+        $twitter_user['description'] = ($profile->bio) ? $profile->bio : null;
 
         $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
+        $twitter_user['profile_image_url'] = ($avatar) ? $avatar->displayUrl() :
+            Avatar::defaultImage(AVATAR_STREAM_SIZE);
 
-        $twitter_user['profile_image_url'] = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE);
-        $twitter_user['protected'] = false; # not supported by Laconica yet
         $twitter_user['url'] = ($profile->homepage) ? $profile->homepage : null;
+        $twitter_user['protected'] = false; # not supported by Laconica yet
+        $twitter_user['followers_count'] = $this->count_subscriptions($profile);
+
+        // To be supported soon...
+        $twitter_user['profile_background_color'] = '';
+        $twitter_user['profile_text_color'] = '';
+        $twitter_user['profile_link_color'] = '';
+        $twitter_user['profile_sidebar_fill_color'] = '';
+        $twitter_user['profile_sidebar_border_color'] = '';
+
+        $subbed = DB_DataObject::factory('subscription');
+        $subbed->subscriber = $profile->id;
+        $subbed_count = (int) $subbed->count() - 1;
+        $twitter_user['friends_count'] = (is_int($subbed_count)) ? $subbed_count : 0;
+
+        $twitter_user['created_at'] = $this->date_twitter($profile->created);
+
+        $faves = DB_DataObject::factory('fave');
+        $faves->user_id = $user->id;
+        $faves_count = (int) $faves->count();
+        $twitter_user['favourites_count'] = $faves_count; // British spelling!
+
+        // Need to pull up the user for some of this
+        $user = User::staticGet($profile->id);
+
+        $timezone = 'UTC';
+
+        if ($user->timezone) {
+            $timezone = $user->timezone;
+        }
+
+        $t = new DateTime;
+        $t->setTimezone(new DateTimeZone($timezone));
+
+        $twitter_user['utc_offset'] = $t->format('Z');
+        $twitter_user['time_zone'] = $timezone;
+
+        // To be supported some day, perhaps
+        $twitter_user['profile_background_image_url'] = '';
+        $twitter_user['profile_background_tile'] = false;
+
+        $notices = DB_DataObject::factory('notice');
+        $notices->profile_id = $profile->id;
+        $notice_count = (int) $notices->count();
+
+        $twitter_user['statuses_count'] = (is_int($notice_count)) ? $notice_count : 0;
+
+        // Is the requesting user following this user?
+        $twitter_user['following'] = false;
+        $twitter_user['notifications'] = false;
+
+        if (isset($apidata['user'])) {
+
+            $twitter_user['following'] = $apidata['user']->isSubscribed($profile);
+
+            // Notifications on?
+            $sub = Subscription::pkeyGet(array('subscriber' =>
+                $apidata['user']->id, 'subscribed' => $profile->id));
+
+            if ($sub) {
+                $twitter_user['notifications'] = ($sub->jabber || $sub->sms);
+            }
+        }
 
         if ($get_notice) {
             $notice = $profile->getCurrentNotice();