const AUDIENCE = 14;
const ATTRIBUTED = 15;
+ const CAN_ANNOUNCE = 20;
+ const CAN_LIKE = 21;
+ const CAN_REPLY = 22;
+
const ACCOUNT = 1;
const GENERAL_COLLECTION = 2;
const FOLLOWER_COLLECTION = 3;
self::storeReceivers($item['uri-id'], $activity['receiver_urls'] ?? []);
+ self::storeCapabilities($item['uri-id'], $activity['capabilities'] ?? []);
+
$item['location'] = $activity['location'];
if (!empty($activity['latitude']) && !empty($activity['longitude'])) {
}
}
+ private static function storeCapabilities(int $uriid, array $capabilities)
+ {
+ foreach (['pixelfed:canAnnounce' => Tag::CAN_ANNOUNCE, 'pixelfed:canLike' => Tag::CAN_LIKE, 'pixelfed:canReply' => Tag::CAN_REPLY] as $element => $type) {
+ if (!empty($capabilities[$element])) {
+ foreach ($capabilities[$element] as $capability) {
+ if ($capability == ActivityPub::PUBLIC_COLLECTION) {
+ $name = Receiver::PUBLIC_COLLECTION;
+ } elseif (empty($capability) || ($capability == '[]')) {
+ continue;
+ } elseif ($path = parse_url($capability, PHP_URL_PATH)) {
+ $name = trim($path, '/');
+ } elseif ($host = parse_url($capability, PHP_URL_HOST)) {
+ $name = $host;
+ } else {
+ Logger::warning('Unable to coerce name from capability', ['element' => $element, 'type' => $type, 'capability' => $capability]);
+ $name = '';
+ }
+ Tag::store($uriid, $type, $name, $capability);
+ }
+ }
+ }
+ }
+
/**
* Creates an mail post
*
$object_data['receiver'] = $receivers;
$object_data['reception_type'] = $reception_types;
+ if (!empty($object['pixelfed:capabilities'])) {
+ $object_data['capabilities'] = self::getCapabilities($object);
+ }
+
$object_data['unlisted'] = in_array(-1, $object_data['receiver']);
unset($object_data['receiver'][-1]);
unset($object_data['reception_type'][-1]);
return $object_data;
}
+ private static function getCapabilities($object) {
+ $capabilities = [];
+ foreach (['pixelfed:canAnnounce', 'pixelfed:canLike', 'pixelfed:canReply'] as $element) {
+ $capabilities_list = JsonLD::fetchElementArray($object['pixelfed:capabilities'], $element, '@id');
+ if (empty($capabilities_list)) {
+ continue;
+ }
+ $capabilities[$element] = $capabilities_list;
+ }
+ return $capabilities;
+ }
+
/**
* Create an object data array from a given activity
*
'mobilizon' => (object)['@id' => 'https://joinmobilizon.org/ns#', '@type' => '@id'],
'fedibird' => (object)['@id' => 'http://fedibird.com/ns#', '@type' => '@id'],
'misskey' => (object)['@id' => 'https://misskey-hub.net/ns#', '@type' => '@id'],
+ 'pixelfed' => (object)['@id' => 'http://pixelfed.org/ns#', '@type' => '@id'],
];
$orig_json = $json;