use Friendica\Model\Conversation;
use Friendica\Model\Item;
use Friendica\Model\User;
+use Friendica\Protocol\Activity;
use Friendica\Protocol\ActivityPub;
use Friendica\Util\DateTimeFormat;
use Friendica\Util\HTTPSignature;
*/
public static function isRequest()
{
- return stristr(defaults($_SERVER, 'HTTP_ACCEPT', ''), 'application/activity+json') ||
- stristr(defaults($_SERVER, 'HTTP_ACCEPT', ''), 'application/ld+json');
+ return stristr($_SERVER['HTTP_ACCEPT'] ?? '', 'application/activity+json') ||
+ stristr($_SERVER['HTTP_ACCEPT'] ?? '', 'application/ld+json');
}
/**
$object_data['type'] = $type;
$object_data['actor'] = $actor;
$object_data['item_receiver'] = $receivers;
- $object_data['receiver'] = array_merge(defaults($object_data, 'receiver', []), $receivers);
+ $object_data['receiver'] = array_merge($object_data['receiver'] ?? [], $receivers);
Logger::log('Processing ' . $object_data['type'] . ' ' . $object_data['object_type'] . ' ' . $object_data['id'], Logger::DEBUG);
$conversation = [
'protocol' => Conversation::PARCEL_ACTIVITYPUB,
'item-uri' => $activity['id'],
- 'reply-to-uri' => defaults($activity, 'reply-to-id', ''),
- 'conversation-href' => defaults($activity, 'context', ''),
- 'conversation-uri' => defaults($activity, 'conversation', ''),
+ 'reply-to-uri' => $activity['reply-to-id'] ?? '',
+ 'conversation-href' => $activity['context'] ?? '',
+ 'conversation-uri' => $activity['conversation'] ?? '',
'source' => $body,
'received' => DateTimeFormat::utcNow()];
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
- if ($profile['type'] == 'Person') {
+ if ($profile['type'] != 'Group') {
$announce_object_data = self::processObject($activity);
$announce_object_data['name'] = $type;
$announce_object_data['author'] = JsonLD::fetchElement($activity, 'as:actor', '@id');
$announce_object_data['object_id'] = $object_data['object_id'];
$announce_object_data['object_type'] = $object_data['object_type'];
- ActivityPub\Processor::createActivity($announce_object_data, ACTIVITY2_ANNOUNCE);
+ ActivityPub\Processor::createActivity($announce_object_data, Activity::ANNOUNCE);
}
}
break;
case 'as:Like':
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
- ActivityPub\Processor::createActivity($object_data, ACTIVITY_LIKE);
+ ActivityPub\Processor::createActivity($object_data, Activity::LIKE);
}
break;
case 'as:Dislike':
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
- ActivityPub\Processor::createActivity($object_data, ACTIVITY_DISLIKE);
+ ActivityPub\Processor::createActivity($object_data, Activity::DISLIKE);
}
break;
case 'as:TentativeAccept':
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
- ActivityPub\Processor::createActivity($object_data, ACTIVITY_ATTENDMAYBE);
+ ActivityPub\Processor::createActivity($object_data, Activity::ATTENDMAYBE);
}
break;
ActivityPub\Processor::followUser($object_data);
} elseif (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
$object_data['reply-to-id'] = $object_data['object_id'];
- ActivityPub\Processor::createActivity($object_data, ACTIVITY_FOLLOW);
+ ActivityPub\Processor::createActivity($object_data, Activity::FOLLOW);
}
break;
if ($object_data['object_type'] == 'as:Follow') {
ActivityPub\Processor::acceptFollowUser($object_data);
} elseif (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
- ActivityPub\Processor::createActivity($object_data, ACTIVITY_ATTEND);
+ ActivityPub\Processor::createActivity($object_data, Activity::ATTEND);
}
break;
if ($object_data['object_type'] == 'as:Follow') {
ActivityPub\Processor::rejectFollowUser($object_data);
} elseif (in_array($object_data['object_type'], self::CONTENT_TYPES)) {
- ActivityPub\Processor::createActivity($object_data, ACTIVITY_ATTENDNO);
+ ActivityPub\Processor::createActivity($object_data, Activity::ATTENDNO);
}
break;
if (!empty($actor)) {
$profile = APContact::getByURL($actor);
- $followers = defaults($profile, 'followers', '');
+ $followers = $profile['followers'] ?? '';
Logger::log('Actor: ' . $actor . ' - Followers: ' . $followers, Logger::DEBUG);
} else {
*/
public static function switchContact($cid, $uid, $url)
{
- $profile = ActivityPub::probeProfile($url);
- if (empty($profile)) {
+ if (DBA::exists('contact', ['id' => $cid, 'network' => Protocol::ACTIVITYPUB])) {
+ Logger::info('Contact is already ActivityPub', ['id' => $cid, 'uid' => $uid, 'url' => $url]);
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']);
-
- $profile['nurl'] = Strings::normaliseLink($profile['url']);
- DBA::update('contact', $profile, ['id' => $cid]);
-
- Contact::updateAvatar($photo, $uid, $cid);
+ if (Contact::updateFromProbe($cid, '', true)) {
+ Logger::info('Update was successful', ['id' => $cid, 'uid' => $uid, 'url' => $url]);
+ }
// 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);
+ if (($uid != 0) && DBA::exists('contact', ['id' => $cid, 'rel' => [Contact::SHARING, Contact::FRIEND], 'network' => Protocol::ACTIVITYPUB])) {
+ Logger::info('Contact had been switched to ActivityPub. Sending a new follow request.', ['uid' => $uid, 'url' => $url]);
+ ActivityPub\Transmitter::sendActivity('Follow', $url, $uid);
}
}