Index: branches/5.2.x/core/kernel/kbase.php =================================================================== diff -u -N -r14605 -r14608 --- branches/5.2.x/core/kernel/kbase.php (.../kbase.php) (revision 14605) +++ branches/5.2.x/core/kernel/kbase.php (.../kbase.php) (revision 14608) @@ -1,6 +1,6 @@ parentEvent =& $event; + } + + /** * Set object' TableName to LIVE table, defined in unit config * * @access public Index: branches/5.2.x/core/kernel/db/dbitem.php =================================================================== diff -u -N -r14596 -r14608 --- branches/5.2.x/core/kernel/db/dbitem.php (.../dbitem.php) (revision 14596) +++ branches/5.2.x/core/kernel/db/dbitem.php (.../dbitem.php) (revision 14608) @@ -1,6 +1,6 @@ GetID(); - $event = new kEvent( Array('name'=>$name,'prefix'=>$this->Prefix,'special'=>$this->Special) ); - $event->setEventParam('id', $id); + $event = new kEvent( $this->getPrefixSpecial() . ':' . $name ); - if ($additional_params) { - foreach ($additional_params as $ap_name => $ap_value) { - $event->setEventParam($ap_name, $ap_value); - } + if ( is_object($this->parentEvent) ) { + $event->MasterEvent =& $this->parentEvent; } + $additional_params['id'] = isset($id) ? $id : $this->GetID(); + + foreach ($additional_params as $ap_name => $ap_value) { + $event->setEventParam($ap_name, $ap_value); + } + $this->Application->HandleEvent($event); - return $event->status == kEvent::erSUCCESS ? true : false; + + return $event->status == kEvent::erSUCCESS; } /** Index: branches/5.2.x/core/kernel/db/db_event_handler.php =================================================================== diff -u -N -r14597 -r14608 --- branches/5.2.x/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 14597) +++ branches/5.2.x/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 14608) @@ -1,6 +1,6 @@ Configure( $event->getEventParam('populate_ml_fields') || $this->Application->getUnitOption($event->Prefix, 'PopulateMlFields'), $form_name ); $this->PrepareObject($object, $event); + $parent_event = $event->getEventParam('parent_event'); + + if ( is_object($parent_event) ) { + $object->setParentEvent($parent_event); + } + // force live table if specified or is original item $live_table = $event->getEventParam('live_table') || $event->Special == 'original'; @@ -1025,7 +1031,7 @@ // always add forced sorting before any user sorting fields $forced_sorting = getArrayValue($list_sortings, $sorting_prefix, 'ForcedSorting'); /* @var $forced_sorting Array */ - + if ($forced_sorting) { foreach ($forced_sorting as $field => $dir) { $object->AddOrderField($field, $dir); @@ -1135,10 +1141,10 @@ if ( $view_filter ) { $view_filter = unserialize($view_filter); - + $temp_filter =& $this->Application->makeClass('kMultipleFilter'); /* @var $temp_filter kMultipleFilter */ - + $filter_menu = $this->Application->getUnitOption($event->Prefix, 'FilterMenu'); $group_key = 0; @@ -1405,7 +1411,7 @@ /* @var $object kDBItem */ $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); - + if ( $items_info ) { foreach ($items_info as $id => $field_values) { $object->Load($id); @@ -1805,7 +1811,7 @@ if ( $this->isNewItemCreate($event) ) { $event->CallSubEvent('OnPreSaveCreated'); - + if ( is_object($event->MasterEvent) ) { $event->MasterEvent->setEventParam('IsNew', true); } @@ -1980,7 +1986,7 @@ // just reset id to 0 in case it was create $object =& $event->getObject( Array ('skip_autoload' => true) ); /* @var $object kDBItem */ - + $object->setID(0); $this->Application->SetVar($event->getPrefixSpecial() . '_id', 0); } @@ -2413,7 +2419,7 @@ /** * Sets view filter based on request - * + * * @param kEvent $event * @return void * @access protected @@ -2434,7 +2440,7 @@ list($id, $value) = explode('=', $a_filter); $view_filter[$id] = $value; } - + $this->Application->StoreVar($event->getPrefixSpecial() . '_view_filter', serialize($view_filter)); $event->redirect = false; } @@ -2498,7 +2504,7 @@ $cdata->SetDBField('ResourceId', $resource_id); $cdata->Create(); } - + $this->Application->SetVar($cdata->getPrefixSpecial() . '_id', $cdata->GetID()); } Index: branches/5.2.x/core/kernel/utility/event.php =================================================================== diff -u -N -r14437 -r14608 --- branches/5.2.x/core/kernel/utility/event.php (.../event.php) (revision 14437) +++ branches/5.2.x/core/kernel/utility/event.php (.../event.php) (revision 14608) @@ -1,6 +1,6 @@ Application->hasObject($this->prefixSpecial) ) { + $top_event =& $this; + + // when OnSave calls OnPreSave in first line, then this would make sure OnSave is used + while ( is_object($top_event->MasterEvent) ) { + $top_event =& $top_event->MasterEvent; + } + + $params['parent_event'] =& $top_event; + } + $object =& $this->Application->recallObject($this->prefixSpecial, $this->pseudoClass, $params); return $object;