Index: trunk/core/kernel/application.php =================================================================== diff -u -N -r3685 -r3845 --- trunk/core/kernel/application.php (.../application.php) (revision 3685) +++ trunk/core/kernel/application.php (.../application.php) (revision 3845) @@ -1571,17 +1571,17 @@ return $current_prefix; } - function EmailEventAdmin($email_event_name, $to_user_id = -1, $send_params = false) + function &EmailEventAdmin($email_event_name, $to_user_id = -1, $send_params = false) { return $this->EmailEvent($email_event_name, 1, $to_user_id, $send_params); } - function EmailEventUser($email_event_name, $to_user_id = -1, $send_params = false) + function &EmailEventUser($email_event_name, $to_user_id = -1, $send_params = false) { return $this->EmailEvent($email_event_name, 0, $to_user_id, $send_params); } - function EmailEvent($email_event_name, $email_event_type, $to_user_id = -1, $send_params = false) + function &EmailEvent($email_event_name, $email_event_type, $to_user_id = -1, $send_params = false) { $event = new kEvent('emailevents:OnEmailEvent'); $event->setEventParam('EmailEventName', $email_event_name); Index: trunk/core/kernel/utility/temp_handler.php =================================================================== diff -u -N -r3703 -r3845 --- trunk/core/kernel/utility/temp_handler.php (.../temp_handler.php) (revision 3703) +++ trunk/core/kernel/utility/temp_handler.php (.../temp_handler.php) (revision 3845) @@ -119,7 +119,8 @@ 'Prefix' => $prefix, 'TableId' => $this->TableIdCounter++, ); - + $this->FinalRefs[ $tables['TableName'] ] = $tables['TableId']; // don't forget to add main table to FinalRefs too + $SubItems = $this->Application->getUnitOption($prefix,'SubItems'); if (is_array($SubItems)) { foreach ($SubItems as $prefix) { @@ -287,7 +288,7 @@ $sub_ids = $this->Conn->GetCol($query); - $parent_key = $object->GetDBField($sub_table['ParentTableKey']); + $parent_key = $object->GetDBField(is_array($sub_table['ParentTableKey']) ? $sub_table['ParentTableKey'][$prefix] : $sub_table['ParentTableKey']); $this->DeleteItems($sub_table['Prefix'], '', $sub_ids, $sub_table, $parent_key); } 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); } }