]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Add image to JSON ActivityObject and title + links to the JSON document
authorZach Copley <zach@status.net>
Thu, 17 Feb 2011 00:21:46 +0000 (16:21 -0800)
committerZach Copley <zach@status.net>
Thu, 17 Feb 2011 00:21:46 +0000 (16:21 -0800)
actions/apitimelinefriends.php
lib/activity.php
lib/activityobject.php
lib/activitystreamjsondocument.php

index 3833418baa6cd5c5460b59a204934226386d11b2..0e356bb18be2bc08ba7eea5441b12fc32778ae3f 100644 (file)
@@ -266,6 +266,8 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
         case 'as':
             header('Content-Type: application/json; charset=utf-8');
             $doc = new ActivityStreamJSONDocument($this->auth_user);
+            $doc->setTitle($title);
+            $doc->addLink($link,'alternate', 'text/html');
             $doc->addItemsFromNotices($this->notices);
             $this->raw($doc->asString());
             break;
index 004646989951fce15d30a114e3923bb02ad2fc38..e6fefca28f9a9523a9dfeb037d7e2117674ca899 100644 (file)
@@ -387,7 +387,7 @@ class Activity
 
         // TODO: extensions (ActivityContext, OStatus stuff, etc.)
 
-        return $activity;
+        return array_filter($activity);
     }
 
     function asString($namespace=false, $author=true, $source=false)
index 53ffe1a172c7d101aafc9b3421345ffcb4afc6dc..17753f0df4aefe86371bf087efa08cbf5d8608e5 100644 (file)
@@ -652,13 +652,35 @@ class ActivityObject
 
 
         // TODO: downstreamDuplicates
-        // TODO: embedCode
+        // TODO: embedCode (video)
 
         // id
         $object['id'] = $this->id;
 
-        // TODO: image
-        // Need to make MediaLink serialization
+        if ($this->type == ActivityObject::PERSON
+            || $this->type == ActivityObject::GROUP) {
+
+            // XXX: Not sure what the best avatar is to use for the
+            // author's "image". For now, I'm using the stream size
+            // one, but possibly it should be large
+            $avatarLink = null;
+
+            foreach ($this->avatarLinks as $a) {
+                if ($a->height == AVATAR_STREAM_SIZE) {
+                    $avatarLink = $a;
+                    break;
+                }
+            }
+
+            $imgLink = new ActivityStreamsMediaLink(
+                $avatarLink->url,
+                $avatarLink->width,
+                $avatarLink->height,
+                $avatarLink->type
+            );
+
+            $object['image']  = $imgLink->asArray();
+        }
 
         // objectType
         $object['type'] = $this->type;
@@ -673,6 +695,6 @@ class ActivityObject
 
         // TODO: extensions (OStatus stuff, etc.)
 
-        return $object;
+        return array_filter($object);
     }
 }
index 57ece9f6bf78d84cdd4a36fc5f24495b5e61e62d..4fa456470e0b4c439c56aef7f37d0d20ac31036c 100644 (file)
@@ -43,6 +43,7 @@ if (!defined('STATUSNET'))
  */
 class ActivityStreamJSONDocument
 {
+
     /* Top level array representing the document */
     protected $doc = array();
 
@@ -57,9 +58,28 @@ class ActivityStreamJSONDocument
 
     function __construct($cur = null)
     {
+
         $this->cur = $cur;
 
+        /* Title of the JSON document */
+        $this->doc['title'] = null;
+
+        /* Array of activity items */
         $this->doc['items'] = array();
+
+        /* Array of links associated with the document */
+        $this->doc['links'] = array();
+
+    }
+
+    /**
+     * Set the title of the document
+     *
+     * @param String $title the title
+     */
+    function setTitle($title)
+    {
+        $this->doc['title'] = $title;
     }
 
     /**
@@ -99,6 +119,18 @@ class ActivityStreamJSONDocument
         array_push($this->doc['items'], $act->asArray());
     }
 
+    /**
+     * Add a link to the JSON document
+     *
+     * @param string $url the URL for the link
+     * @param string $rel the link relationship
+     */
+    function addLink($url = null, $rel = null, $mediaType = null)
+    {
+        $link = new ActivityStreamsLink($url, $rel, $mediaType);
+        $this->doc['link'][] = $link->asArray();
+    }
+
     /*
      * Return the entire document as a big string of JSON
      *
@@ -106,7 +138,81 @@ class ActivityStreamJSONDocument
      */
     function asString()
     {
-        return json_encode($this->doc);
+        return json_encode(array_filter($this->doc));
     }
 
 }
+
+/**
+ * A class for representing MediaLinks in JSON Activities
+ *
+ * @category Feed
+ * @package  StatusNet
+ * @author   Zach Copley <zach@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ */
+
+class ActivityStreamsMediaLink extends ActivityStreamsLink
+{
+    private $linkDict;
+
+    function __construct(
+        $url       = null,
+        $width     = null,
+        $height    = null,
+        $mediaType = null,
+        $rel       = null,
+        $duration  = null
+    )
+    {
+        parent::__construct($url, $rel, $mediaType);
+        $this->linkDict = array(
+            'width'      => $width,
+            'height'     => $height,
+            'duration'   => $duration
+        );
+    }
+
+    function asArray()
+    {
+        return array_merge(
+            parent::asArray(),
+            array_filter($this->linkDict)
+        );
+    }
+}
+
+/**
+ * A class for representing links in JSON Activities
+ *
+ * @category Feed
+ * @package  StatusNet
+ * @author   Zach Copley <zach@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ */
+
+class ActivityStreamsLink
+{
+    private $linkDict;
+
+    function __construct($url = null, $rel = null, $mediaType = null)
+    {
+        // links MUST have a URL
+        if (empty($url)) {
+            throw new Exception('Links must have a URL.');
+        }
+
+        $this->linkDict = array(
+            'url'        => $url,
+            'rel'        => $rel,      // extension
+            'media_type' => $mediaType // extension
+       );
+    }
+
+    function asArray()
+    {
+        return array_filter($this->linkDict);
+    }
+}