diff options
-rw-r--r-- | plugins/OStatus/lib/activity.php | 121 |
1 files changed, 82 insertions, 39 deletions
diff --git a/plugins/OStatus/lib/activity.php b/plugins/OStatus/lib/activity.php index 048efda2c..3d02e3584 100644 --- a/plugins/OStatus/lib/activity.php +++ b/plugins/OStatus/lib/activity.php @@ -63,22 +63,78 @@ class ActivityUtils * @return string related link, if any */ - static function getLink($element) + static function getPermalink($element) + { + return self::getLink($element, 'alternate', 'text/html'); + } + + /** + * Get the permalink for an Activity object + * + * @param DOMElement $element A DOM element + * + * @return string related link, if any + */ + + static function getLink($element, $rel, $type=null) { $links = $element->getElementsByTagnameNS(self::ATOM, self::LINK); foreach ($links as $link) { - $rel = $link->getAttribute(self::REL); - $type = $link->getAttribute(self::TYPE); + $linkRel = $link->getAttribute(self::REL); + $linkType = $link->getAttribute(self::TYPE); - if ($rel == 'alternate' && $type == 'text/html') { + if ($linkRel == $rel && + (is_null($type) || $linkType == $type)) { return $link->getAttribute(self::HREF); } } return null; } + + /** + * Gets the first child element with the given tag + * + * @param DOMElement $element element to pick at + * @param string $tag tag to look for + * @param string $namespace Namespace to look under + * + * @return DOMElement found element or null + */ + + static function child($element, $tag, $namespace=self::ATOM) + { + $els = $element->getElementsByTagnameNS($namespace, $tag); + + if (empty($els) || $els->length == 0) { + return null; + } else { + return $els->item(0); + } + } + + /** + * Grab the text content of a DOM element child of the current element + * + * @param DOMElement $element Element whose children we examine + * @param string $tag Tag to look up + * @param string $namespace Namespace to use, defaults to Atom + * + * @return string content of the child + */ + + static function childContent($element, $tag, $namespace=self::ATOM) + { + $el = self::child($element, $tag, $namespace); + + if (empty($el)) { + return null; + } else { + return $el->textContent; + } + } } /** @@ -130,6 +186,7 @@ class ActivityObject const URI = 'uri'; const EMAIL = 'email'; + public $element; public $type; public $id; public $title; @@ -150,7 +207,7 @@ class ActivityObject function __construct($element) { - $this->source = $element; + $this->element = $element; if ($element->tagName == 'author') { @@ -179,33 +236,35 @@ class ActivityObject $this->title = $this->_childContent($element, self::TITLE); $this->summary = $this->_childContent($element, self::SUMMARY); $this->content = $this->_childContent($element, self::CONTENT); - $this->source = $this->_childContent($element, self::SOURCE); - $this->link = ActivityUtils::getLink($element); + $this->source = $this->_getSource($element); + + $this->link = ActivityUtils::getPermalink($element); // XXX: grab PoCo stuff } } - /** - * Grab the text content of a DOM element child of the current element - * - * @param DOMElement $element Element whose children we examine - * @param string $tag Tag to look up - * @param string $namespace Namespace to use, defaults to Atom - * - * @return string content of the child - */ + private function _childContent($element, $tag, $namespace=ActivityUtils::ATOM) + { + return ActivityUtils::childContent($element, $tag, $namespace); + } - private function _childContent($element, $tag, $namespace=Activity::ATOM) + // Try to get a unique id for the source feed + + private function _getSource($element) { - $els = $element->getElementsByTagnameNS($namespace, $tag); + $sourceEl = ActivityUtils::child($element, 'source'); - if (empty($els) || $els->length == 0) { + if (empty($sourceEl)) { return null; } else { - $el = $els->item(0); - return $el->textContent; + $href = ActivityUtils::getLink($sourceEl, 'self'); + if (!empty($href)) { + return $href; + } else { + return ActivityUtils::childContent($sourceEl, 'id'); + } } } } @@ -306,7 +365,7 @@ class Activity } } - $this->link = ActivityUtils::getLink($entry); + $this->link = ActivityUtils::getPermalink($entry); $verbEl = $this->_child($entry, self::VERB); @@ -370,24 +429,8 @@ class Activity return null; } - /** - * Gets the first child element with the given tag - * - * @param DOMElement $element element to pick at - * @param string $tag tag to look for - * @param string $namespace Namespace to look under - * - * @return DOMElement found element or null - */ - private function _child($element, $tag, $namespace=self::SPEC) { - $els = $element->getElementsByTagnameNS($namespace, $tag); - - if (empty($els) || $els->length == 0) { - return null; - } else { - return $els->item(0); - } + return ActivityUtils::child($element, $tag, $namespace); } }
\ No newline at end of file |