From ac8ca35b2b078ead4143170df8220a258d1c5b48 Mon Sep 17 00:00:00 2001 From: Art4 Date: Mon, 17 Mar 2025 10:52:37 +0000 Subject: [PATCH] Create event for item_by_link hook --- src/Core/Hooks/HookEventBridge.php | 2 ++ src/Event/ArrayFilterEvent.php | 2 ++ src/Model/Item.php | 15 +++++++++------ tests/Unit/Core/Hooks/HookEventBridgeTest.php | 2 ++ tests/Unit/Event/ArrayFilterEventTest.php | 1 + 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Core/Hooks/HookEventBridge.php b/src/Core/Hooks/HookEventBridge.php index f59a267230..83a075c7d5 100644 --- a/src/Core/Hooks/HookEventBridge.php +++ b/src/Core/Hooks/HookEventBridge.php @@ -55,6 +55,7 @@ final class HookEventBridge ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'photo_upload_form', ArrayFilterEvent::NETWORK_TO_NAME => 'network_to_name', ArrayFilterEvent::CONVERSATION_START => 'conversation_start', + ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'item_by_link', ArrayFilterEvent::ITEM_TAGGED => 'tagged', ArrayFilterEvent::DISPLAY_ITEM => 'display_item', ArrayFilterEvent::CACHE_ITEM => 'put_item_in_cache', @@ -120,6 +121,7 @@ final class HookEventBridge ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'onArrayFilterEvent', ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', + ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'onArrayFilterEvent', ArrayFilterEvent::ITEM_TAGGED => 'onArrayFilterEvent', ArrayFilterEvent::DISPLAY_ITEM => 'onArrayFilterEvent', ArrayFilterEvent::CACHE_ITEM => 'onArrayFilterEvent', diff --git a/src/Event/ArrayFilterEvent.php b/src/Event/ArrayFilterEvent.php index db57babfda..ee36b2d983 100644 --- a/src/Event/ArrayFilterEvent.php +++ b/src/Event/ArrayFilterEvent.php @@ -60,6 +60,8 @@ final class ArrayFilterEvent extends Event public const CONVERSATION_START = 'friendica.data.conversation_start'; + public const FETCH_ITEM_BY_LINK = 'friendica.data.fetch_item_by_link'; + public const ITEM_TAGGED = 'friendica.data.item_tagged'; public const DISPLAY_ITEM = 'friendica.data.display_item'; diff --git a/src/Model/Item.php b/src/Model/Item.php index d93ab1768d..3edd6950e7 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -14,7 +14,6 @@ use Friendica\Content\Post\Collection\PostMedias; use Friendica\Content\Post\Entity\PostMedia; use Friendica\Content\Text\BBCode; use Friendica\Content\Text\HTML; -use Friendica\Core\Hook; use Friendica\Core\L10n; use Friendica\Core\Protocol; use Friendica\Core\Renderer; @@ -3951,17 +3950,21 @@ class Item return 0; } - $hookData = [ + $eventDispatcher = DI::eventDispatcher(); + + $hook_data = [ 'uri' => $uri, 'uid' => $uid, 'item_id' => null, ]; - Hook::callAll('item_by_link', $hookData); + $hook_data = $eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::FETCH_ITEM_BY_LINK, $hook_data) + )->getArray(); - if (isset($hookData['item_id'])) { - DI::logger()->info('Hook link fetched', ['uid' => $uid, 'uri' => $uri, 'id' => $hookData['item_id']]); - return is_numeric($hookData['item_id']) ? $hookData['item_id'] : 0; + if (isset($hook_data['item_id'])) { + DI::logger()->info('Hook link fetched', ['uid' => $uid, 'uri' => $uri, 'id' => $hook_data['item_id']]); + return is_numeric($hook_data['item_id']) ? $hook_data['item_id'] : 0; } if (!$mimetype) { diff --git a/tests/Unit/Core/Hooks/HookEventBridgeTest.php b/tests/Unit/Core/Hooks/HookEventBridgeTest.php index 0e4afb2448..c6b7ac7a5c 100644 --- a/tests/Unit/Core/Hooks/HookEventBridgeTest.php +++ b/tests/Unit/Core/Hooks/HookEventBridgeTest.php @@ -44,6 +44,7 @@ class HookEventBridgeTest extends TestCase ArrayFilterEvent::PHOTO_UPLOAD_FORM => 'onArrayFilterEvent', ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', + ArrayFilterEvent::FETCH_ITEM_BY_LINK => 'onArrayFilterEvent', ArrayFilterEvent::ITEM_TAGGED => 'onArrayFilterEvent', ArrayFilterEvent::DISPLAY_ITEM => 'onArrayFilterEvent', ArrayFilterEvent::CACHE_ITEM => 'onArrayFilterEvent', @@ -353,6 +354,7 @@ class HookEventBridgeTest extends TestCase [ArrayFilterEvent::PHOTO_UPLOAD_FORM, 'photo_upload_form'], [ArrayFilterEvent::NETWORK_TO_NAME, 'network_to_name'], [ArrayFilterEvent::CONVERSATION_START, 'conversation_start'], + [ArrayFilterEvent::FETCH_ITEM_BY_LINK, 'item_by_link'], [ArrayFilterEvent::ITEM_TAGGED, 'tagged'], [ArrayFilterEvent::DISPLAY_ITEM, 'display_item'], [ArrayFilterEvent::CACHE_ITEM, 'put_item_in_cache'], diff --git a/tests/Unit/Event/ArrayFilterEventTest.php b/tests/Unit/Event/ArrayFilterEventTest.php index e087856178..7a72faf758 100644 --- a/tests/Unit/Event/ArrayFilterEventTest.php +++ b/tests/Unit/Event/ArrayFilterEventTest.php @@ -41,6 +41,7 @@ class ArrayFilterEventTest extends TestCase [ArrayFilterEvent::PHOTO_UPLOAD_FORM, 'friendica.data.photo_upload_form'], [ArrayFilterEvent::NETWORK_TO_NAME, 'friendica.data.network_to_name'], [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'], [ArrayFilterEvent::DISPLAY_ITEM, 'friendica.data.display_item'], [ArrayFilterEvent::CACHE_ITEM, 'friendica.data.cache_item'],