diff --git a/Code/Lib/Activity.php b/Code/Lib/Activity.php index f96f5b091..7d018e34d 100644 --- a/Code/Lib/Activity.php +++ b/Code/Lib/Activity.php @@ -302,7 +302,7 @@ class Activity } - public static function encode_item_collection($items, $id, $type, $activitypub = false, $total = 0): array + public static function encode_item_collection($items, $id, $type, $activitypub = false, $attributedTo = '', $total = 0): array { if ($total > App::$pager['itemspage']) { $ret = [ @@ -310,6 +310,10 @@ class Activity 'type' => $type . 'Page', ]; + if ($attributedTo) { + $ret['attributedTo'] = $attributedTo; + } + $numpages = $total / App::$pager['itemspage']; $lastpage = (($numpages > intval($numpages)) ? intval($numpages) + 1 : $numpages); @@ -342,6 +346,9 @@ class Activity 'type' => $type, 'totalItems' => $total, ]; + if ($attributedTo) { + $ret['attributedTo'] = $attributedTo; + } } @@ -752,7 +759,7 @@ class Activity public static function encode_activity($item, $activitypub = false, $isContainer = false, $recurse = false) { - + $new = Config::Get('system', '2024'); $activity = []; if (intval($item['item_deleted']) && (!$recurse)) { @@ -837,10 +844,12 @@ class Activity $place->setLatitude(isset($item['lat']) ? $item['lat'] : 0) ->setLongitude(isset($item['lon']) ? $item['lon'] : 0); } - $activity['location'] = $place->toArray(); + if (!$new) { + $activity['location'] = $place->toArray(); + } } - if ($item['mid'] === $item['parent_mid']) { + if ($item['mid'] === $item['parent_mid'] && !$new) { $activity['isContainedConversation'] = true; } else { @@ -878,7 +887,9 @@ class Activity $cnv = str_replace(['/item/', '/activity/'], ['/conversation/', '/conversation/'], $cnv); } $activity['context'] = $cnv; - $activity['conversation'] = $cnv; + if (!$new) { + $activity['conversation'] = $cnv; + } } if (intval($item['item_private']) === 2) { @@ -893,7 +904,7 @@ class Activity } $replyTo = unserialise($item['replyto']); - if ($replyTo) { + if ($replyTo && !$new) { $activity['replyTo'] = $replyTo; $activity['audience'] = $replyTo; } @@ -1113,6 +1124,7 @@ class Activity public static function encode_item($item, $activitypub = false) { + $new = Config::Get('system', '2024'); $activity = []; $bbopts = (($activitypub) ? 'activitypub' : 'export'); @@ -1192,6 +1204,7 @@ class Activity $activity['commentPolicy'] = $item['comment_policy']; } + if (intval($item['item_private']) === 2) { $activity['directMessage'] = true; } @@ -1214,7 +1227,9 @@ class Activity $activity['attributedTo'] = self::encode_person($item['author'],false); if ($item['mid'] === $item['parent_mid']) { - $activity['isContainedConversation'] = true; + if (!$new) { + $activity['isContainedConversation'] = true; + } if (in_array($activity['commentPolicy'], ['public', 'authenticated'])) { $activity['canReply'] = ACTIVITY_PUBLIC_INBOX; } elseif (in_array($activity['commentPolicy'], ['contacts', 'specific'])) { @@ -1223,6 +1238,9 @@ class Activity $activity['canReply'] = []; } } + if ($new) { + unset($activity['commentPolicy']); + } if ($item['mid'] !== $item['parent_mid']) { if ($item['approved']) { @@ -1245,7 +1263,9 @@ class Activity $cnv = str_replace(['/item/', '/activity/'], ['/conversation/', '/conversation/'], $cnv); } $activity['context'] = $cnv; - $activity['conversation'] = $cnv; + if(!$new) { + $activity['conversation'] = $cnv; + } } // provide ocap access token for private media. @@ -1295,7 +1315,7 @@ class Activity } $replyTo = unserialise($item['replyto']); - if ($replyTo) { + if ($replyTo && !$new) { $activity['replyTo'] = $replyTo; $activity['audience'] = $replyTo; } @@ -4865,6 +4885,33 @@ class Activity // $contextType is reserved for future use so that the caller can specify // a limited subset of the entire schema definition for particular activities. + if (Config::Get('system','2024')) { + return [ + 'nomad' => z_root() . '/apschema#', + 'toot' => 'http://joinmastodon.org/ns#', + 'litepub' => 'http://litepub.social/ns#', + 'manuallyApprovesFollowers' => 'as:manuallyApprovesFollowers', + 'oauthRegistrationEndpoint' => 'litepub:oauthRegistrationEndpoint', + 'sensitive' => 'as:sensitive', + 'movedTo' => 'as:movedTo', + 'discoverable' => 'toot:discoverable', + 'indexable' => 'toot:indexable', + 'capabilities' => 'litepub:capabilities', + 'acceptsJoins' => 'litepub:acceptsJoins', + 'Hashtag' => 'as:Hashtag', + 'canReply' => 'toot:canReply', + 'canSearch' => 'nomad:canSearch', + 'approval' => 'toot:approval', + 'expires' => 'nomad:expires', + 'directMessage' => 'nomad:directMessage', + 'Category' => 'nomad:Category', + 'copiedTo' => 'nomad:copiedTo', + 'canSearch' => 'nomad:canSearch', + 'searchContent' => 'nomad:searchContent', + 'searchTags' => 'nomad:searchTags', + ]; + } + return [ 'nomad' => z_root() . '/apschema#', 'toot' => 'http://joinmastodon.org/ns#', @@ -4875,8 +4922,7 @@ class Activity 'oauthRegistrationEndpoint' => 'litepub:oauthRegistrationEndpoint', 'sensitive' => 'as:sensitive', 'movedTo' => 'as:movedTo', - // 'alsoKnownAs' => 'as:alsoKnownAs', - 'EmojiReact' => 'as:EmojiReact', + // 'EmojiReact' => 'as:EmojiReact', 'discoverable' => 'toot:discoverable', 'indexable' => 'toot:indexable', 'wall' => 'sm:wall', @@ -4885,8 +4931,9 @@ class Activity 'nomadicLocations' => 'nomad:nomadicLocations', 'Hashtag' => 'as:Hashtag', 'canReply' => 'toot:canReply', + 'canSearch' => 'nomad:canSearch', 'approval' => 'toot:approval', - // 'Identity' => 'fep:Identity', + 'Identity' => 'fep:Identity', 'isContainedConversation' => 'nomad:isContainedConversation', 'conversation' => 'nomad:conversation', 'commentPolicy' => 'nomad:commentPolicy', diff --git a/Code/Module/Activity.php b/Code/Module/Activity.php index adaff30c5..45319c2a4 100644 --- a/Code/Module/Activity.php +++ b/Code/Module/Activity.php @@ -281,7 +281,7 @@ class Activity extends Controller http_status_exit(403, 'Forbidden'); } - $i = ZlibActivity::encode_item_collection($nitems, 'conversation/' . $item_id, 'OrderedCollection', true, count($nitems)); + $i = ZlibActivity::encode_item_collection($nitems, 'conversation/' . $item_id, 'OrderedCollection', true, z_root() . '/channel/' . $chan['channel_address'], count($nitems)); if ($portable_id && (!intval($items[0]['item_private']))) { ThreadListener::store(z_root() . '/activity/' . $item_id, $portable_id); } diff --git a/Code/Module/Conversation.php b/Code/Module/Conversation.php index a558b94b9..2bf04fa4a 100644 --- a/Code/Module/Conversation.php +++ b/Code/Module/Conversation.php @@ -16,7 +16,6 @@ class Conversation extends Controller public function init() { - if (ActivityStreams::is_as_request() || Libzot::is_nomad_request()) { $item_id = argv(1); @@ -155,7 +154,7 @@ class Conversation extends Controller http_status_exit(403, 'Forbidden'); } - $i = ZlibActivity::encode_item_collection($nitems, 'conversation/' . $item_id, 'OrderedCollection', true, count($nitems)); + $i = ZlibActivity::encode_item_collection($nitems, 'conversation/' . $item_id, 'OrderedCollection', true, z_root() . '/channel/' . $chan['channel_address'], count($nitems)); if ($portable_id && (!intval($items[0]['item_private']))) { ThreadListener::store(z_root() . '/activity/' . $item_id, $portable_id); } diff --git a/Code/Module/Item.php b/Code/Module/Item.php index 1913fee96..392b726d7 100644 --- a/Code/Module/Item.php +++ b/Code/Module/Item.php @@ -298,7 +298,7 @@ class Item extends Controller http_status_exit(403, 'Forbidden'); } - $i = Activity::encode_item_collection($items, 'conversation/' . $item_uuid, 'OrderedCollection', true, count($items)); + $i = Activity::encode_item_collection($items, 'conversation/' . $item_uuid, 'OrderedCollection', true, z_root() . '/channel/' . $chan['channel_address'], count($items)); if ($portable_id && (!intval($items[0]['item_private']))) { ThreadListener::store(z_root() . '/item/' . $item_uuid, $portable_id); } diff --git a/Code/Module/Outbox.php b/Code/Module/Outbox.php index 1d0d5e0c3..5b4379b27 100644 --- a/Code/Module/Outbox.php +++ b/Code/Module/Outbox.php @@ -311,7 +311,7 @@ class Outbox extends Controller } } - $ret = Activity::encode_item_collection($items, App::$query_string, 'OrderedCollection', true, $total); + $ret = Activity::encode_item_collection($items, App::$query_string, 'OrderedCollection', true, z_root() . '/channel/' . $channel['channel_address'],$total); } as_return_and_die($ret, $channel); diff --git a/Code/Module/Search.php b/Code/Module/Search.php index cd4143b22..6320b0913 100644 --- a/Code/Module/Search.php +++ b/Code/Module/Search.php @@ -363,7 +363,7 @@ class Search extends Controller $chan = Channel::get_system(); - $i = Activity::encode_item_collection($items, 'search?' . $saved_id , 'OrderedCollection', true, count($items)); + $i = Activity::encode_item_collection($items, 'search?' . $saved_id , 'OrderedCollection', true, false, count($items)); $x = array_merge(Activity::ap_context(), $i);