X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Factivitycontext.php;h=32f15c1e9f963d8afa48d4e852b2067fafce2a44;hb=b596391fcd05dddc8c37495b663d3be074eac05d;hp=fd0dfe06c1b7bfef81f9e82a322dc689d23f31be;hpb=d8d9edfc990a20f67421e40a7d3055a58697a002;p=quix0rs-gnu-social.git diff --git a/lib/activitycontext.php b/lib/activitycontext.php index fd0dfe06c1..32f15c1e9f 100644 --- a/lib/activitycontext.php +++ b/lib/activitycontext.php @@ -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); } /** @@ -130,4 +134,77 @@ 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; + + 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 => $attnType) { + $to = array( + 'objectType' => $attnType, // can be empty + 'id' => $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; + } + } +