$object_type = self::fetchObjectType($activity, $object_id, $uid);
// Fetch the content only on activities where this matters
$object_type = self::fetchObjectType($activity, $object_id, $uid);
// Fetch the content only on activities where this matters
- } elseif (in_array($type, ['as:Like', 'as:Dislike']) ||
- (($type == 'as:Follow') && in_array($object_type, self::CONTENT_TYPES))) {
+ } elseif (in_array($type, array_merge(self::ACTIVITY_TYPES, ['as:Follow'])) && in_array($object_type, self::CONTENT_TYPES)) {
// Create a mostly empty array out of the activity data (instead of the object).
// This way we later don't have to check for the existence of ech individual array element.
$object_data = self::processObject($activity);
// Create a mostly empty array out of the activity data (instead of the object).
// This way we later don't have to check for the existence of ech individual array element.
$object_data = self::processObject($activity);
case 'as:Announce':
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
$profile = APContact::getByURL($object_data['actor']);
case 'as:Announce':
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
$profile = APContact::getByURL($object_data['actor']);
- if ($profile['type'] == 'Person') {
- // Reshared posts from persons appear as summary at the bottom
- // If this isn't set, then a single reshare appears on top. This is used for groups.
- $object_data['thread-completion'] = true;
- }
+ // Reshared posts from persons appear as summary at the bottom
+ // If this isn't set, then a single reshare appears on top. This is used for groups.
+ $object_data['thread-completion'] = ($profile['type'] != 'Group');
+
ActivityPub\Processor::createItem($object_data);
// Add the bottom reshare information only for persons
ActivityPub\Processor::createItem($object_data);
// Add the bottom reshare information only for persons
$announce_object_data = self::processObject($activity);
$announce_object_data['name'] = $type;
$announce_object_data['author'] = JsonLD::fetchElement($activity, 'as:actor', '@id');
$announce_object_data = self::processObject($activity);
$announce_object_data['name'] = $type;
$announce_object_data['author'] = JsonLD::fetchElement($activity, 'as:actor', '@id');
// Check if the potential receiver is following the actor
// Exception: The receiver is targetted via "to" or this is a comment
if ((($element != 'as:to') && empty($replyto)) || ($contact['contact-type'] == Contact::TYPE_COMMUNITY)) {
// Check if the potential receiver is following the actor
// Exception: The receiver is targetted via "to" or this is a comment
if ((($element != 'as:to') && empty($replyto)) || ($contact['contact-type'] == Contact::TYPE_COMMUNITY)) {
$condition = ['nurl' => Strings::normaliseLink($actor), 'rel' => [Contact::SHARING, Contact::FRIEND],
'network' => $networks, 'archive' => false, 'pending' => false, 'uid' => $contact['uid']];
$condition = ['nurl' => Strings::normaliseLink($actor), 'rel' => [Contact::SHARING, Contact::FRIEND],
'network' => $networks, 'archive' => false, 'pending' => false, 'uid' => $contact['uid']];
$condition = ['nurl' => Strings::normaliseLink($actor), 'rel' => [Contact::SHARING, Contact::FRIEND, Contact::FOLLOWER],
'network' => $networks, 'archive' => false, 'pending' => false];
$contacts = DBA::select('contact', ['uid', 'rel'], $condition);
$condition = ['nurl' => Strings::normaliseLink($actor), 'rel' => [Contact::SHARING, Contact::FRIEND, Contact::FOLLOWER],
'network' => $networks, 'archive' => false, 'pending' => false];
$contacts = DBA::select('contact', ['uid', 'rel'], $condition);
- $profile = ActivityPub::probeProfile($url);
- if (empty($profile)) {
- return;
- }
-
- Logger::log('Switch contact ' . $cid . ' (' . $profile['url'] . ') for user ' . $uid . ' to ActivityPub');
-
- $photo = defaults($profile, 'photo', null);
- unset($profile['photo']);
- unset($profile['baseurl']);
- unset($profile['guid']);
+ Contact::updateFromProbe($cid, '', true);
- $profile['nurl'] = Strings::normaliseLink($profile['url']);
- DBA::update('contact', $profile, ['id' => $cid]);
-
- Contact::updateAvatar($photo, $uid, $cid);
+ Logger::log('Switch contact ' . $cid . ' (' . $url . ') for user ' . $uid . ' to ActivityPub');
// Send a new follow request to be sure that the connection still exists
if (($uid != 0) && DBA::exists('contact', ['id' => $cid, 'rel' => [Contact::SHARING, Contact::FRIEND]])) {
// Send a new follow request to be sure that the connection still exists
if (($uid != 0) && DBA::exists('contact', ['id' => $cid, 'rel' => [Contact::SHARING, Contact::FRIEND]])) {
- ActivityPub\Transmitter::sendActivity('Follow', $profile['url'], $uid);
- Logger::log('Send a new follow request to ' . $profile['url'] . ' for user ' . $uid, Logger::DEBUG);
+ ActivityPub\Transmitter::sendActivity('Follow', $url, $uid);
+ Logger::log('Send a new follow request to ' . $url . ' for user ' . $uid, Logger::DEBUG);
* @param boolean $trust_source Do we trust the provided object?
* @param integer $uid User ID for the signature that we use to fetch data
*
* @param boolean $trust_source Do we trust the provided object?
* @param integer $uid User ID for the signature that we use to fetch data
*
- private static function fetchObject($object_id, $object = [], $trust_source = false, $uid = 0)
+ private static function fetchObject(string $object_id, array $object = [], bool $trust_source = false, int $uid = 0)
{
// By fetching the type we check if the object is complete.
$type = JsonLD::fetchElement($object, '@type');
{
// By fetching the type we check if the object is complete.
$type = JsonLD::fetchElement($object, '@type');
if ($type == 'as:Announce') {
$object_id = JsonLD::fetchElement($object, 'object', '@id');
if ($type == 'as:Announce') {
$object_id = JsonLD::fetchElement($object, 'object', '@id');
return false;
}
return self::fetchObject($object_id, [], false, $uid);
}
Logger::log('Unhandled object type: ' . $type, Logger::DEBUG);
return false;
}
return self::fetchObject($object_id, [], false, $uid);
}
Logger::log('Unhandled object type: ' . $type, Logger::DEBUG);