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.1 KiB
175 lines
3.1 KiB
<?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; |
|
} |
|
} |
|
} |
|
?>
|