]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/apiaction.php
Possible hack for tags from private dents in public profile or wrong scope (both...
[quix0rs-gnu-social.git] / lib / apiaction.php
index f8ffbc84a5b4bc449abe779c160bb2146aee1917..e672f3a7e6044b1a717782bceb42cc9247578d73 100644 (file)
@@ -54,7 +54,7 @@
 
     @subsection usermethods_sec User Methods
 
-    @subsection directmessagemethods_sec Direct Message Methods
+    @subsection directmessagemethods_sec Direct Message Methods (now a plugin)
 
     @subsection friendshipmethods_sec Friendship Methods
 
@@ -123,10 +123,13 @@ class ApiAction extends Action
     var $auth_user = null;
     var $page      = null;
     var $count     = null;
+    var $offset    = null;
+    var $limit     = null;
     var $max_id    = null;
     var $since_id  = null;
     var $source    = null;
     var $callback  = null;
+    var $format    = null;
 
     var $access    = self::READ_ONLY;  // read (default) or read-write
 
@@ -151,6 +154,10 @@ class ApiAction extends Action
         $this->max_id   = (int)$this->arg('max_id', 0);
         $this->since_id = (int)$this->arg('since_id', 0);
 
+        // These two are not used everywhere, mainly just AtompubAction extensions
+        $this->offset   = ($this->page-1) * $this->count;
+        $this->limit    = $this->count + 1;
+
         if ($this->arg('since')) {
             header('X-StatusNet-Warning: since parameter is disabled; use since_id');
         }
@@ -243,8 +250,6 @@ class ApiAction extends Action
 
         $twitter_user['created_at'] = $this->dateTwitter($profile->created);
 
-        $twitter_user['favourites_count'] = $profile->faveCount(); // British spelling!
-
         $timezone = 'UTC';
 
         if (!empty($user) && $user->timezone) {
@@ -290,6 +295,9 @@ class ApiAction extends Action
 
         $twitter_user['statusnet_profile_url'] = $profile->profileurl;
 
+        // The event call to handle NoticeSimpleStatusArray lets plugins add data to the output array
+        Event::handle('TwitterUserArray', array($profile, &$twitter_user, $this->scoped, array()));
+
         return $twitter_user;
     }
 
@@ -299,9 +307,9 @@ class ApiAction extends Action
 
         if (!empty($notice->repeat_of)) {
             $original = Notice::getKV('id', $notice->repeat_of);
-            if (!empty($original)) {
-                $original_array = $this->twitterSimpleStatusArray($original, $include_user);
-                $base['retweeted_status'] = $original_array;
+            if ($original instanceof Notice) {
+                $orig_array = $this->twitterSimpleStatusArray($original, $include_user);
+                $base['retweeted_status'] = $orig_array;
             }
         }
 
@@ -329,7 +337,7 @@ class ApiAction extends Action
         $source = null;
 
         $ns = $notice->getSource();
-        if ($ns) {
+        if ($ns instanceof Notice_source) {
             if (!empty($ns->name) && !empty($ns->url)) {
                 $source = '<a href="'
                    . htmlspecialchars($ns->url)
@@ -369,10 +377,8 @@ class ApiAction extends Action
         }
 
         if (!is_null($this->scoped)) {
-            $twitter_status['favorited'] = $this->scoped->hasFave($notice);
             $twitter_status['repeated']  = $this->scoped->hasRepeated($notice);
         } else {
-            $twitter_status['favorited'] = false;
             $twitter_status['repeated'] = false;
         }
 
@@ -384,13 +390,15 @@ class ApiAction extends Action
             $twitter_status['attachments'] = array();
 
             foreach ($attachments as $attachment) {
-                $enclosure_o=$attachment->getEnclosure();
-                if ($enclosure_o) {
+                try {
+                    $enclosure_o = $attachment->getEnclosure();
                     $enclosure = array();
                     $enclosure['url'] = $enclosure_o->url;
                     $enclosure['mimetype'] = $enclosure_o->mimetype;
                     $enclosure['size'] = $enclosure_o->size;
                     $twitter_status['attachments'][] = $enclosure;
+                } catch (ServerException $e) {
+                    // There was not enough metadata available
                 }
             }
         }
@@ -406,6 +414,10 @@ class ApiAction extends Action
         $twitter_status['statusnet_html'] = $notice->rendered;
         $twitter_status['statusnet_conversation_id'] = intval($notice->conversation);
 
+        // The event call to handle NoticeSimpleStatusArray lets plugins add data to the output array
+        Event::handle('NoticeSimpleStatusArray', array($notice, &$twitter_status, $this->scoped,
+                                                       array('include_user'=>$include_user)));
+
         return $twitter_status;
     }
 
@@ -510,13 +522,15 @@ class ApiAction extends Action
             $enclosures = array();
 
             foreach ($attachments as $attachment) {
-                $enclosure_o=$attachment->getEnclosure();
-                if ($enclosure_o) {
+                try {
+                    $enclosure_o = $attachment->getEnclosure();
                     $enclosure = array();
                     $enclosure['url'] = $enclosure_o->url;
                     $enclosure['mimetype'] = $enclosure_o->mimetype;
                     $enclosure['size'] = $enclosure_o->size;
                     $enclosures[] = $enclosure;
+                } catch (ServerException $e) {
+                    // There was not enough metadata available
                 }
             }
 
@@ -572,13 +586,16 @@ class ApiAction extends Action
     {
         $details = array();
 
+               $source_profile = $source->getProfile();
+               $target_profile = $target->getProfile();                
+
         $details['screen_name'] = $source->nickname;
-        $details['followed_by'] = $target->isSubscribed($source);
-        $details['following'] = $source->isSubscribed($target);
+        $details['followed_by'] = $target->isSubscribed($source_profile);
+        $details['following'] = $source->isSubscribed($target_profile);
 
         $notifications = false;
 
-        if ($source->isSubscribed($target)) {
+        if ($source->isSubscribed($target_profile)) {
             $sub = Subscription::pkeyGet(array('subscriber' =>
                 $source->id, 'subscribed' => $target->id));
 
@@ -588,7 +605,7 @@ class ApiAction extends Action
         }
 
         $details['notifications_enabled'] = $notifications;
-        $details['blocking'] = $source->hasBlocked($target);
+        $details['blocking'] = $source->hasBlocked($target_profile);
         $details['id'] = intval($source->id);
 
         return $details;
@@ -771,7 +788,7 @@ class ApiAction extends Action
     function showSingleAtomStatus($notice)
     {
         header('Content-Type: application/atom+xml; charset=utf-8');
-        print $notice->asAtomEntry(true, true, true, $this->auth_user);
+        print $notice->asAtomEntry(true, true, true, $this->auth_user->getProfile());
     }
 
     function show_single_json_status($notice)
@@ -956,104 +973,6 @@ class ApiAction extends Action
         $this->elementEnd('entry');
     }
 
-    function showXmlDirectMessage($dm, $namespaces=false)
-    {
-        $attrs = array();
-        if ($namespaces) {
-            $attrs['xmlns:statusnet'] = 'http://status.net/schema/api/1/';
-        }
-        $this->elementStart('direct_message', $attrs);
-        foreach($dm as $element => $value) {
-            switch ($element) {
-            case 'sender':
-            case 'recipient':
-                $this->showTwitterXmlUser($value, $element);
-                break;
-            case 'text':
-                $this->element($element, null, common_xml_safe_str($value));
-                break;
-            default:
-                $this->element($element, null, $value);
-                break;
-            }
-        }
-        $this->elementEnd('direct_message');
-    }
-
-    function directMessageArray($message)
-    {
-        $dmsg = array();
-
-        $from_profile = $message->getFrom();
-        $to_profile = $message->getTo();
-
-        $dmsg['id'] = intval($message->id);
-        $dmsg['sender_id'] = intval($from_profile->id);
-        $dmsg['text'] = trim($message->content);
-        $dmsg['recipient_id'] = intval($to_profile->id);
-        $dmsg['created_at'] = $this->dateTwitter($message->created);
-        $dmsg['sender_screen_name'] = $from_profile->nickname;
-        $dmsg['recipient_screen_name'] = $to_profile->nickname;
-        $dmsg['sender'] = $this->twitterUserArray($from_profile, false);
-        $dmsg['recipient'] = $this->twitterUserArray($to_profile, false);
-
-        return $dmsg;
-    }
-
-    function rssDirectMessageArray($message)
-    {
-        $entry = array();
-
-        $from = $message->getFrom();
-
-        $entry['title'] = sprintf('Message from %1$s to %2$s',
-            $from->nickname, $message->getTo()->nickname);
-
-        $entry['content'] = common_xml_safe_str($message->rendered);
-        $entry['link'] = common_local_url('showmessage', array('message' => $message->id));
-        $entry['published'] = common_date_iso8601($message->created);
-
-        $taguribase = TagURI::base();
-
-        $entry['id'] = "tag:$taguribase:$entry[link]";
-        $entry['updated'] = $entry['published'];
-
-        $entry['author-name'] = $from->getBestName();
-        $entry['author-uri'] = $from->homepage;
-
-        $entry['avatar'] = $from->avatarUrl(AVATAR_STREAM_SIZE);
-        try {
-            $avatar = $from->getAvatar(AVATAR_STREAM_SIZE);
-            $entry['avatar-type'] = $avatar->mediatype;
-        } catch (Exception $e) {
-            $entry['avatar-type'] = 'image/png';
-        }
-
-        // RSS item specific
-
-        $entry['description'] = $entry['content'];
-        $entry['pubDate'] = common_date_rfc2822($message->created);
-        $entry['guid'] = $entry['link'];
-
-        return $entry;
-    }
-
-    function showSingleXmlDirectMessage($message)
-    {
-        $this->initDocument('xml');
-        $dmsg = $this->directMessageArray($message);
-        $this->showXmlDirectMessage($dmsg, true);
-        $this->endDocument('xml');
-    }
-
-    function showSingleJsonDirectMessage($message)
-    {
-        $this->initDocument('json');
-        $dmsg = $this->directMessageArray($message);
-        $this->showJsonObjects($dmsg);
-        $this->endDocument('json');
-    }
-
     function showAtomGroups($group, $title, $id, $link, $subtitle=null, $selfuri=null)
     {
         $this->initDocument('atom');
@@ -1324,7 +1243,6 @@ class ApiAction extends Action
         default:
             // TRANS: Client error on an API request with an unsupported data format.
             $this->clientError(_('Not a supported data format.'));
-            break;
         }
 
         return;
@@ -1351,7 +1269,6 @@ class ApiAction extends Action
         default:
             // TRANS: Client error on an API request with an unsupported data format.
             $this->clientError(_('Not a supported data format.'));
-            break;
         }
         return;
     }
@@ -1406,7 +1323,6 @@ class ApiAction extends Action
         default:
             // TRANS: Client error on an API request with an unsupported data format.
             $this->clientError(_('Not a supported data format.'));
-            return;
         }
         return;
     }