AVE.CMS v3.28
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

8 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;
}
}
}