]> git.mxchange.org Git - friendica.git/commitdiff
Handle "commentsEnabled"
authorMichael <heluecht@pirati.ca>
Thu, 21 Dec 2023 10:26:34 +0000 (10:26 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 21 Dec 2023 10:26:34 +0000 (10:26 +0000)
src/Protocol/ActivityPub/Processor.php
src/Protocol/ActivityPub/Receiver.php

index efd1e00cedf8eb36d9482d36a430f9edec54f776..3c0d57caa567b30e0dd6c64b880ae853300f1724 100644 (file)
@@ -918,7 +918,15 @@ class Processor
 
                self::storeReceivers($item['uri-id'], $activity['receiver_urls'] ?? []);
 
-               self::storeCapabilities($item['uri-id'], $activity['capabilities'] ?? []);
+               if (!empty($activity['capabilities'])) {
+                       $restrictions = self::storeCapabilities($item['uri-id'], $activity['capabilities']);
+               } elseif (!is_null($activity['can-comment']) && !$activity['can-comment']) {
+                       $restrictions = [Tag::CAN_REPLY];
+               } else {
+                       $restrictions = [];
+               }
+
+               // @todo Store restrictions
 
                $item['location'] = $activity['location'];
 
@@ -1343,9 +1351,11 @@ class Processor
                }
        }
 
-       private static function storeCapabilities(int $uriid, array $capabilities)
+       private static function storeCapabilities(int $uriid, array $capabilities): array
        {
+               $restrictions = [];
                foreach (['pixelfed:canAnnounce' => Tag::CAN_ANNOUNCE, 'pixelfed:canLike' => Tag::CAN_LIKE, 'pixelfed:canReply' => Tag::CAN_REPLY] as $element => $type) {
+                       $restricted = true;
                        foreach ($capabilities[$element] ?? [] as $capability) {
                                if ($capability == ActivityPub::PUBLIC_COLLECTION) {
                                        $name = Receiver::PUBLIC_COLLECTION;
@@ -1359,9 +1369,14 @@ class Processor
                                        Logger::warning('Unable to coerce name from capability', ['element' => $element, 'type' => $type, 'capability' => $capability]);
                                        $name = '';
                                }
+                               $restricted = false;
                                Tag::store($uriid, $type, $name, $capability);
                        }
+                       if ($restricted) {
+                               $restrictions[] = $type;
+                       }
                }
+               return $restrictions;
        }
 
        /**
index 7e8ba6fe014ba240d015811a732e0acbfc286f86..94233c8a89bbd48b20d63203e983f0c3cefbd8bb 100644 (file)
@@ -2074,6 +2074,11 @@ class Receiver
                        $object_data['attachments'] = array_merge($object_data['attachments'], self::processAttachmentUrls($object['as:url'] ?? []));
                }
 
+               $object_data['can-comment'] = JsonLD::fetchElement($object, 'pt:commentsEnabled', '@value');
+               if (is_null($object_data['can-comment'])) {
+                       $object_data['can-comment'] = JsonLD::fetchElement($object, 'pixelfed:commentsEnabled', '@value');
+               }
+
                // Support for quoted posts (Pleroma, Fedibird and Misskey)
                $object_data['quote-url'] = JsonLD::fetchElement($object, 'as:quoteUrl', '@value');
                if (empty($object_data['quote-url'])) {