fix Hook/hook.class.php and Hook/hook.extends.class.php
This commit is contained in:
parent
7714fa8211
commit
b2c656840c
4 changed files with 64 additions and 90 deletions
3
AvocadoEdition_Light/addons/sample/sample.addon.php
Normal file
3
AvocadoEdition_Light/addons/sample/sample.addon.php
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_'))
|
||||||
|
exit;
|
||||||
3
AvocadoEdition_Light/addons/sample/sample.config.php
Normal file
3
AvocadoEdition_Light/addons/sample/sample.config.php
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<?php
|
||||||
|
if (!defined('_GNUBOARD_'))
|
||||||
|
exit;
|
||||||
|
|
@ -123,10 +123,10 @@ class Hook
|
||||||
{
|
{
|
||||||
$that = self::getInstance(self::$id);
|
$that = self::getInstance(self::$id);
|
||||||
|
|
||||||
$that->callbacks[$tag][$priority][] = array(
|
$that->callbacks[$tag][$priority][] = [
|
||||||
'function' => $func,
|
'function' => $func,
|
||||||
'arguments' => $args,
|
'arguments' => $args,
|
||||||
);
|
];
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -143,7 +143,7 @@ class Hook
|
||||||
public static function addActions($actions)
|
public static function addActions($actions)
|
||||||
{
|
{
|
||||||
foreach ($actions as $arguments) {
|
foreach ($actions as $arguments) {
|
||||||
call_user_func_array(array(__CLASS__, 'addAction'), $arguments);
|
call_user_func_array([__CLASS__, 'addAction'], $arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -164,9 +164,9 @@ class Hook
|
||||||
* @param mixed $args → optional arguments
|
* @param mixed $args → optional arguments
|
||||||
* @param bool $remove → delete hook after executing actions
|
* @param bool $remove → delete hook after executing actions
|
||||||
*
|
*
|
||||||
* @return returns the output of the last action or false
|
* @return bool returns the output of the last action or false
|
||||||
*/
|
*/
|
||||||
public static function doAction($tag, $args = array(), $remove = true)
|
public static function doAction($tag, $args = [], $remove = true)
|
||||||
{
|
{
|
||||||
$that = self::getInstance(self::$id);
|
$that = self::getInstance(self::$id);
|
||||||
|
|
||||||
|
|
@ -252,24 +252,24 @@ class Hook
|
||||||
$function = $action['function'];
|
$function = $action['function'];
|
||||||
$argsNumber = $action['arguments'];
|
$argsNumber = $action['arguments'];
|
||||||
|
|
||||||
$class = (isset($function[0])) ? $function[0] : false;
|
$class = isset($function[0]) ? $function[0] : false;
|
||||||
$method = (isset($function[1])) ? $function[1] : false;
|
$method = isset($function[1]) ? $function[1] : false;
|
||||||
|
|
||||||
$args = $this->getArguments($argsNumber, $args);
|
$args = $this->getArguments($argsNumber, $args);
|
||||||
|
|
||||||
if (!($class && $method) && function_exists($function)) {
|
if (!($class && $method) && function_exists($function)) {
|
||||||
return call_user_func($function, $args);
|
return call_user_func($function, $args);
|
||||||
} elseif ($obj = call_user_func(array($class, $this->singleton))) {
|
} elseif ($obj = call_user_func([$class, $this->singleton])) {
|
||||||
if ($obj !== false) {
|
if ($obj !== false) {
|
||||||
return call_user_func_array(array($obj, $method), $args);
|
return call_user_func_array([$obj, $method], $args);
|
||||||
}
|
}
|
||||||
} elseif (class_exists($class)) {
|
} elseif (class_exists($class)) {
|
||||||
$instance = new $class;
|
$instance = new $class;
|
||||||
|
|
||||||
return call_user_func_array(array($instance, $method), $args);
|
return call_user_func_array([$instance, $method], $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -291,7 +291,7 @@ class Hook
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (isset($actions)) ? $actions : array();
|
return isset($actions) ? $actions : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -307,7 +307,7 @@ class Hook
|
||||||
protected function getArguments($argsNumber, $arguments)
|
protected function getArguments($argsNumber, $arguments)
|
||||||
{
|
{
|
||||||
if ($argsNumber == 1 && is_string($arguments)) {
|
if ($argsNumber == 1 && is_string($arguments)) {
|
||||||
return array($arguments);
|
return [$arguments];
|
||||||
} elseif ($argsNumber === count($arguments)) {
|
} elseif ($argsNumber === count($arguments)) {
|
||||||
return $arguments;
|
return $arguments;
|
||||||
}
|
}
|
||||||
|
|
@ -321,6 +321,6 @@ class Hook
|
||||||
return $args;
|
return $args;
|
||||||
}
|
}
|
||||||
|
|
||||||
return array();
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,8 @@ if (!defined('_GNUBOARD_'))
|
||||||
|
|
||||||
class GML_Hook extends Hook
|
class GML_Hook extends Hook
|
||||||
{
|
{
|
||||||
|
protected $filters = ['count' => 0];
|
||||||
protected $filters = array('count' => 0);
|
protected $callback_filters = [];
|
||||||
|
|
||||||
protected $callback_filters = array();
|
|
||||||
|
|
||||||
protected static $current_filter = false;
|
protected static $current_filter = false;
|
||||||
|
|
||||||
protected function runAction($action, $args)
|
protected function runAction($action, $args)
|
||||||
|
|
@ -16,77 +13,68 @@ class GML_Hook extends Hook
|
||||||
$function = $action['function'];
|
$function = $action['function'];
|
||||||
$argsNumber = $action['arguments'];
|
$argsNumber = $action['arguments'];
|
||||||
|
|
||||||
$class = (is_array($function) && isset($function[0])) ? $function[0] : false;
|
|
||||||
$method = (is_array($function) && isset($function[1])) ? $function[1] : false;
|
|
||||||
|
|
||||||
$args = $this->getArguments($argsNumber, $args);
|
$args = $this->getArguments($argsNumber, $args);
|
||||||
|
|
||||||
if (!($class && $method) && is_callable($function)) {
|
if (is_callable($function)) {
|
||||||
return call_user_func_array($function, $args);
|
return call_user_func_array($function, $args);
|
||||||
} elseif ($obj = call_user_func(array($class, $this->singleton))) {
|
} elseif (is_array($function) && isset($function[0], $function[1])) {
|
||||||
if ($obj !== false) {
|
$class = $function[0];
|
||||||
return call_user_func_array(array($obj, $method), $args);
|
$method = $function[1];
|
||||||
}
|
|
||||||
} elseif (class_exists($class)) {
|
|
||||||
$instance = new $class;
|
|
||||||
|
|
||||||
return call_user_func_array(array($instance, $method), $args);
|
if ($obj = call_user_func([$class, $this->singleton])) {
|
||||||
|
return $obj !== false ? call_user_func_array([$obj, $method], $args) : false;
|
||||||
|
} elseif (class_exists($class)) {
|
||||||
|
$instance = new $class();
|
||||||
|
return call_user_func_array([$instance, $method], $args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
protected function getFilters($tag, $remove)
|
protected function getFilters($tag, $remove)
|
||||||
{
|
{
|
||||||
if (isset($this->callback_filters[$tag])) {
|
$filters = isset($this->callback_filters[$tag]) ? $this->callback_filters[$tag] : [];
|
||||||
$filters = $this->callback_filters[$tag];
|
|
||||||
if ($remove) {
|
if ($remove) {
|
||||||
unset($this->callback_filters[$tag]);
|
unset($this->callback_filters[$tag]);
|
||||||
}
|
}
|
||||||
}
|
return $filters;
|
||||||
|
|
||||||
return (isset($filters)) ? $filters : array();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function get_properties($type, $is_callback = false)
|
public static function get_properties($type, $is_callback = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
$that = self::getInstance(self::$id);
|
$that = self::getInstance(self::$id);
|
||||||
|
|
||||||
if ($type === 'event') {
|
if ($type === 'event') {
|
||||||
return $is_callback ? $that->callbacks : $that->actions;
|
return $is_callback ? $that->callbacks : $that->actions;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $is_callback ? $that->callback_filters : $that->filters;
|
return $is_callback ? $that->callback_filters : $that->filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function addFilter($tag, $func, $priority = 8, $args = 0)
|
public static function addFilter($tag, $func, $priority = 8, $args = 0)
|
||||||
{
|
{
|
||||||
$that = self::getInstance(self::$id);
|
$that = self::getInstance(self::$id);
|
||||||
|
$that->callback_filters[$tag][$priority][] = [
|
||||||
$that->callback_filters[$tag][$priority][] = array(
|
|
||||||
'function' => $func,
|
'function' => $func,
|
||||||
'arguments' => $args,
|
'arguments' => $args,
|
||||||
);
|
];
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function apply_filters($tag, $args = array(), $remove = true)
|
public static function apply_filters($tag, $args = [], $remove = true)
|
||||||
{
|
{
|
||||||
$that = self::getInstance(self::$id);
|
$that = self::getInstance(self::$id);
|
||||||
|
|
||||||
self::$current_filter = $tag;
|
self::$current_filter = $tag;
|
||||||
|
|
||||||
$that->filters['count']++;
|
$that->filters['count']++;
|
||||||
|
|
||||||
if (!array_key_exists($tag, $that->filters)) {
|
if (!isset($that->filters[$tag])) {
|
||||||
$that->filters[$tag] = 0;
|
$that->filters[$tag] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$that->filters[$tag]++;
|
$that->filters[$tag]++;
|
||||||
|
|
||||||
$filters = $that->getFilters($tag, $remove);
|
$filters = $that->getFilters($tag, $remove);
|
||||||
ksort($filters);
|
ksort($filters);
|
||||||
|
|
||||||
$value = $args[0];
|
$value = isset($args[0]) ? $args[0] : null;
|
||||||
|
|
||||||
foreach ($filters as $priority) {
|
foreach ($filters as $priority) {
|
||||||
foreach ($priority as $filter) {
|
foreach ($priority as $filter) {
|
||||||
|
|
@ -94,74 +82,54 @@ class GML_Hook extends Hook
|
||||||
$args[0] = $value;
|
$args[0] = $value;
|
||||||
}
|
}
|
||||||
$replace = $that->runAction($filter, $args);
|
$replace = $that->runAction($filter, $args);
|
||||||
|
if ($replace !== false) {
|
||||||
if (!is_null($replace)) {
|
|
||||||
$value = $replace;
|
$value = $replace;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self::$current_filter = false;
|
self::$current_filter = false;
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getArguments($argsNumber, $arguments)
|
protected function getArguments($argsNumber, $arguments)
|
||||||
{
|
{
|
||||||
if ($argsNumber == 1 && is_string($arguments)) {
|
if ($argsNumber === 1 && is_string($arguments)) {
|
||||||
return array($arguments);
|
return [$arguments];
|
||||||
} elseif ($argsNumber === count($arguments)) {
|
}
|
||||||
|
|
||||||
|
if (is_array($arguments) && $argsNumber === count($arguments)) {
|
||||||
return $arguments;
|
return $arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
$args = array();
|
return array_slice((array) $arguments, 0, $argsNumber);
|
||||||
|
|
||||||
for ($i = 0; $i < $argsNumber; $i++) {
|
|
||||||
if (is_array($arguments) && array_key_exists($i, $arguments)) {
|
|
||||||
$args[] = $arguments[$i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $args;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function remove_filter($tag, $func, $priority)
|
public static function remove_filter($tag, $func, $priority)
|
||||||
{
|
{
|
||||||
$that = self::getInstance(self::$id);
|
$that = self::getInstance(self::$id);
|
||||||
|
return self::remove_callback($that->callback_filters, $tag, $func, $priority);
|
||||||
$is_remove = false;
|
|
||||||
|
|
||||||
if (isset($that->callback_filters[$tag]) && isset($that->callback_filters[$tag][$priority])) {
|
|
||||||
|
|
||||||
foreach ((array) $that->callback_filters[$tag][$priority] as $key => $value) {
|
|
||||||
if (isset($value['function']) && $value['function'] === $func) {
|
|
||||||
unset($that->callback_filters[$tag][$priority][$key]);
|
|
||||||
$is_remove = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $is_remove;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function remove_action($tag, $func, $priority)
|
public static function remove_action($tag, $func, $priority)
|
||||||
{
|
{
|
||||||
$that = self::getInstance(self::$id);
|
$that = self::getInstance(self::$id);
|
||||||
|
return self::remove_callback($that->callbacks, $tag, $func, $priority);
|
||||||
|
}
|
||||||
|
|
||||||
$is_remove = false;
|
private static function remove_callback(&$array, $tag, $func, $priority)
|
||||||
|
{
|
||||||
|
if (!isset($array[$tag][$priority])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($that->callbacks[$tag]) && isset($that->callbacks[$tag][$priority])) {
|
foreach ($array[$tag][$priority] as $key => $value) {
|
||||||
|
|
||||||
foreach ((array) $that->callbacks[$tag][$priority] as $key => $value) {
|
|
||||||
if (isset($value['function']) && $value['function'] === $func) {
|
if (isset($value['function']) && $value['function'] === $func) {
|
||||||
unset($that->callbacks[$tag][$priority][$key]);
|
unset($array[$tag][$priority][$key]);
|
||||||
$is_remove = true;
|
return true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $is_remove;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// end Hook Class;
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue