mirror of https://github.com/avecms/AVE.cms.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
3.0 KiB
175 lines
3.0 KiB
7 years ago
|
<?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;
|
||
|
}
|
||
|
}
|
||
|
}
|