diff --git a/src/Core/Hooks/HookEventBridge.php b/src/Core/Hooks/HookEventBridge.php index 8d53df417f..2406fb7037 100644 --- a/src/Core/Hooks/HookEventBridge.php +++ b/src/Core/Hooks/HookEventBridge.php @@ -56,6 +56,7 @@ final class HookEventBridge ArrayFilterEvent::NETWORK_TO_NAME => 'network_to_name', ArrayFilterEvent::CONVERSATION_START => 'conversation_start', ArrayFilterEvent::DISPLAY_ITEM => 'display_item', + ArrayFilterEvent::DETECT_LANGUAGES => 'detect_languages', ArrayFilterEvent::RENDER_LOCATION => 'render_location', ArrayFilterEvent::ITEM_PHOTO_MENU => 'item_photo_menu', ArrayFilterEvent::CONTACT_PHOTO_MENU => 'contact_photo_menu', @@ -118,6 +119,7 @@ final class HookEventBridge ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', ArrayFilterEvent::DISPLAY_ITEM => 'onArrayFilterEvent', + ArrayFilterEvent::DETECT_LANGUAGES => 'onArrayFilterEvent', ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent', ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent', ArrayFilterEvent::CONTACT_PHOTO_MENU => 'onArrayFilterEvent', diff --git a/src/Event/ArrayFilterEvent.php b/src/Event/ArrayFilterEvent.php index f29acad952..44aa403b18 100644 --- a/src/Event/ArrayFilterEvent.php +++ b/src/Event/ArrayFilterEvent.php @@ -62,6 +62,8 @@ final class ArrayFilterEvent extends Event public const DISPLAY_ITEM = 'friendica.data.display_item'; + public const DETECT_LANGUAGES = 'friendica.data.detect_languages'; + public const RENDER_LOCATION = 'friendica.data.render_location'; public const ITEM_PHOTO_MENU = 'friendica.data.item_photo_menu'; diff --git a/src/Model/Item.php b/src/Model/Item.php index 6c8be7528e..954c0ce11c 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -1903,18 +1903,23 @@ class Item $result = []; + $eventDispatcher = DI::eventDispatcher(); + foreach (self::splitByBlocks($searchtext) as $block) { $languages = $ld->detect($block)->close() ?: []; - $data = [ + $hook_data = [ 'text' => $block, 'detected' => $languages, 'uri-id' => $uri_id, 'author-id' => $author_id, ]; - Hook::callAll('detect_languages', $data); - foreach ($data['detected'] as $language => $quality) { + $hook_data = $eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::DETECT_LANGUAGES, $hook_data), + )->getArray(); + + foreach ($hook_data['detected'] as $language => $quality) { $result[$language] = max($result[$language] ?? 0, $quality * (strlen($block) / strlen($searchtext))); } } diff --git a/tests/Unit/Core/Hooks/HookEventBridgeTest.php b/tests/Unit/Core/Hooks/HookEventBridgeTest.php index 17291539a7..e0e9a3eb8e 100644 --- a/tests/Unit/Core/Hooks/HookEventBridgeTest.php +++ b/tests/Unit/Core/Hooks/HookEventBridgeTest.php @@ -45,6 +45,7 @@ class HookEventBridgeTest extends TestCase ArrayFilterEvent::NETWORK_TO_NAME => 'onArrayFilterEvent', ArrayFilterEvent::CONVERSATION_START => 'onArrayFilterEvent', ArrayFilterEvent::DISPLAY_ITEM => 'onArrayFilterEvent', + ArrayFilterEvent::DETECT_LANGUAGES => 'onArrayFilterEvent', ArrayFilterEvent::RENDER_LOCATION => 'onArrayFilterEvent', ArrayFilterEvent::ITEM_PHOTO_MENU => 'onArrayFilterEvent', ArrayFilterEvent::CONTACT_PHOTO_MENU => 'onArrayFilterEvent', @@ -351,6 +352,7 @@ class HookEventBridgeTest extends TestCase [ArrayFilterEvent::NETWORK_TO_NAME, 'network_to_name'], [ArrayFilterEvent::CONVERSATION_START, 'conversation_start'], [ArrayFilterEvent::DISPLAY_ITEM, 'display_item'], + [ArrayFilterEvent::DETECT_LANGUAGES, 'detect_languages'], [ArrayFilterEvent::RENDER_LOCATION, 'render_location'], [ArrayFilterEvent::ITEM_PHOTO_MENU, 'item_photo_menu'], [ArrayFilterEvent::CONTACT_PHOTO_MENU, 'contact_photo_menu'], diff --git a/tests/Unit/Event/ArrayFilterEventTest.php b/tests/Unit/Event/ArrayFilterEventTest.php index 5af49e9fb8..d079cacdec 100644 --- a/tests/Unit/Event/ArrayFilterEventTest.php +++ b/tests/Unit/Event/ArrayFilterEventTest.php @@ -42,6 +42,7 @@ class ArrayFilterEventTest extends TestCase [ArrayFilterEvent::NETWORK_TO_NAME, 'friendica.data.network_to_name'], [ArrayFilterEvent::CONVERSATION_START, 'friendica.data.conversation_start'], [ArrayFilterEvent::DISPLAY_ITEM, 'friendica.data.display_item'], + [ArrayFilterEvent::DETECT_LANGUAGES, 'friendica.data.detect_languages'], [ArrayFilterEvent::RENDER_LOCATION, 'friendica.data.render_location'], [ArrayFilterEvent::ITEM_PHOTO_MENU, 'friendica.data.item_photo_menu'], [ArrayFilterEvent::CONTACT_PHOTO_MENU, 'friendica.data.contact_photo_menu'],