Merge pull request #6563 from annando/ap-forum

AP: Clarify message distribution for forum posts
This commit is contained in:
Tobias Diekershoff 2019-01-30 15:01:06 +01:00 committed by GitHub
commit 25aa3cff1b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -333,7 +333,11 @@ class Transmitter
$data = ['to' => [], 'cc' => [], 'bcc' => []]; $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); $terms = Term::tagArrayFromItemId($item['id'], TERM_MENTION);
@ -341,9 +345,6 @@ class Transmitter
$data = array_merge($data, self::fetchPermissionBlockFromConversation($item)); $data = array_merge($data, self::fetchPermissionBlockFromConversation($item));
$data['to'][] = ActivityPub::PUBLIC_COLLECTION; $data['to'][] = ActivityPub::PUBLIC_COLLECTION;
if (!empty($actor_profile['followers'])) {
$data['cc'][] = $actor_profile['followers'];
}
foreach ($terms as $term) { foreach ($terms as $term) {
$profile = APContact::getByURL($term['url'], false); $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']]); $parents = Item::select(['id', 'author-link', 'owner-link', 'gravity', 'uri'], ['parent' => $item['parent']]);
while ($parent = Item::fetch($parents)) { 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 // Don't include data from future posts
if ($parent['id'] >= $last_id) { if ($parent['id'] >= $last_id) {
continue; continue;
@ -385,21 +409,12 @@ class Transmitter
$profile = APContact::getByURL($parent['author-link'], false); $profile = APContact::getByURL($parent['author-link'], false);
if (!empty($profile)) { if (!empty($profile)) {
if ($parent['uri'] == $item['thr-parent']) { if (($profile['type'] == 'Group') || ($parent['uri'] == $item['thr-parent'])) {
$data['to'][] = $profile['url']; $data['to'][] = $profile['url'];
} else { } else {
$data['cc'][] = $profile['url']; $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); DBA::close($parents);
@ -1054,8 +1069,9 @@ class Transmitter
* Creates an announce object entry * Creates an announce object entry
* *
* @param array $item * @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 \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException * @throws \ImagickException
*/ */