diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 9a0293ac1..9e3c7807c 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -1207,9 +1207,9 @@ class ModuleHandler extends Handler $oModuleModel = getModel('module'); $triggers = $oModuleModel->getTriggers($trigger_name, $called_position); - if(!$triggers || count($triggers) < 1) + if(!$triggers) { - return new Object(); + $triggers = array(); } //store before trigger call time @@ -1252,6 +1252,17 @@ class ModuleHandler extends Handler unset($oModule); } + $trigger_functions = $oModuleModel->getTriggerFunctions($trigger_name, $called_position); + foreach($trigger_functions as $item) + { + $item($obj); + + if(is_object($output) && method_exists($output, 'toBool') && !$output->toBool()) + { + return $output; + } + } + return new Object(); } diff --git a/modules/module/module.controller.php b/modules/module/module.controller.php index 8a7f1e9d5..b23ca03e7 100644 --- a/modules/module/module.controller.php +++ b/modules/module/module.controller.php @@ -60,6 +60,19 @@ class moduleController extends module return $output; } + /** + * @brief Add trigger callback function + * + * @param string $trigger_name + * @param string $called_position + * @param callable $callback_function + */ + function addTriggerFunction($trigger_name, $called_position, $callback_function) + { + $GLOBALS['__trigger_functions__'][$trigger_name][$called_position][] = $callback_function; + return true; + } + /** * @brief Add module trigger * module trigger is to call a trigger to a target module diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 5b8b27853..b04529b74 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -625,6 +625,21 @@ class moduleModel extends module } } + /** + * @brief Get trigger functions + */ + function getTriggerFunctions($trigger_name, $called_position) + { + if(isset($GLOBALS['__trigger_functions__'][$trigger_name][$called_position])) + { + return $GLOBALS['__trigger_functions__'][$trigger_name][$called_position]; + } + else + { + return array(); + } + } + /** * @brief Get a list of all triggers on the trigger_name */