Index: trunk/core/kernel/db/db_event_handler.php =================================================================== diff -u -r4287 -r4309 --- trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 4287) +++ trunk/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 4309) @@ -817,6 +817,25 @@ */ function OnCancel(&$event) { + $object =& $event->getObject(Array('skip_autoload' => true)); + + $items_info = $this->Application->GetVar($event->getPrefixSpecial(true)); + if ($items_info) { + $delete_ids = Array(); + $temp =& $this->Application->recallObject($event->getPrefixSpecial().'_TempHandler', 'kTempTablesHandler'); + foreach ($items_info as $id => $field_values) { + $object->Load($id); + // record created for using with selector (e.g. Reviews->Select User), and not validated => Delete it + if ($object->isLoaded() && !$object->Validate()) { + $delete_ids[] = $id; + } + } + + if ($delete_ids) { + $temp->DeleteItems($event->Prefix, $event->Special, $delete_ids); + } + } + $event->redirect_params = Array('opener'=>'u'); } @@ -1297,8 +1316,10 @@ } $pass_events = $event->getEventParam('pass_events'); - $new_level = 'index4.php|'.ltrim($this->Application->BuildEnv($t, Array('m_opener' => 'u'), 'all', $pass_events), ENV_VAR_NAME.'='); - array_push($opener_stack,$new_level); + $redirect_params = array_merge_recursive2($event->redirect_params, Array('m_opener' => 'u', '__URLENCODE__' => 1)); + + $new_level = 'index4.php|'.ltrim($this->Application->BuildEnv($t, $redirect_params, 'all', $pass_events), ENV_VAR_NAME.'='); + array_push($opener_stack, $new_level); $this->Application->StoreVar('opener_stack',serialize($opener_stack)); } @@ -1619,6 +1640,42 @@ $this->Application->setUnitOption($main_prefix.'.', 'CalculatedFields', $calculated_fields); $this->Application->setUnitOption($main_prefix, 'VirtualFields', $virtual_fields); } + + /** + * Saves selected user in needed field + * + * @param kEvent $event + */ + function OnSelectUser(&$event) + { + $items_info = $this->Application->GetVar('u'); + if ($items_info) { + $user_id = array_shift( array_keys($items_info) ); + + $object =& $event->getObject(); + $this->RemoveRequiredFields($object); + + $is_new = !$object->isLoaded(); + + if ($is_new) { + $new_event = $this->Application->GetVar($event->Prefix.'_mode' == 't') ? 'OnPreCreate' : 'OnNew'; + $event->CallSubEvent($new_event); + } + + $object->SetDBField($this->Application->RecallVar('dst_field'), $user_id); + + if ($is_new) { + $object->Create(); + if ($object->IsTempTable()) $object->setTempID(); + } + else { + $object->Update(); + } + } + + $event->SetRedirectParam($event->getPrefixSpecial().'_id', $object->GetID()); + $this->finalizePopup($event); + } }