Index: trunk/core/units/general/cat_event_handler.php =================================================================== diff -u -N -r4231 -r4243 --- trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 4231) +++ trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 4243) @@ -1323,13 +1323,15 @@ if (!$items_info) { $items_info = unserialize( $this->Application->RecallVar($event->getPrefixSpecial().'_ItemsInfo') ); + $this->Application->SetVar($event->getPrefixSpecial(true), $items_info); } list($item_id, $field_values) = each($items_info); $object =& $event->getObject( Array('skip_autoload' => true) ); $object->SetFieldsFromHash($field_values); $field_values['ImportFilename'] = $object->GetDBField('ImportFilename'); //if upload formatter has renamed the file during moving !!! + $object->setID($item_id); $this->setRequiredFields($event); @@ -1348,77 +1350,42 @@ $field_values['ExportColumns'] = $field_values['ExportColumns'] ? explode('|', substr($field_values['ExportColumns'], 1, -1) ) : Array(); $field_values['start_from'] = 0; - $this->Application->StoreVar($event->getPrefixSpecial().'_options', serialize($field_values) ); - + $export_object->saveOptions($event, $field_values); + if( $export_object->verifyOptions($event) ) { - $this->doExport($event); + $event->redirect = $this->getModuleFolder($event).'/'.$event->Special.'_progress'; + } else { + // make uploaded file local & change source selection + $filename = getArrayValue($field_values, 'ImportFilename'); + if ($filename) { + $this->updateImportFiles($event); + $object->SetDBField('ImportSource', 2); + $field_values['ImportSource'] = 2; + $object->SetDBField('ImportLocalFilename', $filename); + $field_values['ImportLocalFilename'] = $filename; + $export_object->saveOptions($event, $field_values); + } + $event->status = erFAIL; $event->redirect = false; } } - + /** * Enter description here... * * @param kEvent $event */ - function doExport(&$event) + function OnExportCancel(&$event) { - if ($event->Name == 'OnExportBegin') - { - $done_percent = 0; - } - else { - $export_options = unserialize($this->Application->RecallVar($event->getPrefixSpecial().'_options')); - $done_percent = round($export_options['start_from'] * 100 / $export_options['total_records'], 0); - } - - $block_params = Array( 'name' => $this->getModuleFolder($event).'/'.$event->Special.'_progress', - 'percent_done' => $done_percent, - 'percent_left' => 100 - $done_percent); - - $this->Application->InitParser(); - $this->Application->setUnitOption($event->Prefix, 'AutoLoad', false); - echo $this->Application->ParseBlock($block_params); - flush(); - - $export_object =& $this->Application->recallObject('CatItemExportHelper'); - - $action_method = 'perform'.ucfirst($event->Special); - $field_values = $export_object->$action_method($event); - - if ($field_values['start_from'] == $field_values['total_records']) - { - if ($event->Special == 'import') { - $this->Application->StoreVar('PermCache_UpdateRequired', 1); - $event->SetRedirectParam('index_file', 'category/category_maint.php'); - } - else { - $event->redirect = $this->getModuleFolder($event).'/'.$event->Special.'_finish'; - } - } - else { - $event->redirect = $this->getModuleFolder($event).'/'.$event->Special.'_progress'; - $redirect_params = Array($event->getPrefixSpecial().'_event' => 'OnExportProgress', 'pass' => 'm,'.$event->getPrefixSpecial(), 'rand' => rand(0,1000000)); - $event->setRedirectParams($redirect_params); - } + $this->OnGoBack($event); } - + /** - * Next export steps - * - * @param kEvent $event - */ - function OnExportProgress(&$event) - { - $this->doExport($event); - } - - /** * Sets correct available & export fields * * @param kEvent $event @@ -1487,25 +1454,39 @@ $options['options'] = $available_columns; $object->SetFieldOptions('AvailableColumns', $options); - if ($event->Special == 'import') - { - $import_filenames = Array(); + $this->updateImportFiles($event); + } - if ($folder_handle = opendir(EXPORT_PATH)) { - while (false !== ($file = readdir($folder_handle))) { - if (is_dir(EXPORT_PATH.'/'.$file) || substr($file, 0, 1) == '.' || strtolower($file) == 'cvs' || strtolower($file) == 'dummy' || filesize(EXPORT_PATH.'/'.$file) == 0) continue; + /** + * Updates uploaded files list + * + * @param kEvent $event + */ + function updateImportFiles(&$event) + { + if ($event->Special != 'import') { + return false; + } + + $object =& $event->getObject(); + + $import_filenames = Array(); - $file_size = formatSize( filesize(EXPORT_PATH.'/'.$file) ); - $import_filenames[$file] = $file.' ('.$file_size.')'; - } - closedir($folder_handle); + if ($folder_handle = opendir(EXPORT_PATH)) { + while (false !== ($file = readdir($folder_handle))) { + if (is_dir(EXPORT_PATH.'/'.$file) || substr($file, 0, 1) == '.' || strtolower($file) == 'cvs' || strtolower($file) == 'dummy' || filesize(EXPORT_PATH.'/'.$file) == 0) continue; + + $file_size = formatSize( filesize(EXPORT_PATH.'/'.$file) ); + $import_filenames[$file] = $file.' ('.$file_size.')'; } - $options = $object->GetFieldOptions('ImportLocalFilename'); - $options['options'] = $import_filenames; - $object->SetFieldOptions('ImportLocalFilename', $options); + closedir($folder_handle); } + + $options = $object->GetFieldOptions('ImportLocalFilename'); + $options['options'] = $import_filenames; + $object->SetFieldOptions('ImportLocalFilename', $options); } - + /** * Returns specific to each item type columns only * @@ -1710,6 +1691,15 @@ $event->redirect = false; $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); if ($items_info) { + list($id, $field_values) = each($items_info); + + $object =& $event->getObject( Array('skip_autoload' => true) ); + $object->SetFieldsFromHash($field_values); + $field_values['ImportFilename'] = $object->GetDBField('ImportFilename'); //if upload formatter has renamed the file during moving !!! + $field_values['ImportSource'] = 2; + $field_values['ImportLocalFilename'] = $object->GetDBField('ImportFilename'); + $items_info[$id] = $field_values; + $this->Application->StoreVar($event->getPrefixSpecial().'_ItemsInfo', serialize($items_info)); } }