]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/activitystreamjsondocument.php
abstraction for starting and ending a menu
[quix0rs-gnu-social.git] / lib / activitystreamjsondocument.php
index 57ece9f6bf78d84cdd4a36fc5f24495b5e61e62d..2b99d19eb76f27151c3fced17d7bca3b2416b78e 100644 (file)
@@ -43,6 +43,7 @@ if (!defined('STATUSNET'))
  */
 class ActivityStreamJSONDocument
 {
+
     /* Top level array representing the document */
     protected $doc = array();
 
@@ -57,9 +58,29 @@ 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;
     }
 
     /**
@@ -71,7 +92,6 @@ class ActivityStreamJSONDocument
 
     function addItemsFromNotices($notices)
     {
-        common_debug("addItemsFromNotices");
         if (is_array($notices)) {
             foreach ($notices as $notice) {
                 $this->addItemFromNotice($notice);
@@ -93,12 +113,23 @@ class ActivityStreamJSONDocument
     {
         $cur = empty($this->cur) ? common_current_user() : $this->cur;
 
-        $act          = $notice->asActivity();
+        $act          = $notice->asActivity($cur);
         $act->extra[] = $notice->noticeInfo($cur);
-
         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 +137,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
+            'type'  => $mediaType // extension
+        );
+    }
+
+    function asArray()
+    {
+        return array_filter($this->linkDict);
+    }
+}