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'] == '*') {