]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Ticket #2242: fix reading of inline XHTML content in Atom feeds for OStatus input.
authorBrion Vibber <brion@pobox.com>
Mon, 15 Mar 2010 20:21:55 +0000 (20:21 +0000)
committerBrion Vibber <brion@pobox.com>
Mon, 15 Mar 2010 20:21:55 +0000 (20:21 +0000)
Lookup of the <div> needed to check for the XHTML namespace.

lib/activity.php
plugins/OStatus/scripts/testfeed.php [new file with mode: 0644]

index 6acf37a8a20e4986362cf1871e35489fa23f7a16..ae65fe36ff9135a5bed7b95529d83009f8872bec 100644 (file)
@@ -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 (file)
index 0000000..5e3ccd4
--- /dev/null
@@ -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));
+