From 8628985361efce156649aa7b6ce889e165aa1889 Mon Sep 17 00:00:00 2001 From: Yasen Pramatarov Date: Thu, 24 Apr 2025 13:25:30 +0300 Subject: [PATCH] Adds HookDispatcher core class for plugin hooks --- app/core/HookDispatcher.php | 53 +++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 app/core/HookDispatcher.php diff --git a/app/core/HookDispatcher.php b/app/core/HookDispatcher.php new file mode 100644 index 0000000..2078632 --- /dev/null +++ b/app/core/HookDispatcher.php @@ -0,0 +1,53 @@ +> + */ + private static array $hooks = []; + + /** + * Register a callback for a given hook. + */ + public static function register(string $hook, callable $callback): void + { + if (!isset(self::$hooks[$hook])) { + self::$hooks[$hook] = []; + } + self::$hooks[$hook][] = $callback; + } + + /** + * Dispatch all callbacks for the specified hook. + */ + public static function dispatch(string $hook, array $context = []): void + { + if (!empty(self::$hooks[$hook])) { + foreach (self::$hooks[$hook] as $callback) { + call_user_func($callback, $context); + } + } + } + + /** + * Apply filters for a hook key, passing a value through all callbacks. + * Each callback should accept the value and return a modified value. + * + * @param string $hook + * @param mixed $value + * @return mixed + */ + public static function applyFilters(string $hook, $value) + { + if (!empty(self::$hooks[$hook])) { + foreach (self::$hooks[$hook] as $callback) { + $value = call_user_func($callback, $value); + } + } + return $value; + } +}