From 383f14c781dfe2e23472544c2f72228070008cd9 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Tue, 19 Jul 2011 16:38:58 -0400 Subject: [PATCH] Try to get only immediate children (again) --- lib/activity.php | 13 +++++-------- lib/activityutils.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/lib/activity.php b/lib/activity.php index 12ea53a9fe..1582a2019e 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -171,15 +171,12 @@ class Activity // XXX: do other implied stuff here } - $objectEls = $entry->getElementsByTagNameNS(self::SPEC, self::OBJECT); + // get immediate object children - if ($objectEls->length > 0) { - for ($i = 0; $i < $objectEls->length; $i++) { - $objectEl = $objectEls->item($i); - // Only immediate children (don't slurp embedded activities' objects!) - if ($objectEl->parentNode != $entry) { - continue; - } + $objectEls = ActivityUtils::children($entry, self::OBJECT, self::SPEC); + + if (count($objectEls) > 0) { + foreach ($objectEls as $objectEl) { // Special case for embedded activities $objectType = ActivityUtils::childContent($objectEl, self::OBJECTTYPE, self::SPEC); if (!empty($objectType) && $objectType == ActivityObject::ACTIVITY) { diff --git a/lib/activityutils.php b/lib/activityutils.php index 59f7cdcf3a..c2c239f1d3 100644 --- a/lib/activityutils.php +++ b/lib/activityutils.php @@ -145,6 +145,34 @@ class ActivityUtils } } + /** + * Gets all immediate child elements 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 array found element or null + */ + + static function children(DOMNode $element, $tag, $namespace=self::ATOM) + { + $results = array(); + + $els = $element->childNodes; + + if (!empty($els) && $els->length > 0) { + for ($i = 0; $i < $els->length; $i++) { + $el = $els->item($i); + if ($el->localName == $tag && $el->namespaceURI == $namespace) { + $results[] = $el; + } + } + } + + return $results; + } + /** * Grab the text content of a DOM element child of the current element *