diff options
author | Brion Vibber <brion@pobox.com> | 2010-03-15 20:21:55 +0000 |
---|---|---|
committer | Brion Vibber <brion@pobox.com> | 2010-03-15 20:21:55 +0000 |
commit | c9232d8f26f055a9a1124b4b3db510e80979bf18 (patch) | |
tree | 848b1f97d48d7488a17ba329d294b9ae85fa6b32 | |
parent | 7aa49b5e87efa2aa383b446b264f00608f1a5eac (diff) |
Ticket #2242: fix reading of inline XHTML content in Atom feeds for OStatus input.
Lookup of the <div> needed to check for the XHTML namespace.
-rw-r--r-- | lib/activity.php | 2 | ||||
-rw-r--r-- | plugins/OStatus/scripts/testfeed.php | 89 |
2 files changed, 90 insertions, 1 deletions
diff --git a/lib/activity.php b/lib/activity.php index 6acf37a8a..ae65fe36f 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -463,7 +463,7 @@ class ActivityUtils $text = $contentEl->textContent; return htmlspecialchars_decode($text, ENT_QUOTES); } else if ($type == 'xhtml') { - $divEl = ActivityUtils::child($contentEl, 'div'); + $divEl = ActivityUtils::child($contentEl, 'div', 'http://www.w3.org/1999/xhtml'); if (empty($divEl)) { return null; } diff --git a/plugins/OStatus/scripts/testfeed.php b/plugins/OStatus/scripts/testfeed.php new file mode 100644 index 000000000..5e3ccd433 --- /dev/null +++ b/plugins/OStatus/scripts/testfeed.php @@ -0,0 +1,89 @@ +#!/usr/bin/env php +<?php +/* + * StatusNet - a distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); + +$longoptions = array('skip=', 'count='); + +$helptext = <<<END_OF_HELP +testfeed.php [options] http://example.com/atom-feed-url +Pull an Atom feed and run items in it as though they were live PuSH updates. +Mainly intended for testing funky feed formats. + + --skip=N Ignore the first N items in the feed. + --count=N Only process up to N items from the feed, after skipping. + + +END_OF_HELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; + +if (empty($args[0]) || !Validate::uri($args[0])) { + print "$helptext"; + exit(1); +} + +$feedurl = $args[0]; +$skip = have_option('skip') ? intval(get_option_value('skip')) : 0; +$count = have_option('count') ? intval(get_option_value('count')) : 0; + + +$sub = FeedSub::staticGet('topic', $feedurl); +if (!$sub) { + print "Feed $feedurl is not subscribed.\n"; + exit(1); +} + +$xml = file_get_contents($feedurl); +if ($xml === false) { + print "Bad fetch.\n"; + exit(1); +} + +$feed = new DOMDocument(); +if (!$feed->loadXML($xml)) { + print "Bad XML.\n"; + exit(1); +} + +if ($skip || $count) { + $entries = $feed->getElementsByTagNameNS(ActivityUtils::ATOM, 'entry'); + $remove = array(); + for ($i = 0; $i < $skip && $i < $entries->length; $i++) { + $item = $entries->item($i); + if ($item) { + $remove[] = $item; + } + } + if ($count) { + for ($i = $skip + $count; $i < $entries->length; $i++) { + $item = $entries->item($i); + if ($item) { + $remove[] = $item; + } + } + } + foreach ($remove as $item) { + $item->parentNode->removeChild($item); + } +} + +Event::handle('StartFeedSubReceive', array($sub, $feed)); + |