Files
myaac/system/src/Hooks.php
slawkens 4145d9eb3c Fix: Clear hooks on plugin uninstall
Fixes error with gesior-shop-system clear-cache.php being called, despite it's removed
2026-04-11 17:49:22 +02:00

76 lines
1.3 KiB
PHP

<?php
namespace MyAAC;
class Hooks
{
private static array $_hooks = [];
public function register($hook, $type = '', $file = null): void
{
if(!($hook instanceof Hook))
$hook = new Hook($hook, $type, $file);
self::$_hooks[$hook->type()][] = $hook;
}
public function unregister($name, $type, $file): void
{
if (is_string($type)) {
$type = constant($type);
}
if(!isset(self::$_hooks[$type])) {
return;
}
foreach(self::$_hooks[$type] as $id => $hook) {
if($name == $hook->name()
&& $type == $hook->type()
&& $file == $hook->file()
) {
unset(self::$_hooks[$type][$id]);
}
}
}
public function trigger($type, $params = []): bool
{
$ret = true;
if(isset(self::$_hooks[$type])) {
foreach(self::$_hooks[$type] as $name => $hook) {
/** @var Hook $hook */
if (!$hook->execute($params)) {
$ret = false;
}
}
}
return $ret;
}
public function triggerFilter($type, &$args): void
{
if(isset(self::$_hooks[$type])) {
foreach(self::$_hooks[$type] as $hook) {
/** @var Hook $hook */
$hook->executeFilter($args);
}
}
}
public function exist($type): bool {
return isset(self::$_hooks[$type]);
}
public function load(): void
{
foreach(Plugins::getHooks() as $hook) {
$this->register($hook['name'], $hook['type'], $hook['file']);
}
Plugins::clearWarnings();
}
}