]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/activitycontext.php
Merge branch '1.0.x' of gitorious.org:statusnet/mainline into inline-comments
[quix0rs-gnu-social.git] / lib / activitycontext.php
index 2df7613f7d90385be94a481db18de4c29342ea0e..2eff3fb15fb1605513681efd16f32d25ed75786c 100644 (file)
@@ -39,6 +39,8 @@ class ActivityContext
     public $location;
     public $attention = array();
     public $conversation;
+    public $forwardID; // deprecated, use ActivityVerb::SHARE instead
+    public $forwardUrl; // deprecated, use ActivityVerb::SHARE instead
 
     const THR     = 'http://purl.org/syndication/thread/1.0';
     const GEORSS  = 'http://www.georss.org/georss';
@@ -51,10 +53,15 @@ class ActivityContext
     const POINT     = 'point';
 
     const ATTENTION    = 'ostatus:attention';
+    const MENTIONED    = 'mentioned';
     const CONVERSATION = 'ostatus:conversation';
 
-    function __construct($element)
+    function __construct($element = null)
     {
+        if (empty($element)) {
+            return;
+        }
+
         $replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR);
 
         if (!empty($replyToEl)) {
@@ -70,16 +77,21 @@ class ActivityContext
 
         $links = $element->getElementsByTagNameNS(ActivityUtils::ATOM, ActivityUtils::LINK);
 
+        $attention = array();
         for ($i = 0; $i < $links->length; $i++) {
-
             $link = $links->item($i);
 
             $linkRel = $link->getAttribute(ActivityUtils::REL);
 
+            // XXX: Deprecate this in favour of "mentioned" from Salmon spec
+            // http://salmon-protocol.googlecode.com/svn/trunk/draft-panzer-salmon-00.html#SALR
             if ($linkRel == self::ATTENTION) {
-                $this->attention[] = $link->getAttribute(self::HREF);
+                $attention[] = $link->getAttribute(self::HREF);
+            } elseif ($linkRel == self::MENTIONED) {
+                $attention[] = $link->getAttribute(self::HREF);
             }
         }
+        $this->attention = array_unique($attention);
     }
 
     /**
@@ -118,4 +130,80 @@ class ActivityContext
         common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
         return null;
     }
+
+    /**
+     * Returns context (StatusNet stuff) as an array suitable for serializing
+     * in JSON. Right now context stuff is an extension to Activity.
+     *
+     * @return array the context
+     */
+
+    function asArray()
+    {
+        $context = array();
+
+        $context['inReplyTo']    = $this->getInReplyToArray();
+        $context['conversation'] = $this->conversation;
+        $context['forwardId']    = $this->forwardID;
+        $context['forwardUrl']   = $this->forwardUrl;
+
+        return array_filter($context);
+    }
+
+    /**
+     * Returns an array of arrays representing Activity Objects (intended to be
+     * serialized in JSON) that represent WHO the Activity is supposed to
+     * be received by. This is not really specified but appears in an example
+     * of the current spec as an extension. We might want to figure out a JSON
+     * serialization for OStatus and use that to express mentions instead.
+     *
+     * XXX: People's ideas on how to do this are all over the place
+     *
+     * @return array the array of recipients
+     */
+
+    function getToArray()
+    {
+        $tos = array();
+
+        foreach ($this->attention as $attnUrl) {
+            $to = array(
+                'objectType' => 'person',
+                'id'         => $attnUrl,
+                'url'        => $attnUrl
+            );
+            $tos[] = $to;
+        }
+
+        return $tos;
+    }
+
+    /**
+     * Return an array for the notices this notice is a reply to 
+     * suitable for serializing as JSON note objects.
+     *
+     * @return array the array of notes
+     */
+
+     function getInReplyToArray()
+     {
+         if (empty($this->replyToID) && empty($this->replyToUrl)) {
+             return null;
+         }
+
+         $replyToObj = array('objectType' => 'note');
+
+         // XXX: Possibly shorten this to just the numeric ID?
+         //      Currently, it's the full URI of the notice.
+         if (!empty($this->replyToID)) {
+             $replyToObj['id'] = $this->replyToID;
+         }
+         if (!empty($this->replyToUrl)) {
+             $replyToObj['url'] = $this->replyToUrl;
+         }
+
+         return $replyToObj;
+     }
+
 }
+