- /**
- * Check a prospective item array against user-level permissions
- *
- * @param array $item Expected keys: uri, gravity, and
- * author-link if is author-id is set,
- * owner-link if is owner-id is set,
- * causer-link if is causer-id is set.
- * @param int $user_id Local user ID
- * @return bool
- * @throws \Exception
- */
- protected static function isAllowedByUser(array $item, int $user_id): bool
- {
- if (!empty($item['author-id']) && Contact\User::isBlocked($item['author-id'], $user_id)) {
- Logger::notice('Author is blocked by user', ['author-link' => $item['author-link'], 'uid' => $user_id, 'item-uri' => $item['uri']]);
- return false;
- }
-
- if (!empty($item['owner-id']) && Contact\User::isBlocked($item['owner-id'], $user_id)) {
- Logger::notice('Owner is blocked by user', ['owner-link' => $item['owner-link'], 'uid' => $user_id, 'item-uri' => $item['uri']]);
- return false;
- }
-
- // The causer is set during a thread completion, for example because of a reshare. It countains the responsible actor.
- if (!empty($item['causer-id']) && Contact\User::isBlocked($item['causer-id'], $user_id)) {
- Logger::notice('Causer is blocked by user', ['causer-link' => $item['causer-link'] ?? $item['causer-id'], 'uid' => $user_id, 'item-uri' => $item['uri']]);
- return false;
- }
-
- if (!empty($item['causer-id']) && ($item['gravity'] === self::GRAVITY_PARENT) && Contact\User::isIgnored($item['causer-id'], $user_id)) {
- Logger::notice('Causer is ignored by user', ['causer-link' => $item['causer-link'] ?? $item['causer-id'], 'uid' => $user_id, 'item-uri' => $item['uri']]);
- return false;
- }
-
- return true;
- }
-