]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/activitycontext.php
Avoid having to check for notices without rendered copies in upgrade.php
[quix0rs-gnu-social.git] / lib / activitycontext.php
index acbd0e599f5993fbc459d5c2bec7be403126a396..32f15c1e9f963d8afa48d4e852b2067fafce2a44 100644 (file)
@@ -37,24 +37,27 @@ class ActivityContext
     public $replyToID;
     public $replyToUrl;
     public $location;
-    public $attention = array();
+    public $attention = array();    // 'uri' => 'type'
     public $conversation;
-    public $forwardID; // deprecated, use ActivityVerb::SHARE instead
-    public $forwardUrl; // deprecated, use ActivityVerb::SHARE instead
+    public $scope;
 
     const THR     = 'http://purl.org/syndication/thread/1.0';
     const GEORSS  = 'http://www.georss.org/georss';
     const OSTATUS = 'http://ostatus.org/schema/1.0';
 
-    const INREPLYTO = 'in-reply-to';
-    const REF       = 'ref';
-    const HREF      = 'href';
+    const INREPLYTO  = 'in-reply-to';
+    const REF        = 'ref';
+    const HREF       = 'href';
+
+    // OStatus element names with prefixes
+    const OBJECTTYPE = 'ostatus:object-type';   // FIXME: Undocumented!
+    const CONVERSATION = 'ostatus:conversation';
 
     const POINT     = 'point';
 
-    const ATTENTION    = 'ostatus:attention';
     const MENTIONED    = 'mentioned';
-    const CONVERSATION = 'ostatus:conversation';
+
+    const ATTN_PUBLIC  = 'http://activityschema.org/collection/public';
 
     function __construct($element = null)
     {
@@ -71,27 +74,28 @@ class ActivityContext
 
         $this->location = $this->getLocation($element);
 
-        $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION);
+        $convs = $element->getElementsByTagNameNS(self::OSTATUS, self::CONVERSATION);
+        foreach ($convs as $conv) {
+            $this->conversation = $conv->textContent;
+        }
+        if (empty($this->conversation)) {
+            // fallback to the atom:link rel="ostatus:conversation" element
+            $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION);
+        }
 
         // Multiple attention links allowed
 
         $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) {
-                $attention[] = $link->getAttribute(self::HREF);
-            } elseif ($linkRel == self::MENTIONED) {
-                $attention[] = $link->getAttribute(self::HREF);
+            $linkRel  = $link->getAttribute(ActivityUtils::REL);
+            $linkHref = $link->getAttribute(self::HREF);
+            if ($linkRel == self::MENTIONED && $linkHref !== '') {
+                $this->attention[$linkHref] = $link->getAttribute(ActivityContext::OBJECTTYPE);
             }
         }
-        $this->attention = array_unique($attention);
     }
 
     /**
@@ -142,10 +146,8 @@ class ActivityContext
     {
         $context = array();
 
-        $context['replyTo']    =   $this->getInReplyToArray();
+        $context['inReplyTo']    = $this->getInReplyToArray();
         $context['conversation'] = $this->conversation;
-        $context['forwardId']    = $this->forwardID;
-        $context['forwardUrl']   = $this->forwardUrl;
 
         return array_filter($context);
     }
@@ -166,11 +168,10 @@ class ActivityContext
     {
         $tos = array();
 
-        foreach ($this->attention as $attnUrl) {
+        foreach ($this->attention as $attnUrl => $attnType) {
             $to = array(
-                'objectType' => 'person',
+                'objectType' => $attnType,  // can be empty
                 'id'         => $attnUrl,
-                'url'        => $attnUrl
             );
             $tos[] = $to;
         }
@@ -178,20 +179,31 @@ class ActivityContext
         return $tos;
     }
 
-    /*
-     * Show replyTo
+    /**
+     * 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()
      {
-         $replyToObj = array('objectType' => 'note');
+         if (empty($this->replyToID) && empty($this->replyToUrl)) {
+             return null;
+         }
 
-         $replyToObj['id'] = $this->replyToID;
+         $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;
      }
 
 }