From 27e474c83c3b626b220b0f815ef5d64d35b20c98 Mon Sep 17 00:00:00 2001 From: Art4 Date: Wed, 26 Mar 2025 08:30:20 +0000 Subject: [PATCH] create event for parse_link hook --- src/Core/Hooks/HookEventBridge.php | 2 ++ src/Event/ArrayFilterEvent.php | 2 ++ src/Module/ParseUrl.php | 24 +++++++++++++------ tests/Unit/Core/Hooks/HookEventBridgeTest.php | 2 ++ tests/Unit/Event/ArrayFilterEventTest.php | 1 + 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/Core/Hooks/HookEventBridge.php b/src/Core/Hooks/HookEventBridge.php index 84835dc780..0beeec8667 100644 --- a/src/Core/Hooks/HookEventBridge.php +++ b/src/Core/Hooks/HookEventBridge.php @@ -54,6 +54,7 @@ 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::PARSE_LINK => 'parse_link', ArrayFilterEvent::CONVERSATION_START => 'conversation_start', ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'item_by_link', ArrayFilterEvent::ITEM_TAGGED => 'tagged', @@ -130,6 +131,7 @@ final class HookEventBridge ArrayFilterEvent::PREPARE_POST_END => 'onArrayFilterEvent', ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'onArrayFilterEvent', ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', + ArrayFilterEvent::PARSE_LINK => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'onArrayFilterEvent', ArrayFilterEvent::ITEM_TAGGED => 'onArrayFilterEvent', diff --git a/src/Event/ArrayFilterEvent.php b/src/Event/ArrayFilterEvent.php index de92599ee3..c9ae0fabe1 100644 --- a/src/Event/ArrayFilterEvent.php +++ b/src/Event/ArrayFilterEvent.php @@ -58,6 +58,8 @@ final class ArrayFilterEvent extends Event public const NETWORK_TO_NAME = 'friendica.data.network_to_name'; + public const PARSE_LINK = 'friendica.data.parse_link'; + public const CONVERSATION_START = 'friendica.data.conversation_start'; public const FETCH_ITEM_BY_LINK = 'friendica.data.fetch_item_by_link'; diff --git a/src/Module/ParseUrl.php b/src/Module/ParseUrl.php index 8da72c742c..508e5d987d 100644 --- a/src/Module/ParseUrl.php +++ b/src/Module/ParseUrl.php @@ -11,12 +11,13 @@ use Friendica\App\Arguments; use Friendica\App\BaseURL; use Friendica\BaseModule; use Friendica\Content\Text\BBCode; -use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Session\Capability\IHandleUserSessions; +use Friendica\Event\ArrayFilterEvent; use Friendica\Network\HTTPException\BadRequestException; use Friendica\Util; use Friendica\Util\Profiler; +use Psr\EventDispatcher\EventDispatcherInterface; use Psr\Log\LoggerInterface; class ParseUrl extends BaseModule @@ -24,11 +25,14 @@ class ParseUrl extends BaseModule /** @var IHandleUserSessions */ protected $userSession; - public function __construct(L10n $l10n, BaseURL $baseUrl, Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IHandleUserSessions $userSession, $server, array $parameters = []) + private EventDispatcherInterface $eventDispatcher; + + public function __construct(L10n $l10n, BaseURL $baseUrl, Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, IHandleUserSessions $userSession, EventDispatcherInterface $eventDispatcher, $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); $this->userSession = $userSession; + $this->eventDispatcher = $eventDispatcher; } protected function rawContent(array $request = []) @@ -80,15 +84,21 @@ class ParseUrl extends BaseModule } } - $arr = ['url' => $url, 'format' => $format, 'text' => null]; + $hook_data = [ + 'url' => $url, + 'format' => $format, + 'text' => null, + ]; - Hook::callAll('parse_link', $arr); + $hook_data = $this->eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::PARSE_LINK, $hook_data), + )->getArray(); - if ($arr['text']) { + if ($hook_data['text']) { if ($format == 'json') { - $this->jsonExit($arr['text']); + $this->jsonExit($hook_data['text']); } else { - $this->httpExit($arr['text']); + $this->httpExit($hook_data['text']); } } diff --git a/tests/Unit/Core/Hooks/HookEventBridgeTest.php b/tests/Unit/Core/Hooks/HookEventBridgeTest.php index 075630da1c..bdfe5d5508 100644 --- a/tests/Unit/Core/Hooks/HookEventBridgeTest.php +++ b/tests/Unit/Core/Hooks/HookEventBridgeTest.php @@ -43,6 +43,7 @@ class HookEventBridgeTest extends TestCase ArrayFilterEvent::PREPARE_POST_END => 'onArrayFilterEvent', ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'onArrayFilterEvent', ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', + ArrayFilterEvent::PARSE_LINK => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'onArrayFilterEvent', ArrayFilterEvent::ITEM_TAGGED => 'onArrayFilterEvent', @@ -460,6 +461,7 @@ 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::PARSE_LINK, 'parse_link'], [ArrayFilterEvent::CONVERSATION_START, 'conversation_start'], [ArrayFilterEvent::FETCH_ITEM_BY_LINK, 'item_by_link'], [ArrayFilterEvent::ITEM_TAGGED, 'tagged'], diff --git a/tests/Unit/Event/ArrayFilterEventTest.php b/tests/Unit/Event/ArrayFilterEventTest.php index 881deacd43..fafd1a66e0 100644 --- a/tests/Unit/Event/ArrayFilterEventTest.php +++ b/tests/Unit/Event/ArrayFilterEventTest.php @@ -40,6 +40,7 @@ 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::PARSE_LINK, 'friendica.data.parse_link'], [ArrayFilterEvent::CONVERSATION_START, 'friendica.data.conversation_start'], [ArrayFilterEvent::FETCH_ITEM_BY_LINK, 'friendica.data.fetch_item_by_link'], [ArrayFilterEvent::ITEM_TAGGED, 'friendica.data.item_tagged'],