54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace App\Core;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class HookDispatcher
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Stores all registered hooks and their callbacks.
							 | 
						||
| 
								 | 
							
								     * @var array<string, array<callable>>
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |