|
|
|
<?php
|
|
|
|
|
|
|
|
// Проверка
|
|
|
|
if (! defined('BASE_DIR'))
|
|
|
|
exit('Access denied');
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This source file is part of the AVE.cms. More information,
|
|
|
|
* documentation and tutorials can be found at http://www.ave-cms.ru
|
|
|
|
*
|
|
|
|
* @package AVE.cms
|
|
|
|
* @file system/helpers/hooks.php
|
|
|
|
* @author @
|
|
|
|
* @copyright 2007-2016 (c) AVE.cms
|
|
|
|
* @link http://www.ave-cms.ru
|
|
|
|
* @version 4.0
|
|
|
|
* @since $date$
|
|
|
|
* @license license GPL v.2 http://www.ave-cms.ru/license.txt
|
|
|
|
*/
|
|
|
|
|
|
|
|
class Hooks
|
|
|
|
{
|
|
|
|
public static $instance;
|
|
|
|
|
|
|
|
public static $hooks;
|
|
|
|
|
|
|
|
public static $current_hook;
|
|
|
|
|
|
|
|
public static $run_hooks;
|
|
|
|
|
|
|
|
|
|
|
|
public static function init()
|
|
|
|
{
|
|
|
|
if (!self::$instance) {
|
|
|
|
self::$instance = new Hooks();
|
|
|
|
}
|
|
|
|
return self::$instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add Hook
|
|
|
|
*/
|
|
|
|
public static function register($name, $function, $priority = 10)
|
|
|
|
{
|
|
|
|
// If we have already registered this action return true
|
|
|
|
if (isset(self::$hooks[$name][$priority][$function]))
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Allows us to iterate through multiple action hooks.
|
|
|
|
*/
|
|
|
|
if (is_array($name))
|
|
|
|
{
|
|
|
|
foreach ($name AS $item)
|
|
|
|
{
|
|
|
|
// Store the action hook in the $hooks array
|
|
|
|
self::$hooks[$item][$priority][$function] = array(
|
|
|
|
"function" => $function
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// Store the action hook in the $hooks array
|
|
|
|
self::$hooks[$name][$priority][$function] = array(
|
|
|
|
"function" => $function
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Do Hook
|
|
|
|
*/
|
|
|
|
public static function trigger($name, $arguments = "")
|
|
|
|
{
|
|
|
|
// Oh, no you didn't. Are you trying to run an action hook that doesn't exist?
|
|
|
|
if (! isset(self::$hooks[$name]))
|
|
|
|
{
|
|
|
|
return $arguments;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set the current running hook to this
|
|
|
|
self::$current_hook = $name;
|
|
|
|
|
|
|
|
// Key sort our action hooks
|
|
|
|
ksort(self::$hooks[$name]);
|
|
|
|
foreach (self::$hooks[$name] AS $priority => $names)
|
|
|
|
{
|
|
|
|
if (is_array($names))
|
|
|
|
{
|
|
|
|
foreach ($names AS $name)
|
|
|
|
{
|
|
|
|
$return = call_user_func_array($name['function'], array(
|
|
|
|
&$arguments
|
|
|
|
));
|
|
|
|
|
|
|
|
if ($return)
|
|
|
|
{
|
|
|
|
$arguments = $return;
|
|
|
|
}
|
|
|
|
|
|
|
|
self::$run_hooks[$name][$priority];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
self::$current_hook = '';
|
|
|
|
|
|
|
|
return $arguments;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Remove Hook
|
|
|
|
*/
|
|
|
|
public static function unregister($name, $function, $priority = 10)
|
|
|
|
{
|
|
|
|
// If the action hook doesn't, just return true
|
|
|
|
if (!isset(self::$hooks[$name][$priority][$function]))
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
// Remove the action hook from our hooks array
|
|
|
|
unset(self::$hooks[$name][$priority][$function]);
|
|
|
|
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Current Hook
|
|
|
|
*
|
|
|
|
* Get the currently running action hook
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function current()
|
|
|
|
{
|
|
|
|
return self::$current_hook;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Has Run
|
|
|
|
*/
|
|
|
|
public static function has($hook, $priority = 10)
|
|
|
|
{
|
|
|
|
if (isset(self::$hooks[$hook][$priority]))
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hook Exists
|
|
|
|
*/
|
|
|
|
public static function exists($name)
|
|
|
|
{
|
|
|
|
if (isset(self::$hooks[$name]))
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
?>
|