$item = self::processContent($activity, $item);
if (empty($item)) {
+ Logger::info('Message was not processed');
return [];
}
$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);
} else {
/**
* 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), $uid, true, false, [$actor]);
+ ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, $signer);
Logger::notice('Activity had been fetched and processed.', ['url' => $url, 'object' => $activity['id']]);