X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FProtocol%2FActivityPub%2FReceiver.php;h=4a138729830d6c01fbad755482a8d89614ef95b1;hb=aacaa3c2cf7ac4189ae6b41701d66ee3cd7f8535;hp=6cd0111ec0f59e2d3df5a1d1f6064c9db86cf33e;hpb=eaa81632011542ce64fd921e52a68b96edd97265;p=friendica.git diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 6cd0111ec0..4a13872983 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -553,12 +553,13 @@ class Receiver $object_data['from-relay'] = $activity['from-relay']; } + if (in_array('as:Question', [$object_data['object_type'] ?? '', $object_data['object_object_type'] ?? ''])) { + self::storeUnhandledActivity(false, $type, $object_data, $activity, $body, $uid, $trust_source, $push, $signer); + } + switch ($type) { case 'as:Create': if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { - if ($object_data['object_type'] == 'as:Question') { - self::storeUnhandledActivity(false, $type, $object_data, $activity, $body, $uid, $trust_source, $push, $signer); - } $item = ActivityPub\Processor::createItem($object_data); ActivityPub\Processor::postItem($object_data, $item); } elseif (in_array($object_data['object_type'], ['pt:CacheFile'])) { @@ -937,7 +938,7 @@ class Receiver // Fetch the receivers for the public and the followers collection if ((($receiver == $followers) || (($receiver == self::PUBLIC_COLLECTION) && !$is_forum)) && !empty($actor)) { - $receivers = self::getReceiverForActor($actor, $tags, $receivers, $follower_target); + $receivers = self::getReceiverForActor($actor, $tags, $receivers, $follower_target, $profile); continue; } @@ -999,33 +1000,46 @@ class Receiver * @param array $tags * @param array $receivers * @param integer $target_type + * @param array $profile * * @return array with receivers (user id) * @throws \Exception */ - private static function getReceiverForActor($actor, $tags, $receivers, $target_type) + private static function getReceiverForActor($actor, $tags, $receivers, $target_type, $profile) { $basecondition = ['rel' => [Contact::SHARING, Contact::FRIEND, Contact::FOLLOWER], 'network' => Protocol::FEDERATED, 'archive' => false, 'pending' => false]; - $condition = DBA::mergeConditions($basecondition, ["`nurl` = ? AND `uid` != ?", Strings::normaliseLink($actor), 0]); - $contacts = DBA::select('contact', ['uid', 'rel'], $condition); - while ($contact = DBA::fetch($contacts)) { - if (empty($receivers[$contact['uid']]) && self::isValidReceiverForActor($contact, $tags)) { - $receivers[$contact['uid']] = ['uid' => $contact['uid'], 'type' => $target_type]; + if (!empty($profile['uri-id'])) { + $condition = DBA::mergeConditions($basecondition, ["`uri-id` = ? AND `uid` != ?", $profile['uri-id'], 0]); + $contacts = DBA::select('contact', ['uid', 'rel'], $condition); + while ($contact = DBA::fetch($contacts)) { + if (empty($receivers[$contact['uid']]) && self::isValidReceiverForActor($contact, $tags)) { + $receivers[$contact['uid']] = ['uid' => $contact['uid'], 'type' => $target_type]; + } } - } - DBA::close($contacts); - - // The queries are split because of performance issues - $condition = DBA::mergeConditions($basecondition, ["`alias` IN (?, ?) AND `uid` != ?", Strings::normaliseLink($actor), $actor, 0]); - $contacts = DBA::select('contact', ['uid', 'rel'], $condition); - while ($contact = DBA::fetch($contacts)) { - if (empty($receivers[$contact['uid']]) && self::isValidReceiverForActor($contact, $tags)) { - $receivers[$contact['uid']] = ['uid' => $contact['uid'], 'type' => $target_type]; + DBA::close($contacts); + } else { + // This part will only be called while post update 1426 wasn't finished + $condition = DBA::mergeConditions($basecondition, ["`nurl` = ? AND `uid` != ?", Strings::normaliseLink($actor), 0]); + $contacts = DBA::select('contact', ['uid', 'rel'], $condition); + while ($contact = DBA::fetch($contacts)) { + if (empty($receivers[$contact['uid']]) && self::isValidReceiverForActor($contact, $tags)) { + $receivers[$contact['uid']] = ['uid' => $contact['uid'], 'type' => $target_type]; + } + } + DBA::close($contacts); + + // The queries are split because of performance issues + $condition = DBA::mergeConditions($basecondition, ["`alias` IN (?, ?) AND `uid` != ?", Strings::normaliseLink($actor), $actor, 0]); + $contacts = DBA::select('contact', ['uid', 'rel'], $condition); + while ($contact = DBA::fetch($contacts)) { + if (empty($receivers[$contact['uid']]) && self::isValidReceiverForActor($contact, $tags)) { + $receivers[$contact['uid']] = ['uid' => $contact['uid'], 'type' => $target_type]; + } } + DBA::close($contacts); } - DBA::close($contacts); return $receivers; } @@ -1460,7 +1474,13 @@ class Receiver return []; } - // @todo Check if "closed" is a thing, see here: https://www.w3.org/TR/activitystreams-vocabulary/#dfn-closed + $closed = JsonLD::fetchElement($object, 'as:closed', '@value'); + if (!empty($closed)) { + $question['end-time'] = $closed; + } else { + $question['end-time'] = JsonLD::fetchElement($object, 'as:endTime', '@value'); + } + $question['voters'] = (int)JsonLD::fetchElement($object, 'toot:votersCount', '@value'); $question['options'] = [];