From 2c0ee72064a86f5809b456fc715f5900de7dcf48 Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 30 Jan 2019 13:07:23 +0000 Subject: [PATCH] Ap: Clarify message distribution for forum posts --- src/Protocol/ActivityPub/Transmitter.php | 46 ++++++++++++++++-------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index 41239b3afd..7481db9e74 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -333,7 +333,11 @@ class Transmitter $data = ['to' => [], 'cc' => [], 'bcc' => []]; - $actor_profile = APContact::getByURL($item['author-link']); + if ($item['gravity'] == GRAVITY_PARENT) { + $actor_profile = APContact::getByURL($item['owner-link']); + } else { + $actor_profile = APContact::getByURL($item['author-link']); + } $terms = Term::tagArrayFromItemId($item['id'], TERM_MENTION); @@ -341,9 +345,6 @@ class Transmitter $data = array_merge($data, self::fetchPermissionBlockFromConversation($item)); $data['to'][] = ActivityPub::PUBLIC_COLLECTION; - if (!empty($actor_profile['followers'])) { - $data['cc'][] = $actor_profile['followers']; - } foreach ($terms as $term) { $profile = APContact::getByURL($term['url'], false); @@ -378,6 +379,29 @@ class Transmitter $parents = Item::select(['id', 'author-link', 'owner-link', 'gravity', 'uri'], ['parent' => $item['parent']]); while ($parent = Item::fetch($parents)) { + if ($parent['gravity'] == GRAVITY_PARENT) { + $profile = APContact::getByURL($parent['owner-link'], false); + if (!empty($profile)) { + if ($item['gravity'] != GRAVITY_PARENT) { + // Comments to forums are directed to the forum + // But comments to forums aren't directed to the followers collection + if ($profile['type'] == 'Group') { + $data['to'][] = $profile['url']; + } else { + $data['cc'][] = $profile['url']; + if (!$item['private']) { + $data['cc'][] = $actor_profile['followers']; + } + } + } else { + // Public thread parent post always are directed to the followes + if (!$item['private']) { + $data['cc'][] = $actor_profile['followers']; + } + } + } + } + // Don't include data from future posts if ($parent['id'] >= $last_id) { continue; @@ -385,21 +409,12 @@ class Transmitter $profile = APContact::getByURL($parent['author-link'], false); if (!empty($profile)) { - if ($parent['uri'] == $item['thr-parent']) { + if (($profile['type'] == 'Group') || ($parent['uri'] == $item['thr-parent'])) { $data['to'][] = $profile['url']; } else { $data['cc'][] = $profile['url']; } } - - if ($item['gravity'] != GRAVITY_PARENT) { - continue; - } - - $profile = APContact::getByURL($parent['owner-link'], false); - if (!empty($profile)) { - $data['cc'][] = $profile['url']; - } } DBA::close($parents); @@ -1054,8 +1069,9 @@ class Transmitter * Creates an announce object entry * * @param array $item + * @param array $data activity data * - * @return string with announced object url + * @return array with activity data * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \ImagickException */