From 2a722b16aab9c23288d1f961b7dbd6f6d308854f Mon Sep 17 00:00:00 2001 From: Art4 Date: Thu, 13 Mar 2025 14:50:29 +0000 Subject: [PATCH] Add event for proc_run hook --- src/Core/Hooks/HookEventBridge.php | 2 ++ src/Core/Worker.php | 12 +++++++----- src/Event/ArrayFilterEvent.php | 2 ++ tests/Unit/Core/Hooks/HookEventBridgeTest.php | 2 ++ tests/Unit/Event/ArrayFilterEventTest.php | 1 + 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Core/Hooks/HookEventBridge.php b/src/Core/Hooks/HookEventBridge.php index 39da9a13d0..18a41a1730 100644 --- a/src/Core/Hooks/HookEventBridge.php +++ b/src/Core/Hooks/HookEventBridge.php @@ -67,6 +67,7 @@ final class HookEventBridge ArrayFilterEvent::REVOKE_FOLLOW_CONTACT => 'revoke_follow', ArrayFilterEvent::BLOCK_CONTACT => 'block', ArrayFilterEvent::UNBLOCK_CONTACT => 'unblock', + ArrayFilterEvent::ADD_WORKER_TASK => 'proc_run', HtmlFilterEvent::HEAD => 'head', HtmlFilterEvent::FOOTER => 'footer', HtmlFilterEvent::PAGE_HEADER => 'page_header', @@ -114,6 +115,7 @@ final class HookEventBridge ArrayFilterEvent::REVOKE_FOLLOW_CONTACT => 'onArrayFilterEvent', ArrayFilterEvent::BLOCK_CONTACT => 'onArrayFilterEvent', ArrayFilterEvent::UNBLOCK_CONTACT => 'onArrayFilterEvent', + ArrayFilterEvent::ADD_WORKER_TASK => 'onArrayFilterEvent', HtmlFilterEvent::HEAD => 'onHtmlFilterEvent', HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent', HtmlFilterEvent::PAGE_HEADER => 'onHtmlFilterEvent', diff --git a/src/Core/Worker.php b/src/Core/Worker.php index 995239cde9..0f14807adb 100644 --- a/src/Core/Worker.php +++ b/src/Core/Worker.php @@ -13,6 +13,7 @@ use Friendica\Core\Logger\Type\WorkerLogger; use Friendica\Core\Worker\Entity\Process; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Event\ArrayFilterEvent; use Friendica\Util\DateTimeFormat; /** @@ -1237,10 +1238,6 @@ class Worker * @return int '0' if worker queue entry already existed or there had been an error, otherwise the ID of the worker task * @throws \Friendica\Network\HTTPException\InternalServerErrorException * @note $cmd and string args are surrounded with '' - * - * @hooks 'proc_run' - * array $arr - * */ public static function add(...$args) { @@ -1250,7 +1247,12 @@ class Worker $arr = ['args' => $args, 'run_cmd' => true]; - Hook::callAll('proc_run', $arr); + $eventDispatcher = DI::eventDispatcher(); + + $arr = $eventDispatcher->dispatch( + new ArrayFilterEvent(ArrayFilterEvent::ADD_WORKER_TASK, $arr), + )->getArray(); + if (!$arr['run_cmd'] || !count($args)) { return 1; } diff --git a/src/Event/ArrayFilterEvent.php b/src/Event/ArrayFilterEvent.php index b4ec112272..6967524f86 100644 --- a/src/Event/ArrayFilterEvent.php +++ b/src/Event/ArrayFilterEvent.php @@ -72,6 +72,8 @@ final class ArrayFilterEvent extends Event public const UNBLOCK_CONTACT = 'friendica.data.unblock_contact'; + public const ADD_WORKER_TASK = 'friendica.data.add_worker_task'; + private array $array; public function __construct(string $name, array $array) diff --git a/tests/Unit/Core/Hooks/HookEventBridgeTest.php b/tests/Unit/Core/Hooks/HookEventBridgeTest.php index f1b10ed3c7..d7df82e4d1 100644 --- a/tests/Unit/Core/Hooks/HookEventBridgeTest.php +++ b/tests/Unit/Core/Hooks/HookEventBridgeTest.php @@ -56,6 +56,7 @@ class HookEventBridgeTest extends TestCase ArrayFilterEvent::REVOKE_FOLLOW_CONTACT => 'onArrayFilterEvent', ArrayFilterEvent::BLOCK_CONTACT => 'onArrayFilterEvent', ArrayFilterEvent::UNBLOCK_CONTACT => 'onArrayFilterEvent', + ArrayFilterEvent::ADD_WORKER_TASK => 'onArrayFilterEvent', HtmlFilterEvent::HEAD => 'onHtmlFilterEvent', HtmlFilterEvent::FOOTER => 'onHtmlFilterEvent', HtmlFilterEvent::PAGE_HEADER => 'onHtmlFilterEvent', @@ -288,6 +289,7 @@ class HookEventBridgeTest extends TestCase [ArrayFilterEvent::REVOKE_FOLLOW_CONTACT, 'revoke_follow'], [ArrayFilterEvent::BLOCK_CONTACT, 'block'], [ArrayFilterEvent::UNBLOCK_CONTACT, 'unblock'], + [ArrayFilterEvent::ADD_WORKER_TASK, 'proc_run'], ]; } diff --git a/tests/Unit/Event/ArrayFilterEventTest.php b/tests/Unit/Event/ArrayFilterEventTest.php index be576995c7..2afebba496 100644 --- a/tests/Unit/Event/ArrayFilterEventTest.php +++ b/tests/Unit/Event/ArrayFilterEventTest.php @@ -52,6 +52,7 @@ class ArrayFilterEventTest extends TestCase [ArrayFilterEvent::REVOKE_FOLLOW_CONTACT, 'friendica.data.revoke_follow_contact'], [ArrayFilterEvent::BLOCK_CONTACT, 'friendica.data.block_contact'], [ArrayFilterEvent::UNBLOCK_CONTACT, 'friendica.data.unblock_contact'], + [ArrayFilterEvent::ADD_WORKER_TASK, 'friendica.data.add_worker_task'], ]; }