Index: branches/RC/core/kernel/event_manager.php =================================================================== diff -u -r10893 -r11403 --- branches/RC/core/kernel/event_manager.php (.../event_manager.php) (revision 10893) +++ branches/RC/core/kernel/event_manager.php (.../event_manager.php) (revision 11403) @@ -78,8 +78,8 @@ parent::kBase(); $this->Conn =& $this->Application->GetADODBConnection(); } - + /** * Returns information about registered regular events * @@ -122,8 +122,8 @@ return $agents; } } - + /** * Set's new enviroment parameter mappings * between their names as application vars @@ -481,8 +481,7 @@ function registerHook($hookto_prefix, $hookto_special, $hookto_event, $mode, $do_prefix, $do_special, $do_event, $conditional) { - if( !$this->Application->prefixRegistred($hookto_prefix) ) - { + if ( !$this->Application->prefixRegistred($hookto_prefix) && $hookto_prefix != '*' ) { if ($this->Application->isDebugMode()) { trigger_error('Prefix '.$hookto_prefix.' doesn\'t exist when trying to hook from '.$do_prefix.':'.$do_event.'', E_USER_WARNING); } @@ -512,11 +511,12 @@ * * @param kEvent $event * @param int $mode hBEFORE or hAFTER + * @param string $event_key * @return Array */ - function &getHooks(&$event, $mode, $special = null) + function &_getHooks(&$event, $mode, $event_key = null) { - $event_key = !isset($special) ? $event->Prefix_Special : $event->Prefix.'.'.$special; + $event_key = isset($event_key) ? $event_key : $event->Prefix_Special; if ($mode == hBEFORE) { $mode_hooks =& $this->beforeHooks; @@ -529,6 +529,7 @@ $hooks = array(); return $hooks; } + return $mode_hooks[strtolower($event_key.'.'.$event->Name)]; } @@ -541,8 +542,20 @@ function processHooks(&$event, $mode) { // * - get hooks that are valid with any special of given prefix - $hooks = array_merge($this->getHooks($event, $mode, '*'), $this->getHooks($event, $mode)); + $hooks = array_merge( + // given prefix, any special + $this->_getHooks($event, $mode, $event->Prefix.'.*'), + // given special, given special + $this->_getHooks($event, $mode), + + // any prefix, any special + $this->_getHooks($event, $mode, '*.*'), + + // any prefix, given special + $this->_getHooks($event, $mode, rtrim('*.' . $event->Special, '.')) + ); + if ($hooks) { foreach ($hooks as $hook) { if ($hook['DoSpecial'] == '*') {