]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/activitycontext.php
Merge branch 'nightly' into 'nightly'
[quix0rs-gnu-social.git] / lib / activitycontext.php
index bd5bb5f76ef56e6e4f75da987fe980d986463b07..68ee08a8fbcc3ac79fea11d4339e91b742ed76e0 100644 (file)
@@ -37,25 +37,28 @@ class ActivityContext
     public $replyToID;
     public $replyToUrl;
     public $location;
-    public $attention = array();
-    public $attentionType = array();
+    public $attention = array();    // 'uri' => 'type'
     public $conversation;
-    public $forwardID; // deprecated, use ActivityVerb::SHARE instead
-    public $forwardUrl; // deprecated, use ActivityVerb::SHARE instead
+    public $conversation_url;
     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 = 'conversation';
 
     const POINT     = 'point';
 
     const MENTIONED    = 'mentioned';
-    const CONVERSATION = 'ostatus:conversation';
+
+    const ATTN_PUBLIC  = 'http://activityschema.org/collection/public';
 
     function __construct($element = null)
     {
@@ -72,23 +75,37 @@ class ActivityContext
 
         $this->location = $this->getLocation($element);
 
-        $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION);
+        foreach ($element->getElementsByTagNameNS(self::OSTATUS, self::CONVERSATION) as $conv) {
+            if ($conv->hasAttribute('ref')) {
+                $this->conversation = $conv->getAttribute('ref');
+                if ($conv->hasAttribute('href')) {
+                    $this->conversation_url = $conv->getAttribute('href');
+                }
+            } else {
+                $this->conversation = $conv->textContent;
+            }
+            if (!empty($this->conversation)) {
+                break;
+            }
+        }
+        if (empty($this->conversation)) {
+            // fallback to the atom:link rel="ostatus:conversation" element
+            $this->conversation = ActivityUtils::getLink($element, 'ostatus:'.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);
-
-            if ($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);
     }
 
     /**
@@ -141,8 +158,7 @@ class ActivityContext
 
         $context['inReplyTo']    = $this->getInReplyToArray();
         $context['conversation'] = $this->conversation;
-        $context['forwardId']    = $this->forwardID;
-        $context['forwardUrl']   = $this->forwardUrl;
+        $context['conversation_url'] = $this->conversation_url;
 
         return array_filter($context);
     }
@@ -163,15 +179,10 @@ class ActivityContext
     {
         $tos = array();
 
-        foreach ($this->attention as $attnUrl) {
-            if (array_key_exists($attnUrl, $this->attentionType)) {
-                $type = ActivityObject::canonicalType($this->attentionType[$attnUrl]);
-            } else {
-                $type = ActivityObject::canonicalType(ActivityObject::PERSON);
-            }
+        foreach ($this->attention as $attnUrl => $attnType) {
             $to = array(
-                'objectType' => $type,
-                'id'         => $attnUrl
+                'objectType' => $attnType,  // can be empty
+                'id'         => $attnUrl,
             );
             $tos[] = $to;
         }