Index: trunk/core/units/general/cat_dbitem_export.php =================================================================== diff -u -r3698 -r3709 --- trunk/core/units/general/cat_dbitem_export.php (.../cat_dbitem_export.php) (revision 3698) +++ trunk/core/units/general/cat_dbitem_export.php (.../cat_dbitem_export.php) (revision 3709) @@ -389,6 +389,7 @@ $records = $this->Conn->Query( $this->getExportSQL() ); $records_exported = 0; foreach ($records as $record_info) { + $this->curItem->Clear(); $this->curItem->SetDBFieldsFromHash($record_info); $this->setCurrentID(); $this->curItem->raiseEvent('OnAfterItemLoad', $this->curItem->GetID() ); @@ -630,7 +631,7 @@ WHERE (c.ParentPath LIKE "'.$parent_path.'%") AND '.$where_clause; $item_id = $this->Conn->GetOne($sql); } - $save_method = $tmp_item->Load($item_id) ? 'Update' : 'Create'; + $save_method = $item_id && $tmp_item->Load($item_id) ? 'Update' : 'Create'; } $resource_id = $tmp_item->isLoaded() ? $tmp_item->GetDBField('ResourceId') : 0; Index: trunk/kernel/units/general/cat_event_handler.php =================================================================== diff -u -r3698 -r3709 --- trunk/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3698) +++ trunk/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3709) @@ -39,7 +39,7 @@ //recalling by different name, because we may get kDBList, if we recall just by prefix $object =& $this->Application->recallObject($event->getPrefixSpecial().'.item', $event->Prefix); - $this->prepareObject($object, $event); +// $this->prepareObject($object, $event); if ($this->Application->RecallVar($event->getPrefixSpecial().'_clipboard_mode') == 'copy') { $ids_arr = explode(',', $ids); @@ -533,6 +533,34 @@ } } + /** + * Load price from temp table if product mode is temp table + * + * @param kEvent $event + */ + function OnAfterItemLoad(&$event) + { + $special = substr($event->Special, -6); + if ($special == 'import' || $special == 'export') { + $object =& $event->getObject(); + $image_data = $object->getPrimaryImageData(); + + if ($image_data) { + $thumbnail_image = $image_data[$image_data['LocalThumb'] ? 'ThumbPath' : 'ThumbUrl']; + if ($image_data['SameImages']) { + $full_image = ''; + } + else { + $full_image = $image_data[$image_data['LocalImage'] ? 'LocalPath' : 'Url']; + } + $object->SetDBField('ThumbnailImage', $thumbnail_image); + $object->SetDBField('FullImage', $full_image); + $object->SetDBField('ImageAlt', $image_data['AltName']); + } + } + + } + function OnAfterItemUpdate(&$event) { $this->CalculateHotLimit($event); @@ -1511,7 +1539,9 @@ */ function getCustomExportColumns(&$event) { - return Array(); + return Array( '__VIRTUAL__ThumbnailImage' => 'ThumbnailImage', + '__VIRTUAL__FullImage' => 'FullImage', + '__VIRTUAL__ImageAlt' => 'ImageAlt'); } /** @@ -1521,9 +1551,67 @@ */ function setCustomExportColumns(&$event) { -// $object =& $event->getObject(); + $this->restorePrimaryImage($event); } + /** + * Create/Update primary image record in info found in imported data + * + * @param kEvent $event + */ + function restorePrimaryImage(&$event) + { + $object =& $event->getObject(); + + $has_image_info = $object->GetDBField('ImageAlt') && ($object->GetDBField('ThumbnailImage') || $object->GetDBField('FullImage')); + if (!$has_image_info) { + return false; + } + + $image_data = $object->getPrimaryImageData(); + + $image =& $this->Application->recallObject('img', null, Array('skip_autoload' => true)); + if ($image_data) { + $image->Load($image_data['ImageId']); + } + else { + $image->Clear(); + $image->SetDBField('Name', 'main'); + $image->SetDBField('DefaultImg', 1); + $image->SetDBField('ResourceId', $object->GetDBField('ResourceId')); + } + + $image->SetDBField('AltName', $object->GetDBField('ImageAlt')); + + if ($object->GetDBField('ThumbnailImage')) { + $thumbnail_field = $this->isURL( $object->GetDBField('ThumbnailImage') ) ? 'ThumbUrl' : 'ThumbPath'; + $image->SetDBField($thumbnail_field, $object->GetDBField('ThumbnailImage') ); + $image->SetDBField('LocalThumb', $thumbnail_field == 'ThumbPath' ? 1 : 0); + } + + if (!$object->GetDBField('FullImage')) { + $image->SetDBField('SameImages', 1); + } + else { + $image->SetDBField('SameImages', 0); + $full_field = $this->isURL( $object->GetDBField('FullImage') ) ? 'Url' : 'LocalPath'; + $image->SetDBField($full_field, $object->GetDBField('FullImage') ); + $image->SetDBField('LocalImage', $thumbnail_field == 'LocalPath' ? 1 : 0); + } + + if ($image->isLoaded()) { + $image->Update(); + } + else { + $image->Create(); + } + } + + function isURL($path) + { + return preg_match('#(http|https)://(.*)#', $path); + } + // ImportLocalFilename function getExportField($field_key) Index: trunk/core/units/general/cat_event_handler.php =================================================================== diff -u -r3698 -r3709 --- trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3698) +++ trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3709) @@ -39,7 +39,7 @@ //recalling by different name, because we may get kDBList, if we recall just by prefix $object =& $this->Application->recallObject($event->getPrefixSpecial().'.item', $event->Prefix); - $this->prepareObject($object, $event); +// $this->prepareObject($object, $event); if ($this->Application->RecallVar($event->getPrefixSpecial().'_clipboard_mode') == 'copy') { $ids_arr = explode(',', $ids); @@ -533,6 +533,34 @@ } } + /** + * Load price from temp table if product mode is temp table + * + * @param kEvent $event + */ + function OnAfterItemLoad(&$event) + { + $special = substr($event->Special, -6); + if ($special == 'import' || $special == 'export') { + $object =& $event->getObject(); + $image_data = $object->getPrimaryImageData(); + + if ($image_data) { + $thumbnail_image = $image_data[$image_data['LocalThumb'] ? 'ThumbPath' : 'ThumbUrl']; + if ($image_data['SameImages']) { + $full_image = ''; + } + else { + $full_image = $image_data[$image_data['LocalImage'] ? 'LocalPath' : 'Url']; + } + $object->SetDBField('ThumbnailImage', $thumbnail_image); + $object->SetDBField('FullImage', $full_image); + $object->SetDBField('ImageAlt', $image_data['AltName']); + } + } + + } + function OnAfterItemUpdate(&$event) { $this->CalculateHotLimit($event); @@ -1511,7 +1539,9 @@ */ function getCustomExportColumns(&$event) { - return Array(); + return Array( '__VIRTUAL__ThumbnailImage' => 'ThumbnailImage', + '__VIRTUAL__FullImage' => 'FullImage', + '__VIRTUAL__ImageAlt' => 'ImageAlt'); } /** @@ -1521,9 +1551,67 @@ */ function setCustomExportColumns(&$event) { -// $object =& $event->getObject(); + $this->restorePrimaryImage($event); } + /** + * Create/Update primary image record in info found in imported data + * + * @param kEvent $event + */ + function restorePrimaryImage(&$event) + { + $object =& $event->getObject(); + + $has_image_info = $object->GetDBField('ImageAlt') && ($object->GetDBField('ThumbnailImage') || $object->GetDBField('FullImage')); + if (!$has_image_info) { + return false; + } + + $image_data = $object->getPrimaryImageData(); + + $image =& $this->Application->recallObject('img', null, Array('skip_autoload' => true)); + if ($image_data) { + $image->Load($image_data['ImageId']); + } + else { + $image->Clear(); + $image->SetDBField('Name', 'main'); + $image->SetDBField('DefaultImg', 1); + $image->SetDBField('ResourceId', $object->GetDBField('ResourceId')); + } + + $image->SetDBField('AltName', $object->GetDBField('ImageAlt')); + + if ($object->GetDBField('ThumbnailImage')) { + $thumbnail_field = $this->isURL( $object->GetDBField('ThumbnailImage') ) ? 'ThumbUrl' : 'ThumbPath'; + $image->SetDBField($thumbnail_field, $object->GetDBField('ThumbnailImage') ); + $image->SetDBField('LocalThumb', $thumbnail_field == 'ThumbPath' ? 1 : 0); + } + + if (!$object->GetDBField('FullImage')) { + $image->SetDBField('SameImages', 1); + } + else { + $image->SetDBField('SameImages', 0); + $full_field = $this->isURL( $object->GetDBField('FullImage') ) ? 'Url' : 'LocalPath'; + $image->SetDBField($full_field, $object->GetDBField('FullImage') ); + $image->SetDBField('LocalImage', $thumbnail_field == 'LocalPath' ? 1 : 0); + } + + if ($image->isLoaded()) { + $image->Update(); + } + else { + $image->Create(); + } + } + + function isURL($path) + { + return preg_match('#(http|https)://(.*)#', $path); + } + // ImportLocalFilename function getExportField($field_key) Index: trunk/core/units/general/cat_dbitem.php =================================================================== diff -u -r3617 -r3709 --- trunk/core/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 3617) +++ trunk/core/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 3709) @@ -355,6 +355,27 @@ } return $columns; } + + /** + * Returns item's primary image data + * + * @return Array + */ + function getPrimaryImageData() + { + $sql = 'SELECT * + FROM '.TABLE_PREFIX.'Images + WHERE (ResourceId = '.$this->GetDBField('ResourceId').') AND (DefaultImg = 1)'; + $image_data = $this->Conn->GetRow($sql); + if (!$image_data) { + // 2. no primary image, then get image with name "main" + $sql = 'SELECT * + FROM '.TABLE_PREFIX.'Images + WHERE (ResourceId = '.$this->GetDBField('ResourceId').') AND (Name = "main")'; + $image_data = $this->Conn->GetRow($sql); + } + return $image_data; + } } ?> \ No newline at end of file Index: trunk/kernel/units/general/cat_dbitem.php =================================================================== diff -u -r3617 -r3709 --- trunk/kernel/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 3617) +++ trunk/kernel/units/general/cat_dbitem.php (.../cat_dbitem.php) (revision 3709) @@ -355,6 +355,27 @@ } return $columns; } + + /** + * Returns item's primary image data + * + * @return Array + */ + function getPrimaryImageData() + { + $sql = 'SELECT * + FROM '.TABLE_PREFIX.'Images + WHERE (ResourceId = '.$this->GetDBField('ResourceId').') AND (DefaultImg = 1)'; + $image_data = $this->Conn->GetRow($sql); + if (!$image_data) { + // 2. no primary image, then get image with name "main" + $sql = 'SELECT * + FROM '.TABLE_PREFIX.'Images + WHERE (ResourceId = '.$this->GetDBField('ResourceId').') AND (Name = "main")'; + $image_data = $this->Conn->GetRow($sql); + } + return $image_data; + } } ?> \ No newline at end of file Index: trunk/core/kernel/utility/event.php =================================================================== diff -u -r3368 -r3709 --- trunk/core/kernel/utility/event.php (.../event.php) (revision 3368) +++ trunk/core/kernel/utility/event.php (.../event.php) (revision 3709) @@ -70,7 +70,7 @@ * @var bool * @access public */ - var $SkipBeforeHooks=false; + var $SkipBeforeHooks = false; /** * Do not execute After hooks @@ -79,7 +79,7 @@ * @var bool * @access public */ - var $SkipAfterHooks=false; + var $SkipAfterHooks = false; /** * Redirect is allowed after @@ -88,7 +88,7 @@ * @var bool * @access public */ - var $redirect=false; + var $redirect = true; /** @@ -97,23 +97,23 @@ * @var bool * @access public */ - var $redirect_params=null; + var $redirect_params = null; /** * php file to redirect to * * @var string * @access public */ - var $redirect_script=null; + var $redirect_script = null; /** * Event processing result * * @var int * @access public */ - var $status=erSUCCESS; + var $status = erSUCCESS; /** * Each event specific only params, @@ -122,7 +122,7 @@ * @var Array * @access public */ - var $specificParams=Array(); + var $specificParams = Array(); /** * Pseudo class used to create object, @@ -131,7 +131,7 @@ * @var string * @access public */ - var $pseudoClass=''; + var $pseudoClass = ''; /** * Create event based on params passed Index: trunk/kernel/units/general/cat_dbitem_export.php =================================================================== diff -u -r3698 -r3709 --- trunk/kernel/units/general/cat_dbitem_export.php (.../cat_dbitem_export.php) (revision 3698) +++ trunk/kernel/units/general/cat_dbitem_export.php (.../cat_dbitem_export.php) (revision 3709) @@ -389,6 +389,7 @@ $records = $this->Conn->Query( $this->getExportSQL() ); $records_exported = 0; foreach ($records as $record_info) { + $this->curItem->Clear(); $this->curItem->SetDBFieldsFromHash($record_info); $this->setCurrentID(); $this->curItem->raiseEvent('OnAfterItemLoad', $this->curItem->GetID() ); @@ -630,7 +631,7 @@ WHERE (c.ParentPath LIKE "'.$parent_path.'%") AND '.$where_clause; $item_id = $this->Conn->GetOne($sql); } - $save_method = $tmp_item->Load($item_id) ? 'Update' : 'Create'; + $save_method = $item_id && $tmp_item->Load($item_id) ? 'Update' : 'Create'; } $resource_id = $tmp_item->isLoaded() ? $tmp_item->GetDBField('ResourceId') : 0;