From 7531a2fb36019c423b740855b61bc540afd9123d Mon Sep 17 00:00:00 2001 From: Art4 Date: Fri, 11 Apr 2025 06:55:51 +0000 Subject: [PATCH] Create event for acl_lookup_end hook --- src/Core/Hooks/HookEventBridge.php | 2 + src/Event/ArrayFilterEvent.php | 2 + src/Module/Search/Acl.php | 42 +++++++++++++------ tests/Unit/Core/Hooks/HookEventBridgeTest.php | 2 + tests/Unit/Event/ArrayFilterEventTest.php | 1 + 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/Core/Hooks/HookEventBridge.php b/src/Core/Hooks/HookEventBridge.php index 9d20a36e89..9b8c2350c4 100644 --- a/src/Core/Hooks/HookEventBridge.php +++ b/src/Core/Hooks/HookEventBridge.php @@ -76,6 +76,7 @@ final class HookEventBridge ArrayFilterEvent::PROFILE_SIDEBAR => 'profile_sidebar', ArrayFilterEvent::PROFILE_TABS => 'profile_tabs', ArrayFilterEvent::MODERATION_USERS_TABS => 'moderation_users_tabs', + ArrayFilterEvent::ACL_LOOKUP_END => 'acl_lookup_end', ArrayFilterEvent::OEMBED_FETCH_END => 'oembed_fetch_url', ArrayFilterEvent::PAGE_INFO => 'page_info_data', ArrayFilterEvent::SMILEY_LIST => 'smilie', @@ -165,6 +166,7 @@ final class HookEventBridge ArrayFilterEvent::PROFILE_SIDEBAR => 'onArrayFilterEvent', ArrayFilterEvent::PROFILE_TABS => 'onArrayFilterEvent', ArrayFilterEvent::MODERATION_USERS_TABS => 'onArrayFilterEvent', + ArrayFilterEvent::ACL_LOOKUP_END => 'onArrayFilterEvent', ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent', ArrayFilterEvent::PAGE_INFO => 'onArrayFilterEvent', ArrayFilterEvent::SMILEY_LIST => 'onArrayFilterEvent', diff --git a/src/Event/ArrayFilterEvent.php b/src/Event/ArrayFilterEvent.php index 7c772f4132..591250455f 100644 --- a/src/Event/ArrayFilterEvent.php +++ b/src/Event/ArrayFilterEvent.php @@ -102,6 +102,8 @@ final class ArrayFilterEvent extends Event public const MODERATION_USERS_TABS = 'friendica.data.moderation_users_tabs'; + public const ACL_LOOKUP_END = 'friendica.data.acl_lookup_end'; + public const OEMBED_FETCH_END = 'friendica.data.oembed_fetch_end'; public const PAGE_INFO = 'friendica.data.page_info'; diff --git a/src/Module/Search/Acl.php b/src/Module/Search/Acl.php index ad1dc180be..83e5a5dfff 100644 --- a/src/Module/Search/Acl.php +++ b/src/Module/Search/Acl.php @@ -7,22 +7,23 @@ namespace Friendica\Module\Search; -use Friendica\App; +use Friendica\App\Arguments; +use Friendica\App\BaseURL; use Friendica\BaseModule; use Friendica\Content\Widget; -use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Search; use Friendica\Core\Session\Capability\IHandleUserSessions; -use Friendica\Core\System; use Friendica\Database\Database; use Friendica\Database\DBA; +use Friendica\Event\ArrayFilterEvent; use Friendica\Model\Contact; use Friendica\Model\Post; use Friendica\Module\Response; -use Friendica\Network\HTTPException; +use Friendica\Network\HTTPException\UnauthorizedException; use Friendica\Util\Profiler; +use Psr\EventDispatcher\EventDispatcherInterface; use Psr\Log\LoggerInterface; /** @@ -44,13 +45,26 @@ class Acl extends BaseModule private $session; /** @var Database */ private $database; + private EventDispatcherInterface $eventDispatcher; - public function __construct(Database $database, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) - { + public function __construct( + Database $database, + IHandleUserSessions $session, + EventDispatcherInterface $eventDispatcher, + L10n $l10n, + BaseURL $baseUrl, + Arguments $args, + LoggerInterface $logger, + Profiler $profiler, + Response $response, + array $server, + array $parameters = [], + ) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); $this->session = $session; $this->database = $database; + $this->eventDispatcher = $eventDispatcher; } protected function post(array $request = []) @@ -61,7 +75,7 @@ class Acl extends BaseModule protected function rawContent(array $request = []) { if (!$this->session->getLocalUserId()) { - throw new HTTPException\UnauthorizedException($this->t('You must be logged in to use this module.')); + throw new UnauthorizedException($this->t('You must be logged in to use this module.')); } $type = $request['type'] ?? self::TYPE_MENTION_CONTACT_CIRCLE; @@ -280,7 +294,7 @@ class Acl extends BaseModule $resultTotal += count($unknown_contacts); } - $results = [ + $hook_data = [ 'tot' => $resultTotal, 'start' => $start, 'count' => $count, @@ -291,13 +305,15 @@ class Acl extends BaseModule 'search' => $search, ]; - Hook::callAll('acl_lookup_end', $results); + $hook_data = $this->eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::ACL_LOOKUP_END, $hook_data), + )->getArray(); $o = [ - 'tot' => $results['tot'], - 'start' => $results['start'], - 'count' => $results['count'], - 'items' => $results['items'], + 'tot' => $hook_data['tot'], + 'start' => $hook_data['start'], + 'count' => $hook_data['count'], + 'items' => $hook_data['items'], ]; $this->logger->info('ACL {action} - {subaction} - done', ['module' => 'acl', 'action' => 'content', 'subaction' => 'search', 'search' => $search, 'type' => $type, 'conversation' => $conv_id]); diff --git a/tests/Unit/Core/Hooks/HookEventBridgeTest.php b/tests/Unit/Core/Hooks/HookEventBridgeTest.php index 6c5c5fecf8..fc3752e977 100644 --- a/tests/Unit/Core/Hooks/HookEventBridgeTest.php +++ b/tests/Unit/Core/Hooks/HookEventBridgeTest.php @@ -65,6 +65,7 @@ class HookEventBridgeTest extends TestCase ArrayFilterEvent::PROFILE_SIDEBAR => 'onArrayFilterEvent', ArrayFilterEvent::PROFILE_TABS => 'onArrayFilterEvent', ArrayFilterEvent::MODERATION_USERS_TABS => 'onArrayFilterEvent', + ArrayFilterEvent::ACL_LOOKUP_END => 'onArrayFilterEvent', ArrayFilterEvent::OEMBED_FETCH_END => 'onOembedFetchEndEvent', ArrayFilterEvent::PAGE_INFO => 'onArrayFilterEvent', ArrayFilterEvent::SMILEY_LIST => 'onArrayFilterEvent', @@ -553,6 +554,7 @@ class HookEventBridgeTest extends TestCase [ArrayFilterEvent::PROFILE_SIDEBAR, 'profile_sidebar'], [ArrayFilterEvent::PROFILE_TABS, 'profile_tabs'], [ArrayFilterEvent::MODERATION_USERS_TABS, 'moderation_users_tabs'], + [ArrayFilterEvent::ACL_LOOKUP_END, 'acl_lookup_end'], [ArrayFilterEvent::PAGE_INFO, 'page_info_data'], [ArrayFilterEvent::SMILEY_LIST, 'smilie'], [ArrayFilterEvent::JOT_NETWORKS, 'jot_networks'], diff --git a/tests/Unit/Event/ArrayFilterEventTest.php b/tests/Unit/Event/ArrayFilterEventTest.php index 9ecdb6feee..771cd4fed7 100644 --- a/tests/Unit/Event/ArrayFilterEventTest.php +++ b/tests/Unit/Event/ArrayFilterEventTest.php @@ -62,6 +62,7 @@ class ArrayFilterEventTest extends TestCase [ArrayFilterEvent::PROFILE_SIDEBAR, 'friendica.data.profile_sidebar'], [ArrayFilterEvent::PROFILE_TABS, 'friendica.data.profile_tabs'], [ArrayFilterEvent::MODERATION_USERS_TABS, 'friendica.data.moderation_users_tabs'], + [ArrayFilterEvent::ACL_LOOKUP_END, 'friendica.data.acl_lookup_end'], [ArrayFilterEvent::OEMBED_FETCH_END, 'friendica.data.oembed_fetch_end'], [ArrayFilterEvent::PAGE_INFO, 'friendica.data.page_info'], [ArrayFilterEvent::SMILEY_LIST, 'friendica.data.smiley_list'],