Index: branches/5.1.x/core/kernel/utility/temp_handler.php =================================================================== diff -u -N -r12657 -r13086 --- branches/5.1.x/core/kernel/utility/temp_handler.php (.../temp_handler.php) (revision 12657) +++ branches/5.1.x/core/kernel/utility/temp_handler.php (.../temp_handler.php) (revision 13086) @@ -1,6 +1,6 @@ RaiseEvent('OnBeforeClone', $master['Prefix'], $special, Array($object->GetId()), $foreign_key); } + $object->inCloning = true; $res = $mode == 'update' ? $object->Update() : $object->Create(); + $object->inCloning = false; if ($res) { @@ -319,6 +321,8 @@ $foreign_key_field = is_array($sub_table['ForeignKey']) ? $sub_table['ForeignKey'][$master['Prefix']] : $sub_table['ForeignKey']; $parent_key_field = is_array($sub_table['ParentTableKey']) ? $sub_table['ParentTableKey'][$master['Prefix']] : $sub_table['ParentTableKey']; + if (!$foreign_key_field || !$parent_key_field) continue; + $query = 'SELECT '.$sub_table['IdField'].' FROM '.$sub_TableName.' WHERE '.$foreign_key_field.' = '.$original_values[$parent_key_field]; if (isset($sub_table['Constrain'])) $query .= ' AND '.$sub_table['Constrain']; @@ -751,16 +755,24 @@ $event->setEventParam('foreign_key', $foreign_key); } - foreach($ids as $id) - { + $set_temp_id = ($name == 'OnAfterCopyToLive') && (!is_array($add_params) || !array_key_exists('temp_id', $add_params)); + + foreach($ids as $index => $id) { $event->setEventParam('id', $id); + + if ($set_temp_id) { + $event->setEventParam('temp_id', $index); + } + if (is_array($add_params)) { foreach ($add_params as $name => $val) { $event->setEventParam($name, $val); } } + $this->Application->HandleEvent($event); } + return $event->status == erSUCCESS; }