No notifcations for forum / fetch user for fetching content

This commit is contained in:
Michael 2022-02-13 05:45:06 +00:00
parent e394143148
commit ee3a8ccb3b
2 changed files with 42 additions and 1 deletions

View File

@ -33,6 +33,7 @@ use Friendica\Model\Contact;
use Friendica\Model\Post; use Friendica\Model\Post;
use Friendica\Model\Subscription; use Friendica\Model\Subscription;
use Friendica\Model\Tag; use Friendica\Model\Tag;
use Friendica\Model\User;
use Friendica\Navigation\Notifications; use Friendica\Navigation\Notifications;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
use Friendica\Protocol\Activity; use Friendica\Protocol\Activity;
@ -176,6 +177,11 @@ class UserNotification
return; return;
} }
$user = User::getById($uid, ['account-type']);
if (in_array($user['account-type'], [User::ACCOUNT_TYPE_COMMUNITY, User::ACCOUNT_TYPE_RELAY])) {
return;
}
$notification_type = self::TYPE_NONE; $notification_type = self::TYPE_NONE;
if (self::checkShared($item, $uid)) { if (self::checkShared($item, $uid)) {

View File

@ -263,7 +263,19 @@ class Receiver
{ {
$id = JsonLD::fetchElement($activity, '@id'); $id = JsonLD::fetchElement($activity, '@id');
if (!empty($id) && !$trust_source) { if (!empty($id) && !$trust_source) {
$fetched_activity = ActivityPub::fetchContent($id, $uid ?? 0); if (empty($uid)) {
$actor = JsonLD::fetchElement($activity, 'as:actor', '@id');
if (empty($actor)) {
$actor = '';
}
// Fetch a user out of the receivers of the message.
$fetch_uid = Receiver::getBestUserForActivity($activity, $actor);
} else {
$fetch_uid = $uid;
}
$fetched_activity = ActivityPub::fetchContent($id, $fetch_uid);
if (!empty($fetched_activity)) { if (!empty($fetched_activity)) {
$object = JsonLD::compact($fetched_activity); $object = JsonLD::compact($fetched_activity);
$fetched_id = JsonLD::fetchElement($object, '@id'); $fetched_id = JsonLD::fetchElement($object, '@id');
@ -643,6 +655,29 @@ class Receiver
} }
} }
/**
* Fetch a user id from an activity array
*
* @param array $activity
* @param string $actor
*
* @return int user id
*/
private static function getBestUserForActivity(array $activity, string $actor)
{
$uid = 0;
$receivers = self::getReceivers($activity, $actor);
foreach ($receivers as $receiver) {
if ($receiver['type'] == self::TARGET_GLOBAL) {
return 0;
}
if (empty($uid) || ($receiver['type'] == self::TARGET_TO)) {
$uid = $receiver['uid'];
}
}
return $uid;
}
/** /**
* Fetch the receiver list from an activity array * Fetch the receiver list from an activity array
* *