Index: trunk/core/kernel/event_manager.php =================================================================== diff -u -N -r3834 -r3845 --- trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 3834) +++ trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 3845) @@ -313,23 +313,46 @@ * * @param kEvent $event * @param int $mode hBEFORE or hAFTER + * @return Array */ - function processHooks(&$event, $mode) + function &getHooks(&$event, $mode, $special = null) { + $event_key = !isset($special) ? $event->Prefix_Special : $event->Prefix.'.'.$special; + if ($mode == hBEFORE) { $mode_hooks =& $this->beforeHooks; } else { $mode_hooks =& $this->afterHooks; } - if ( $hooks = getArrayValue($mode_hooks, strtolower($event->Prefix_Special.'.'.$event->Name)) ) { - foreach($hooks as $hook) - { - $prefix_special = rtrim($hook['DoPrefix'].'_'.$hook['DoSpecial'],'_'); - if( $hook['Conditional'] && !$this->Application->GetVar($prefix_special) ) continue; + + $hooks = getArrayValue($mode_hooks, strtolower($event_key.'.'.$event->Name)); + if (!$hooks) { + $hooks = Array(); + } + return $hooks; + } + + /** + * Enter description here... + * + * @param kEvent $event + * @param int $mode hBEFORE or hAFTER + */ + function processHooks(&$event, $mode) + { + // * - get hooks that are valid with any special of given prefix + $hooks = array_merge_recursive2($this->getHooks($event, $mode, '*'), $this->getHooks($event, $mode)); + + if ($hooks) { + foreach ($hooks as $hook) { + $prefix_special = rtrim($hook['DoPrefix'].'_'.$hook['DoSpecial'], '_'); + if ( $hook['Conditional'] && !$this->Application->GetVar($prefix_special) ) { + continue; + } + $hook_event = new kEvent( Array('name'=>$hook['DoEvent'],'prefix'=>$hook['DoPrefix'],'special'=>$hook['DoSpecial']) ); $hook_event->MasterEvent =& $event; - $this->HandleEvent($hook_event); } }