}
if (!empty($actor)) {
- $profile = APContact::getByURL($actor);
+ $profile = APContact::getByURL($actor);
$followers = $profile['followers'] ?? '';
-
- Logger::log('Actor: ' . $actor . ' - Followers: ' . $followers, Logger::DEBUG);
+ $is_forum = $actor['type'] == 'Group';
+ Logger::info('Got actor and followers', ['actor' => $actor, 'followers' => $followers]);
} else {
Logger::info('Empty actor', ['activity' => $activity]);
$followers = '';
+ $is_forum = false;
}
// We have to prevent false follower assumptions upon thread completions
}
// Fetch the receivers for the public and the followers collection
- if (in_array($receiver, [$followers, self::PUBLIC_COLLECTION]) && !empty($actor)) {
+ if ((($receiver == $followers) || (($receiver == self::PUBLIC_COLLECTION) && !$is_forum)) && !empty($actor)) {
$receivers = self::getReceiverForActor($actor, $tags, $receivers, $follower_target);
continue;
}
use Friendica\Protocol\Relay;
use Friendica\Protocol\Salmon;
use Friendica\Util\Network;
+use Friendica\Util\Strings;
/*
* The notifier is typically called with:
$direct_forum_delivery = true;
}
+ $exclusive_delivery = false;
+
+ $exclusive_targets = Tag::getByURIId($parent['uri-id'], [Tag::EXCLUSIVE_MENTION]);
+ if (!empty($exclusive_targets)) {
+ $exclusive_delivery = true;
+ Logger::info('Possible Exclusively delivering', ['uid' => $target_item['uid'], 'guid' => $target_item['guid'], 'uri-id' => $target_item['uri-id']]);
+ foreach ($exclusive_targets as $target) {
+ if (Strings::compareLink($owner['url'], $target['url'])) {
+ $exclusive_delivery = false;
+ Logger::info('False Exclusively delivering', ['uid' => $target_item['uid'], 'guid' => $target_item['guid'], 'uri-id' => $target_item['uri-id'], 'url' => $target['url']]);
+ }
+ }
+ }
+
if ($relay_to_owner) {
// local followup to remote post
$followup = true;
}
Logger::log('Notify ' . $target_item["guid"] .' via PuSH: ' . ($push_notify ? "Yes":"No"), Logger::DEBUG);
- } elseif ($targets = Tag::getByURIId($target_item['uri-id'], [Tag::EXCLUSIVE_MENTION])) {
+ } elseif ($exclusive_delivery) {
$followup = true;
- foreach ($targets as $target) {
+ foreach ($exclusive_targets as $target) {
$cid = Contact::getIdForURL($target['url'], $uid, false);
if ($cid) {
$recipients_followup[] = $cid;
- Logger::info('Exclusively delivering', ['guid' => $target_item['guid'], 'uri-id' => $target_item['uri-id'], 'url' => $target['url']]);
+ Logger::info('Exclusively delivering', ['uid' => $target_item['uid'], 'guid' => $target_item['guid'], 'uri-id' => $target_item['uri-id'], 'url' => $target['url']]);
}
}
} else {