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'];
}
}
- 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;
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;
}
/**
$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'])) {