From a34a93c0b98c9e3c4890c21b25a3d68bd007206a Mon Sep 17 00:00:00 2001 From: Art4 Date: Wed, 2 Apr 2025 12:41:22 +0000 Subject: [PATCH] Create events for networt_tabs and network_content_init hooks --- src/Core/Hooks/HookEventBridge.php | 4 + src/Event/ArrayFilterEvent.php | 4 + src/Module/Conversation/Network.php | 73 ++++++++++++++++--- tests/Unit/Core/Hooks/HookEventBridgeTest.php | 4 + tests/Unit/Event/ArrayFilterEventTest.php | 2 + 5 files changed, 78 insertions(+), 9 deletions(-) diff --git a/src/Core/Hooks/HookEventBridge.php b/src/Core/Hooks/HookEventBridge.php index c74b0a8df2..72204ab11e 100644 --- a/src/Core/Hooks/HookEventBridge.php +++ b/src/Core/Hooks/HookEventBridge.php @@ -54,6 +54,8 @@ final class HookEventBridge ArrayFilterEvent::PREPARE_POST_END => 'prepare_body_final', ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'photo_upload_form', ArrayFilterEvent::NETWORK_TO_NAME => 'network_to_name', + ArrayFilterEvent::NETWORK_CONTENT_START => 'network_content_init', + ArrayFilterEvent::NETWORK_CONTENT_TABS => 'network_tabs', ArrayFilterEvent::PARSE_LINK => 'parse_link', ArrayFilterEvent::CONVERSATION_START => 'conversation_start', ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'item_by_link', @@ -135,6 +137,8 @@ final class HookEventBridge ArrayFilterEvent::PREPARE_POST_END => 'onArrayFilterEvent', ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'onArrayFilterEvent', ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', + ArrayFilterEvent::NETWORK_CONTENT_START => 'onArrayFilterEvent', + ArrayFilterEvent::NETWORK_CONTENT_TABS => 'onArrayFilterEvent', ArrayFilterEvent::PARSE_LINK => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'onArrayFilterEvent', diff --git a/src/Event/ArrayFilterEvent.php b/src/Event/ArrayFilterEvent.php index 9435ab37b6..01a9a90675 100644 --- a/src/Event/ArrayFilterEvent.php +++ b/src/Event/ArrayFilterEvent.php @@ -58,6 +58,10 @@ final class ArrayFilterEvent extends Event public const NETWORK_TO_NAME = 'friendica.data.network_to_name'; + public const NETWORK_CONTENT_START = 'friendica.data.network_content_start'; + + public const NETWORK_CONTENT_TABS = 'friendica.data.network_content_tabs'; + public const PARSE_LINK = 'friendica.data.parse_link'; public const CONVERSATION_START = 'friendica.data.conversation_start'; diff --git a/src/Module/Conversation/Network.php b/src/Module/Conversation/Network.php index 86c2fcf736..e50d2f4d61 100644 --- a/src/Module/Conversation/Network.php +++ b/src/Module/Conversation/Network.php @@ -39,6 +39,7 @@ use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\Database\Database; +use Friendica\Event\ArrayFilterEvent; use Friendica\Model\Contact; use Friendica\Model\Circle; use Friendica\Model\Post; @@ -49,6 +50,7 @@ use Friendica\Network\HTTPException; use Friendica\Navigation\SystemMessages; use Friendica\Util\DateTimeFormat; use Friendica\Util\Profiler; +use Psr\EventDispatcher\EventDispatcherInterface; use Psr\Log\LoggerInterface; class Network extends Timeline @@ -90,12 +92,55 @@ class Network extends Timeline protected $community; /** @var NetworkFactory */ protected $networkFactory; + private EventDispatcherInterface $eventDispatcher; - public function __construct(UserDefinedChannelFactory $userDefinedChannel, NetworkFactory $network, CommunityFactory $community, ChannelFactory $channelFactory, UserDefinedChannel $channel, AppHelper $appHelper, TimelineFactory $timeline, SystemMessages $systemMessages, Mode $mode, Conversation $conversation, Page $page, IHandleUserSessions $session, Database $database, IManagePersonalConfigValues $pConfig, IManageConfigValues $config, ICanCache $cache, L10n $l10n, BaseURL $baseUrl, Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) - { - parent::__construct($channel, $mode, $session, $database, $pConfig, $config, $cache, $l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + public function __construct( + UserDefinedChannelFactory $userDefinedChannel, + NetworkFactory $network, + CommunityFactory $community, + ChannelFactory $channelFactory, + UserDefinedChannel $channel, + AppHelper $appHelper, + EventDispatcherInterface $eventDispatcher, + TimelineFactory $timeline, + SystemMessages $systemMessages, + Mode $mode, + Conversation $conversation, + Page $page, + IHandleUserSessions $session, + Database $database, + IManagePersonalConfigValues $pConfig, + IManageConfigValues $config, + ICanCache $cache, + L10n $l10n, + BaseURL $baseUrl, + Arguments $args, + LoggerInterface $logger, + Profiler $profiler, + Response $response, + array $server, + array $parameters = [] + ) { + parent::__construct( + $channel, + $mode, + $session, + $database, + $pConfig, + $config, + $cache, + $l10n, + $baseUrl, + $args, + $logger, + $profiler, + $response, + $server, + $parameters, + ); $this->appHelper = $appHelper; + $this->eventDispatcher = $eventDispatcher; $this->timeline = $timeline; $this->systemMessages = $systemMessages; $this->conversation = $conversation; @@ -116,8 +161,13 @@ class Network extends Timeline $module = 'network'; - $arr = ['query' => $this->args->getQueryString()]; - Hook::callAll('network_content_init', $arr); + $hook_data = [ + 'query' => $this->args->getQueryString(), + ]; + + $this->eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::NETWORK_CONTENT_START, $hook_data) + ); $o = ''; @@ -275,19 +325,24 @@ class Network extends Timeline $tabs = array_merge($tabs, $this->getTabArray($this->community->getTimelines(true), 'network', 'channel')); } - $arr = ['tabs' => $tabs]; - Hook::callAll('network_tabs', $arr); + $hook_data = [ + 'tabs' => $tabs, + ]; + + $hook_data = $this->eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::NETWORK_CONTENT_TABS, $hook_data) + )->getArray(); if (!empty($network_timelines)) { $tabs = []; - foreach ($arr['tabs'] as $tab) { + foreach ($hook_data['tabs'] as $tab) { if (in_array($tab['code'], $network_timelines)) { $tabs[] = $tab; } } } else { - $tabs = $arr['tabs']; + $tabs = $hook_data['tabs']; } $tpl = Renderer::getMarkupTemplate('common_tabs.tpl'); diff --git a/tests/Unit/Core/Hooks/HookEventBridgeTest.php b/tests/Unit/Core/Hooks/HookEventBridgeTest.php index 348124b389..7b97e76a02 100644 --- a/tests/Unit/Core/Hooks/HookEventBridgeTest.php +++ b/tests/Unit/Core/Hooks/HookEventBridgeTest.php @@ -43,6 +43,8 @@ class HookEventBridgeTest extends TestCase ArrayFilterEvent::PREPARE_POST_END => 'onArrayFilterEvent', ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'onArrayFilterEvent', ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', + ArrayFilterEvent::NETWORK_CONTENT_START => 'onArrayFilterEvent', + ArrayFilterEvent::NETWORK_CONTENT_TABS => 'onArrayFilterEvent', ArrayFilterEvent::PARSE_LINK => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'onArrayFilterEvent', @@ -465,6 +467,8 @@ class HookEventBridgeTest extends TestCase [ArrayFilterEvent::PREPARE_POST_END, 'prepare_body_final'], [ArrayFilterEvent::PHOTO_UPLOAD_FORM, 'photo_upload_form'], [ArrayFilterEvent::NETWORK_TO_NAME, 'network_to_name'], + [ArrayFilterEvent::NETWORK_CONTENT_START, 'network_content_init'], + [ArrayFilterEvent::NETWORK_CONTENT_TABS, 'network_tabs'], [ArrayFilterEvent::PARSE_LINK, 'parse_link'], [ArrayFilterEvent::CONVERSATION_START, 'conversation_start'], [ArrayFilterEvent::FETCH_ITEM_BY_LINK, 'item_by_link'], diff --git a/tests/Unit/Event/ArrayFilterEventTest.php b/tests/Unit/Event/ArrayFilterEventTest.php index a64080198e..4e1a800435 100644 --- a/tests/Unit/Event/ArrayFilterEventTest.php +++ b/tests/Unit/Event/ArrayFilterEventTest.php @@ -40,6 +40,8 @@ class ArrayFilterEventTest extends TestCase [ArrayFilterEvent::PREPARE_POST_END, 'friendica.data.prepare_post_end'], [ArrayFilterEvent::PHOTO_UPLOAD_FORM, 'friendica.data.photo_upload_form'], [ArrayFilterEvent::NETWORK_TO_NAME, 'friendica.data.network_to_name'], + [ArrayFilterEvent::NETWORK_CONTENT_START, 'friendica.data.network_content_start'], + [ArrayFilterEvent::NETWORK_CONTENT_TABS, 'friendica.data.network_content_tabs'], [ArrayFilterEvent::PARSE_LINK, 'friendica.data.parse_link'], [ArrayFilterEvent::CONVERSATION_START, 'friendica.data.conversation_start'], [ArrayFilterEvent::FETCH_ITEM_BY_LINK, 'friendica.data.fetch_item_by_link'],