diff --git a/doc/Addons.md b/doc/Addons.md index 50febf7214..bf139aea7f 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -693,6 +693,9 @@ Here is a complete list of all hook callbacks with file locations (as of 24-Sep- Addon::callHooks('logged_in', $a->user); +### src/Core/Hook.php + + self::callSingle(self::getApp(), 'hook_fork', $fork_hook, $hookdata); ### src/Core/Worker.php diff --git a/src/Core/Hook.php b/src/Core/Hook.php index a0200a7db3..2d6c945067 100644 --- a/src/Core/Hook.php +++ b/src/Core/Hook.php @@ -136,6 +136,22 @@ class Hook extends BaseObject { if (array_key_exists($name, self::$hooks)) { foreach (self::$hooks[$name] as $hook) { + // Call a hook to check if this hook call needs to be forked + if (array_key_exists('hook_fork', self::$hooks)) { + $hookdata = ['name' => $name, 'data' => $data, 'execute' => true]; + + foreach (self::$hooks['hook_fork'] as $fork_hook) { + if ($hook[0] != $fork_hook[0]) { + continue; + } + self::callSingle(self::getApp(), 'hook_fork', $fork_hook, $hookdata); + } + + if (!$hookdata['execute']) { + continue; + } + } + Worker::add($priority, 'ForkHook', $name, $hook, $data); } }