Index: trunk/core/units/general/cat_event_handler.php =================================================================== diff -u -N -r8705 -r8719 --- trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8705) +++ trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 8719) @@ -1898,6 +1898,9 @@ $owner_field = $this->getOwnerField($event->Prefix); + $image_helper =& $this->Application->recallObject('ImageHelper'); + /* @var $image_helper ImageHelper */ + foreach ($items_info as $id => $field_values) { $object->Load($id); $edit_perm = $perm_helper->ModifyCheckPermission($object->GetDBField($owner_field), $object->GetDBField('CategoryId'), $event->Prefix); @@ -1906,11 +1909,13 @@ // pending editing enabled + not pending copy -> get/create pending copy & save changes to it $original_id = $object->GetID(); $original_resource_id = $object->GetDBField('ResourceId'); + $image_helper->PreserveItemImages($field_values); $object->Load($original_id, 'OrgId'); if (!$object->isLoaded()) { // 1. user has no pending copy of live item -> clone live item $cloned_ids = $temp_handler->CloneItems($event->Prefix, $event->Special, Array($original_id), null, null, null, true); + $object->Load($cloned_ids[0]); $object->SetFieldsFromHash($field_values); Index: trunk/core/kernel/db/dbitem.php =================================================================== diff -u -N -r8563 -r8719 --- trunk/core/kernel/db/dbitem.php (.../dbitem.php) (revision 8563) +++ trunk/core/kernel/db/dbitem.php (.../dbitem.php) (revision 8719) @@ -83,6 +83,16 @@ } /** + * Sets original field value (useful for custom virtual fields) + * + * @param string $field_name + */ + function SetOriginalField($field_name, $field_value) + { + $this->OriginalFieldValues[$field_name] = $field_value; + } + + /** * Set's default values for all fields * * @param bool $populate_ml_fields create all ml fields from db in config or not Index: trunk/core/units/general/helpers/image_helper.php =================================================================== diff -u -N -r8705 -r8719 --- trunk/core/units/general/helpers/image_helper.php (.../image_helper.php) (revision 8705) +++ trunk/core/units/general/helpers/image_helper.php (.../image_helper.php) (revision 8719) @@ -208,11 +208,13 @@ if ($item_image['DefaultImg'] == 1 || $item_image['Name'] == 'main') { // process primary image separately $object->SetDBField('PrimaryImage', $image_path); + $object->SetOriginalField('PrimaryImage', $image_path); $object->Fields['PrimaryImage']['original_field'] = $item_image['Name']; continue; } $object->SetDBField('Image'.$image_counter, $image_path); + $object->SetOriginalField('Image'.$image_counter, $image_path); $object->Fields['Image'.$image_counter]['original_field'] = $item_image['Name']; $image_counter++; } @@ -276,6 +278,23 @@ $i++; } } + + /** + * Preserves cloned item images to be rewrited with original item images + * + * @param Array $field_values + */ + function PreserveItemImages(&$field_values) + { + foreach ($field_values as $field_name => $field_value) { + if (!is_array($field_value)) continue; + + if (isset($field_value['upload']) && ($field_value['error'] == UPLOAD_ERR_NO_FILE)) { + // this is upload field, but nothing was uploaded this time + unset($field_values[$field_name]); + } + } + } } ?> \ No newline at end of file