From f2a43769e7a77a626df6111c2059870e548bc47a Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Thu, 6 Jan 2011 15:05:29 -0800 Subject: [PATCH] Fix for atom/activity streams parsing: feed's was being taken at a higher priority than entry's , which broke OStatus group posting since we retired . Added test case to ActivityParseTests. --- lib/activity.php | 18 ++++-- tests/ActivityParseTests.php | 113 +++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+), 5 deletions(-) diff --git a/lib/activity.php b/lib/activity.php index 8d7ae1540b..7a33c23b14 100644 --- a/lib/activity.php +++ b/lib/activity.php @@ -182,6 +182,9 @@ class Activity $actorEl = $this->_child($entry, self::ACTOR); if (!empty($actorEl)) { + // Standalone elements are a holdover from older + // versions of ActivityStreams. Newer feeds should have this data + // integrated straight into . $this->actor = new ActivityObject($actorEl); @@ -196,19 +199,24 @@ class Activity $this->actor->id = $authorObj->id; } } - } else if (!empty($feed) && - $subjectEl = $this->_child($feed, self::SUBJECT)) { - - $this->actor = new ActivityObject($subjectEl); - } else if ($authorEl = $this->_child($entry, self::AUTHOR, self::ATOM)) { + // An in the entry overrides any author info on + // the surrounding feed. $this->actor = new ActivityObject($authorEl); } else if (!empty($feed) && $authorEl = $this->_child($feed, self::AUTHOR, self::ATOM)) { + // If there's no on the entry, it's safe to assume + // the containing feed's authorship info applies. $this->actor = new ActivityObject($authorEl); + } else if (!empty($feed) && + $subjectEl = $this->_child($feed, self::SUBJECT)) { + + // Feed subject is used for things like groups. + // Should actually possibly not be interpreted as an actor...? + $this->actor = new ActivityObject($subjectEl); } $contextEl = $this->_child($entry, self::CONTEXT); diff --git a/tests/ActivityParseTests.php b/tests/ActivityParseTests.php index 378478d741..c2817a4602 100644 --- a/tests/ActivityParseTests.php +++ b/tests/ActivityParseTests.php @@ -382,6 +382,29 @@ class ActivityParseTests extends PHPUnit_Framework_TestCase } } + public function testExample10() + { + global $_example10; + $dom = new DOMDocument(); + $dom->loadXML($_example10); + + // example 10 is a PuSH item of a post on a group feed, as generated + // by 0.9.7 code after migration away from to + $feed = $dom->documentElement; + $entry = $dom->getElementsByTagName('entry')->item(0); + $expected = 'http://lazarus.local/mublog/user/557'; + + // Reading just the entry alone should pick up its own + // as the actor. + $act = new Activity($entry); + $this->assertEquals($act->actor->id, $expected); + + // Reading the entry in feed context used to be buggy, picking up + // the feed's which referred to the group. + // It should now be returning the expected author entry... + $act = new Activity($entry, $feed); + $this->assertEquals($act->actor->id, $expected); + } } $_example1 = << EXAMPLE9; + +// Sample PuSH entry from a group feed in 0.9.7 +// Old has been removed from entries in this version. +// A bug in the order of input processing meant that we were incorrectly +// reading the feed's instead of the entry's , +// causing the entry to get rejected as malformed (groups can't post on +// their own; we want to see the actual author's info here). +$_example10 = << + + StatusNet + http://lazarus.local/mublog/api/statusnet/groups/timeline/22.atom + grouptest316173 timeline + Updates from grouptest316173 on Blaguette! + http://lazarus.local/mublog/theme/default/default-avatar-profile.png + 2011-01-06T22:44:18+00:00 + + http://activitystrea.ms/schema/1.0/group + http://lazarus.local/mublog/group/22/id + grouptest316173 + + + + + grouptest316173 + grouptest316173 + + + http://activitystrea.ms/schema/1.0/group + http://lazarus.local/mublog/group/22/id + grouptest316173 + + + + + grouptest316173 + grouptest316173 + + + + + + + + + + http://activitystrea.ms/schema/1.0/note + http://lazarus.local/mublog/notice/1243 + Group post from local to !grouptest316173, should go out over push. + Group post from local to !<span class="vcard"><a href="http://lazarus.local/mublog/group/22/id" class="url"><span class="fn nickname">grouptest316173</span></a></span>, should go out over push. + + http://activitystrea.ms/schema/1.0/post + 2011-01-06T22:44:18+00:00 + 2011-01-06T22:44:18+00:00 + + http://activitystrea.ms/schema/1.0/person + http://lazarus.local/mublog/user/557 + Pubtest316173 Smith + + + + + pubtest316173 + Pubtest316173 Smith + Stub account for OStatus tests. + + homepage + http://example.org/pubtest316173 + true + + + + + + + + http://lazarus.local/mublog/api/statuses/user_timeline/557.atom + Pubtest316173 Smith + + + + http://lazarus.local/mublog/theme/default/default-avatar-profile.png + 2011-01-06T22:44:18+00:00 + + + + + + +EXAMPLE10;