Index: branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php =================================================================== diff -u -N -r14092 -r14095 --- branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php (.../cat_dbitem_export_helper.php) (revision 14092) +++ branches/5.2.x/core/units/helpers/cat_dbitem_export_helper.php (.../cat_dbitem_export_helper.php) (revision 14095) @@ -1,6 +1,6 @@ cacheTable = TABLE_PREFIX.'ImportCache'; } @@ -146,19 +147,21 @@ * Fill required fields with dummy values * * @param kEvent $event + * @param kCatDBItem $object + * @param bool $set_status */ function fillRequiredFields(&$event, &$object, $set_status = false) { if ($object == $this->false) { $object =& $event->getObject(); + /* @var $object kCatDBItem */ } $has_empty = false; - $fields = array_keys($object->Fields); - foreach ($fields as $field_name) - { - $field_options =& $object->Fields[$field_name]; - if (isset($object->VirtualFields[$field_name]) || !getArrayValue($field_options, 'required') ) continue; + $fields = $object->getFields(); + + foreach ($fields as $field_name => $field_options) { + if ($object->isVirtualField($field_name) || !getArrayValue($field_options, 'required') ) continue; if ( $object->GetDBField($field_name) ) continue; $formatter_class = getArrayValue($field_options, 'formatter'); @@ -194,6 +197,8 @@ $this->fillRequiredFields($event, $this->false); $object =& $event->getObject(); + /* @var $object kDBItem */ + $cross_unique_fields = Array('FieldsSeparatedBy', 'FieldsEnclosedBy'); if (($object->GetDBField('CategoryFormat') == 1) || ($event->Special == 'import')) // in one field { @@ -206,7 +211,9 @@ // check if cross unique fields has no same values foreach ($cross_unique_fields as $field_index => $field_name) { - if (getArrayValue($object->FieldErrors, $field_name, 'pseudo') == 'required') continue; + if ($object->GetErrorPseudo($field_name) == 'required') { + continue; + } $check_fields = $cross_unique_fields; unset($check_fields[$field_index]); @@ -254,7 +261,9 @@ else { // 1.1. check that all required fields are present in imported file $missing_columns = Array(); - foreach ($object->Fields as $field_name => $field_options) { + $fields = $object->getFields(); + + foreach ($fields as $field_name => $field_options) { if ($object->skipField($field_name)) continue; if (getArrayValue($field_options, 'required') && !in_array($field_name, $this->exportOptions['ExportColumns']) ) { $missing_columns[] = $field_name; @@ -293,9 +302,11 @@ $check_fields = $this->exportOptions['DuplicateCheckFields'] ? explode('|', substr($this->exportOptions['DuplicateCheckFields'], 1, -1)) : Array(); $object =& $event->getObject(); + $fields = $object->getFields(); $language_id = $this->Application->GetDefaultLanguageId(); + foreach ($check_fields as $index => $check_field) { - foreach ($object->Fields as $field_name => $field_options) { + foreach ($fields as $field_name => $field_options) { if ($field_name == 'l'.$language_id.'_'.$check_field) { $check_fields[$index] = 'l'.$language_id.'_'.$check_field; break; @@ -546,10 +557,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() ); + $this->curItem->LoadFromHash($record_info); $data_array = Array(); foreach ($this->exportFields as $export_field) @@ -570,7 +578,10 @@ function getItemFields() { // just in case dummy user selected automtic mode & moved columns too :( - return array_merge($this->curItem->Fields['AvailableColumns']['options'], $this->curItem->Fields['ExportColumns']['options']); + $src_options = $this->curItem->GetFieldOption('ExportColumns', 'options'); + $dst_options = $this->curItem->GetFieldOption('AvailableColumns', 'options'); + + return array_merge($dst_options, $src_options); } /** @@ -707,10 +718,9 @@ $this->curItem->SetField($field_name, $value); } - $pseudo_error = getArrayValue($this->curItem->FieldErrors, $field_name, 'pseudo'); - if ($pseudo_error) { + if ( $this->curItem->GetErrorPseudo($field_name) ) { $this->curItem->SetDBField($field_name, null); - unset($this->curItem->FieldErrors[$field_name]); + $this->curItem->RemoveError($field_name); } } @@ -891,12 +901,12 @@ $this->fillRequiredFields($this->false, $this->curItem, true); } -// $sql_start = getmicrotime(); +// $sql_start = microtime(true); if (!$this->curItem->$save_method()) { $this->Application->SetVar('m_cat_id', $backup_category_id); return false; } -// $sql_end = getmicrotime(); +// $sql_end = microtime(true); // $this->saveLog('SQL ['.$save_method.'] Time: '.($sql_end - $sql_start).'s'); if ($load_keys && ($save_method == 'Create') && $this->exportOptions['ReplaceDuplicates']) { @@ -1139,7 +1149,7 @@ */ function writeRecord($fields_hash) { - fputcsv2($this->filePointer, $fields_hash, $this->exportOptions['FieldsSeparatedBy'], $this->exportOptions['FieldsEnclosedBy'], $this->getLineSeparator() ); + kUtil::fputcsv($this->filePointer, $fields_hash, $this->exportOptions['FieldsSeparatedBy'], $this->exportOptions['FieldsEnclosedBy'], $this->getLineSeparator() ); } function readRecord() @@ -1169,7 +1179,7 @@ { $object =& $event->getObject( Array('skip_autoload' => true) ); - if (!array_key_exists('ExportColumns', $object->Fields)) { + if ( !$object->isField('ExportColumns') ) { // import/export prefix was used (see kDBEventHandler::prepareObject) but object don't plan to be imported/exported return ; } @@ -1192,19 +1202,21 @@ } // db fields - foreach ($object->Fields as $field_name => $field_options) - { - if (!$object->skipField($field_name)) - { + $fields = $object->getFields(); + + foreach ($fields as $field_name => $field_options) { + if ( !$object->skipField($field_name) ) { $available_columns[$field_name] = $field_name.(getArrayValue($field_options, 'required') ? '*' : ''); } } $handler =& $this->Application->recallObject($event->Prefix.'_EventHandler'); - $available_columns = array_merge_recursive2($available_columns, $handler->getCustomExportColumns($event)); + $available_columns = array_merge($available_columns, $handler->getCustomExportColumns($event)); // custom fields - foreach ($object->customFields as $custom_id => $custom_name) + $custom_fields = $object->getCustomFields(); + + foreach ($custom_fields as $custom_id => $custom_name) { $available_columns['__CUSTOM__'.$custom_name] = $custom_name; } @@ -1300,7 +1312,7 @@ 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) ); + $file_size = kUtil::formatSize( filesize(EXPORT_PATH.'/'.$file) ); $import_filenames[$file] = $file.' ('.$file_size.')'; } closedir($folder_handle); @@ -1348,8 +1360,6 @@ $object->setID($item_id); $this->setRequiredFields($event); - $export_object =& $this->Application->recallObject('CatItemExportHelper'); - // save export/import options if ($event->Special == 'export') { @@ -1367,9 +1377,9 @@ $this->Application->HandleEvent($nevent, $event->Prefix.':OnBeforeExportBegin', array('options'=>$field_values)); $field_values = $nevent->getEventParam('options'); - $export_object->saveOptions($event, $field_values); + $this->saveOptions($event, $field_values); - if( $export_object->verifyOptions($event) ) + if( $this->verifyOptions($event) ) { if ($this->_getExportSavePreset($object)) { $name = $object->GetDBField('ExportPresetName'); @@ -1385,7 +1395,7 @@ $this->Application->RemoveVar('export_progress_t'); } else { - $progress_t = $export_object->getModuleName($event).'/'.$event->Special.'_progress'; + $progress_t = $this->getModuleName($event).'/'.$event->Special.'_progress'; } $event->redirect = $progress_t; @@ -1402,15 +1412,15 @@ // make uploaded file local & change source selection $filename = getArrayValue($field_values, 'ImportFilename'); if ($filename) { - $export_object->updateImportFiles($event); + $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); + $this->saveOptions($event, $field_values); } - $event->status = erFAIL; + $event->status = kEvent::erFAIL; $event->redirect = false; } } @@ -1423,7 +1433,7 @@ */ function _getExportSavePreset(&$object) { - if (!array_key_exists('ExportSavePreset', $object->Fields)) { + if ( !$object->isField('ExportSavePreset') ) { return ''; } @@ -1454,7 +1464,7 @@ $used_field = $import_source[ $object->GetDBField('ImportSource') ]; $required_fields[$event->Special][] = $used_field; - $object->Fields[$used_field]['error_field'] = 'ImportSource'; + $object->SetFieldOption($used_field, 'error_field', 'ImportSource'); if ($object->GetDBField('FieldTitles') == 2) $required_fields[$event->Special][] = 'ExportColumns'; // manual field titles }