Merge pull request #186 from kijin/pr/triggers-from-everywhere

애드온 등에서 트리거에 콜백 함수를 등록할 수 있도록 허용
This commit is contained in:
Kijin Sung 2016-02-01 16:37:00 +09:00
commit 66994d35dc
3 changed files with 41 additions and 2 deletions

View file

@ -1207,9 +1207,9 @@ class ModuleHandler extends Handler
$oModuleModel = getModel('module'); $oModuleModel = getModel('module');
$triggers = $oModuleModel->getTriggers($trigger_name, $called_position); $triggers = $oModuleModel->getTriggers($trigger_name, $called_position);
if(!$triggers || count($triggers) < 1) if(!$triggers)
{ {
return new Object(); $triggers = array();
} }
//store before trigger call time //store before trigger call time
@ -1252,6 +1252,17 @@ class ModuleHandler extends Handler
unset($oModule); 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(); return new Object();
} }

View file

@ -60,6 +60,19 @@ class moduleController extends module
return $output; 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 * @brief Add module trigger
* module trigger is to call a trigger to a target module * module trigger is to call a trigger to a target module

View file

@ -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 * @brief Get a list of all triggers on the trigger_name
*/ */