25 lines
668 B
PHP
25 lines
668 B
PHP
|
|
<?php
|
||
|
|
enum Hook: string {
|
||
|
|
case CONTEXT_READY = 'context_ready';
|
||
|
|
case PROCESS_CONTENT = 'process_content';
|
||
|
|
case TEMPLATE_VARS = 'template_vars';
|
||
|
|
}
|
||
|
|
|
||
|
|
class Hooks {
|
||
|
|
private static array $filters = [];
|
||
|
|
|
||
|
|
public static function add(Hook $hook, callable $callback): void {
|
||
|
|
self::$filters[$hook->value][] = $callback;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static function apply(Hook $hook, mixed $value, mixed ...$args): mixed {
|
||
|
|
if (!isset(self::$filters[$hook->value])) return $value;
|
||
|
|
|
||
|
|
foreach (self::$filters[$hook->value] as $filter) {
|
||
|
|
$value = $filter($value, ...$args);
|
||
|
|
}
|
||
|
|
|
||
|
|
return $value;
|
||
|
|
}
|
||
|
|
}
|