} else {
$item['gravity'] = GRAVITY_COMMENT;
$item['object-type'] = Activity\ObjectType::COMMENT;
-
- // Ensure that the comment reaches all receivers of the referring post
- $activity['receiver'] = self::addReceivers($activity);
}
if (empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Item::exists(['uri' => $activity['reply-to-id']])) {
$item['network'] = Protocol::ACTIVITYPUB;
$item['author-link'] = $activity['author'];
- $item['author-id'] = Contact::getIdForURL($activity['author'], 0, false);
+ $item['author-id'] = Contact::getIdForURL($activity['author']);
$item['owner-link'] = $activity['actor'];
- $item['owner-id'] = Contact::getIdForURL($activity['actor'], 0, false);
+ $item['owner-id'] = Contact::getIdForURL($activity['actor']);
if (in_array(0, $activity['receiver']) && !empty($activity['unlisted'])) {
$item['private'] = Item::UNLISTED;
$item = self::processContent($activity, $item);
if (empty($item)) {
+ Logger::info('Message was not processed');
return [];
}
}
}
- /**
- * Add users to the receiver list of the given public activity.
- * This is used to ensure that the activity will be stored in every thread.
- *
- * @param array $activity Activity array
- * @return array Modified receiver list
- */
- private static function addReceivers(array $activity)
- {
- if (!in_array(0, $activity['receiver'])) {
- // Private activities will not be modified
- return $activity['receiver'];
- }
-
- // Add all owners of the referring item to the receivers
- $original = $receivers = $activity['receiver'];
- $items = Item::select(['uid'], ['uri' => $activity['object_id']]);
- while ($item = DBA::fetch($items)) {
- $receivers['uid:' . $item['uid']] = $item['uid'];
- }
- DBA::close($items);
-
- if (count($original) != count($receivers)) {
- Logger::info('Improved data', ['id' => $activity['id'], 'object' => $activity['object_id'], 'original' => $original, 'improved' => $receivers]);
- }
-
- return $receivers;
- }
-
/**
* Prepare the item array for an activity
*
$item['diaspora_signed_text'] = $activity['diaspora:like'] ?? '';
- $activity['receiver'] = self::addReceivers($activity);
-
self::postItem($activity, $item);
}
$item['uid'] = $receiver;
+ $type = $activity['reception_type'][$receiver] ?? Receiver::TARGET_UNKNOWN;
+ switch($type) {
+ case Receiver::TARGET_TO:
+ $item['post-type'] = Item::PT_TO;
+ break;
+ case Receiver::TARGET_CC:
+ $item['post-type'] = Item::PT_CC;
+ break;
+ case Receiver::TARGET_BTO:
+ $item['post-type'] = Item::PT_BTO;
+ break;
+ case Receiver::TARGET_BCC:
+ $item['post-type'] = Item::PT_BCC;
+ break;
+ case Receiver::TARGET_FOLLOWER:
+ $item['post-type'] = Item::PT_FOLLOWER;
+ break;
+ case Receiver::TARGET_ANSWER:
+ $item['post-type'] = Item::PT_COMMENT;
+ break;
+ case Receiver::TARGET_GLOBAL:
+ $item['post-type'] = Item::PT_GLOBAL;
+ break;
+ default:
+ $item['post-type'] = Item::PT_ARTICLE;
+ }
+
+ if (in_array($item['post-type'], [Item::PT_COMMENT, Item::PT_GLOBAL, Item::PT_ARTICLE])) {
+ if (!empty($activity['from-relay'])) {
+ $item['post-type'] = Item::PT_RELAY;
+ } elseif (!empty($activity['thread-completion'])) {
+ $item['post-type'] = Item::PT_FETCHED;
+ }
+ }
+
+ if (!empty($activity['from-relay'])) {
+ $item['causer-id'] = $activity['from-relay'];
+ }
+
if ($item['isForum'] ?? false) {
- $item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver, false);
+ $item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver);
} else {
- $item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver, false);
+ $item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver);
}
if (($receiver != 0) && empty($item['contact-id'])) {
- $item['contact-id'] = Contact::getIdForURL($activity['author'], 0, false);
+ $item['contact-id'] = Contact::getIdForURL($activity['author']);
}
if (!empty($activity['directmessage'])) {
/**
* Fetches missing posts
*
- * @param string $url message URL
- * @param array $child activity array with the child of this message
+ * @param string $url message URL
+ * @param array $child activity array with the child of this message
+ * @param string $relay_actor Relay actor
* @return string fetched message URL
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function fetchMissingActivity(string $url, array $child = [])
+ public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '')
{
if (!empty($child['receiver'])) {
$uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
return '';
}
- if (!empty($child['author'])) {
- $actor = $child['author'];
- } elseif (!empty($object['actor'])) {
- $actor = $object['actor'];
+ if (!empty($object['actor'])) {
+ $object_actor = $object['actor'];
} elseif (!empty($object['attributedTo'])) {
- $actor = $object['attributedTo'];
+ $object_actor = $object['attributedTo'];
} else {
// Shouldn't happen
- $actor = '';
+ $object_actor = '';
+ }
+
+ $signer = [$object_actor];
+
+ if (!empty($child['author'])) {
+ $actor = $child['author'];
+ $signer[] = $actor;
+ } else {
+ $actor = $object_actor;
}
if (!empty($object['published'])) {
$ldactivity = JsonLD::compact($activity);
$ldactivity['thread-completion'] = true;
+ $ldactivity['from-relay'] = Contact::getIdForURL($relay_actor);
- ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity));
+ ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, $signer);
Logger::notice('Activity had been fetched and processed.', ['url' => $url, 'object' => $activity['id']]);
}
$owner = User::getOwnerDataById($uid);
+ if (empty($owner)) {
+ return;
+ }
$cid = Contact::getIdForURL($activity['actor'], $uid);
if (!empty($cid)) {
}
Logger::info('Updating profile', ['object' => $activity['object_id']]);
- Contact::updateFromProbeByURL($activity['object_id'], true);
+ Contact::updateFromProbeByURL($activity['object_id']);
}
/**
}
$owner = User::getOwnerDataById($uid);
+ if (empty($owner)) {
+ return;
+ }
$cid = Contact::getIdForURL($activity['actor'], $uid);
if (empty($cid)) {