Index: kernel/db/db_event_handler.php =================================================================== --- kernel/db/db_event_handler.php (revision 13571) +++ kernel/db/db_event_handler.php (working copy) @@ -1150,15 +1150,12 @@ $this->customProcessing($event,'before'); //look at kDBItem' Create for ForceCreateId description, it's rarely used and is NOT set by default - if( $object->Create($event->getEventParam('ForceCreateId')) ) - { - if( $object->IsTempTable() ) $object->setTempID(); + if ( $object->Create($event->getEventParam('ForceCreateId')) ) { $this->customProcessing($event,'after'); $event->status=erSUCCESS; $event->redirect_params = Array('opener'=>'u'); } - else - { + else { $event->status = erFAIL; $event->redirect = false; $this->Application->SetVar($event->Prefix_Special.'_SaveEvent','OnCreate'); @@ -2165,9 +2162,6 @@ if ($is_new) { $object->Create(); - if (!$is_main && $object->IsTempTable()) { - $object->setTempID(); - } } else { $object->Update(); Index: kernel/db/dbitem.php =================================================================== --- kernel/db/dbitem.php (revision 13573) +++ kernel/db/dbitem.php (working copy) @@ -916,6 +916,12 @@ if ($this->mode != 't') { $this->Application->resetCounters($this->TableName); } + + if ($this->IsTempTable() && ($this->Application->GetTopmostPrefix($this->Prefix) != $this->Prefix)) { + // temp table + subitem = set negative id + $this->setTempID(); + } + $this->raiseEvent('OnAfterItemCreate'); $this->Loaded = true; @@ -1287,15 +1293,7 @@ $cdata->SetDBField($ml_formatter->LangFieldName('cust_'.$custom_id, $force_primary), $this->GetDBField('cust_'.$custom_name)); } - if ($cdata->isLoaded()) { - $ret = $cdata->Update(); - } - else { - $ret = $cdata->Create(); - if ($cdata->mode == 't') $cdata->setTempID(); - } - - return $ret; + return $cdata->isLoaded() ? $cdata->Update() : $cdata->Create(); } /** Index: kernel/utility/temp_handler.php =================================================================== --- kernel/utility/temp_handler.php (revision 13571) +++ kernel/utility/temp_handler.php (working copy) @@ -305,9 +305,7 @@ // remember original => clone mapping for dual ForeignKey updating $this->AlreadyProcessed[$master['TableName']][$id] = $object->GetId(); } - if ($object->mode == 't') { - $object->setTempID(); - } + if ($mode == 'create') { $this->RaiseEvent('OnAfterClone', $master['Prefix'], $special, Array($object->GetId()), $foreign_key, array('original_id' => $id) ); $this->saveID($master['Prefix'], $special, $object->GetID()); Index: units/helpers/brackets_helper.php =================================================================== --- units/helpers/brackets_helper.php (revision 13571) +++ units/helpers/brackets_helper.php (working copy) @@ -291,9 +291,7 @@ $object->SetFieldsFromHash($values); $object->SetDBField($linked_info['ForeignKey'], $linked_info['ParentId']); - if( $object->Create() ) - { - $object->setTempID(); + if ($object->Create()) { $event->status = erSUCCESS; } } Index: units/helpers/controls/edit_picker_helper.php =================================================================== --- units/helpers/controls/edit_picker_helper.php (revision 13571) +++ units/helpers/controls/edit_picker_helper.php (working copy) @@ -154,10 +154,6 @@ $object->SetDBField($foreign_key, $main_id); $object->SetDBField($sub_prefix_field, $add_id); $object->Create(); - - if ($object->IsTempTable()) { - $object->setTempID(); - } } } } Index: units/selectors/selectors_event_handler.php =================================================================== --- units/selectors/selectors_event_handler.php (revision 13571) +++ units/selectors/selectors_event_handler.php (working copy) @@ -178,18 +178,16 @@ if($items_info) { list($id,$field_values) = each($items_info); - if($id == 0) - { + if ($id == 0) { $parent_id = getArrayValue($field_values,'ParentId'); if($parent_id) $object->Load($parent_id); $object->SetFieldsFromHash($field_values); $object->Create(); - if( $object->IsTempTable() ) $object->setTempID(); + $this->Application->SetVar($event->getPrefixSpecial().'_id', $object->GetID() ); } - else - { + else { $object->Load($id); $object->SetFieldsFromHash($field_values); $object->Update();