From e66e2adf5f7dfa0303de8b72a6d7187dfa23574d Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 2 Apr 2019 21:10:49 +0000 Subject: [PATCH] AP: Incoming announces are now stored as activities --- src/Protocol/ActivityPub/Receiver.php | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 5ee81302f2..5db12a1073 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -206,6 +206,8 @@ class Receiver Logger::log("Object data couldn't be processed", Logger::DEBUG); return []; } + $object_data['object_id'] = $object_id; + // We had been able to retrieve the object data - so we can trust the source $trust_source = true; } elseif (in_array($type, ['as:Like', 'as:Dislike']) || @@ -352,12 +354,34 @@ class Receiver switch ($type) { case 'as:Create': - case 'as:Announce': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { ActivityPub\Processor::createItem($object_data); } break; + case 'as:Announce': + if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { + $profile = APContact::getByURL($object_data['actor']); + if ($profile['type'] == 'Person') { + // Reshared posts from persons appear as summary at the bottom + // If this isn't set, then a single reshare appears on top. This is used for groups. + $object_data['thread-completion'] = true; + } + ActivityPub\Processor::createItem($object_data); + + // Add the bottom reshare information only for persons + if ($profile['type'] == 'Person') { + $announce_object_data = self::processObject($activity); + $announce_object_data['name'] = $type; + $announce_object_data['author'] = JsonLD::fetchElement($activity, 'as:actor'); + $announce_object_data['object_id'] = $object_data['object_id']; + $announce_object_data['object_type'] = $object_data['object_type']; + + ActivityPub\Processor::createActivity($announce_object_data, ACTIVITY2_ANNOUNCE); + } + } + break; + case 'as:Like': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { ActivityPub\Processor::createActivity($object_data, ACTIVITY_LIKE);