Fix: Try to filter by context, use the test with $currentcontext in

method for avoid to run twice (I have not found any other solution!)
This commit is contained in:
Regis Houssin 2014-09-29 15:20:54 +02:00
parent 334cdf7dca
commit 3d82f0965e

View File

@ -156,6 +156,8 @@ class HookManager
{
if (! empty($modules))
{
$modulealreadyexecuted[$context]=array(); // Filter by context
foreach($modules as $module => $actionclassinstance)
{
//print "Before hook ".get_class($actionclassinstance)." method=".$method." hooktype=".$hooktype." results=".count($actionclassinstance->results)." resprints=".count($actionclassinstance->resprints)." resaction=".$resaction." result=".$result."<br>\n";
@ -164,8 +166,8 @@ class HookManager
// jump to next class if method does not exists
if (! method_exists($actionclassinstance,$method)) continue;
// test to avoid to run twice a hook, when a module implements several active contexts
if (in_array($module,$modulealreadyexecuted)) continue;
$modulealreadyexecuted[$module]=$module;
if (in_array($module,$modulealreadyexecuted[$context])) continue;
$modulealreadyexecuted[$context][$module]=$module; // Use the $currentcontext in method for avoid to run twice
// Add current context for avoid method execution in bad context, you can add this test in your method : eg if($currentcontext != 'formfile') return;
$parameters['currentcontext'] = $context;
// Hooks that must return int (hooks with type 'addreplace')