Index: branches/5.3.x/core/units/helpers/csv_helper.php =================================================================== diff -u -N -r15483 -r15698 --- branches/5.3.x/core/units/helpers/csv_helper.php (.../csv_helper.php) (revision 15483) +++ branches/5.3.x/core/units/helpers/csv_helper.php (.../csv_helper.php) (revision 15698) @@ -1,6 +1,6 @@ Application->getUnitOption($prefix_elems[0], 'Grids'); - $grid_config = $grids[$export_data['grid']]['Fields']; + $prefix_elements = preg_split('/\.|_/', $export_data['prefix'], 2); + $grid_config = $this->_getGridColumns($prefix_elements[0], $export_data['grid']); $list_params = Array ('per_page' => $export_data['step'], 'grid' => $export_data['grid']); - $list = $this->Application->recallObject(rtrim(implode('.', $prefix_elems), '.'), $prefix_elems[0] . '_List', $list_params); + $list = $this->Application->recallObject(rtrim(implode('.', $prefix_elements), '.'), $prefix_elements[0] . '_List', $list_params); /* @var $list kDBList */ $list->SetPage($export_data['page']); @@ -75,7 +74,7 @@ $picker_helper = $this->Application->recallObject('ColumnPickerHelper'); /* @var $picker_helper kColumnPickerHelper */ - $picker_helper->ApplyPicker(rtrim(implode('.', $prefix_elems), '.'), $grid_config, $export_data['grid']); + $picker_helper->ApplyPicker(rtrim(implode('.', $prefix_elements), '.'), $grid_config, $export_data['grid']); if ( $first_step ) { // if UTF-16, write Unicode marker @@ -178,28 +177,33 @@ function ImportStart($filename) { - if(!file_exists($filename) || !is_file($filename)) return 'cant_open_file'; + if ( !file_exists($filename) || !is_file($filename) ) { + return 'cant_open_file'; + } - $import_data = Array(); + $import_data = Array (); $import_data['source_encoding'] = strtoupper(CHARSET); $import_data['encoding'] = $this->Application->ConfigValue('CSVExportEncoding') ? false : 'UTF-16LE'; $import_data['errors'] = ''; // convert file in case of UTF-16LE - if($import_data['source_encoding'] != $import_data['encoding']) { - copy($filename, $filename.'.orginal'); + if ( $import_data['source_encoding'] != $import_data['encoding'] ) { + copy($filename, $filename . '.orginal'); $file_content = file_get_contents($filename); $file = fopen($filename, 'w'); - fwrite($file, mb_convert_encoding(str_replace(chr(0xFF).chr(0xFE), '', $file_content), $import_data['source_encoding'], $import_data['encoding'])); + fwrite($file, mb_convert_encoding(str_replace(chr(0xFF) . chr(0xFE), '', $file_content), $import_data['source_encoding'], $import_data['encoding'])); fclose($file); - } $import_data['prefix'] = $this->PrefixSpecial; $import_data['grid'] = $this->grid; $import_data['file'] = $filename; $import_data['total_lines'] = count(file($filename)); - if(!$import_data['total_lines']) $import_data['total_lines'] = 1; + + if ( !$import_data['total_lines'] ) { + $import_data['total_lines'] = 1; + } + unset($file_content); $import_data['lines_processed'] = 0; $import_data['delimiter'] = $this->delimiter_mapping[(int)$this->Application->ConfigValue('CSVExportDelimiter')]; @@ -214,52 +218,78 @@ $headers = fgetcsv($file, 8192, $import_data['delimiter'], $import_data['enclosure']); fclose($file); - $prefix_elems = preg_split('/\.|_/', $import_data['prefix'], 2); - $grids = $this->Application->getUnitOption($prefix_elems[0], 'Grids'); - $grid_config = $grids[ $import_data['grid'] ]['Fields']; + $prefix_elements = preg_split('/\.|_/', $import_data['prefix'], 2); + $grid_config = $this->_getGridColumns($prefix_elements[0], $import_data['grid']); $field_list = Array(); - foreach($grid_config as $field_name => $field_data) { - if(isset($field_data['export_field'])) { + + foreach ($grid_config as $field_name => $field_data) { + if ( isset($field_data['export_field']) ) { $field_name = $field_data['export_field']; } + $field_title = isset($field_data['title']) ? $field_data['title'] : 'column:la_fld_' . $field_name; $field_label = $this->Application->Phrase($field_title); $field_pos = array_search($field_label, $headers); - if($field_pos !== false) { + + if ( $field_pos !== false ) { $field_list[$field_pos] = $field_name; } } - if(!count($field_list)) return 'no_matching_columns'; + if ( !count($field_list) ) { + return 'no_matching_columns'; + } + $import_data['field_list'] = $field_list; // getting key list - $field_positions = Array(); - $config_key_list = $this->Application->getUnitOption($prefix_elems[0], 'ImportKeys'); - if(!$config_key_list) $config_key_list = Array(); - array_unshift($config_key_list, Array($this->Application->getUnitOption($prefix_elems[0], 'IDField'))); + $field_positions = Array (); + $config = $this->Application->getUnitConfig($prefix_elements[0]); + $config_key_list = $config->getImportKeys(); - $key_list = Array(); - foreach($config_key_list as $arr_key => $import_key) { - $key_list[$arr_key] = is_array($import_key) ? $import_key : Array($import_key); + if ( !$config_key_list ) { + $config_key_list = Array (); + } - foreach($key_list[$arr_key] as $key_field) { + $key_list = Array (); + array_unshift($config_key_list, Array ($config->getIDField())); + + foreach ($config_key_list as $arr_key => $import_key) { + $key_list[$arr_key] = is_array($import_key) ? $import_key : Array ($import_key); + + foreach ($key_list[$arr_key] as $key_field) { $field_positions[$key_field] = array_search($key_field, $import_data['field_list']); - if($field_positions[$key_field] === false) { + if ( $field_positions[$key_field] === false ) { // no such key field combination in imported file unset($key_list[$arr_key]); break; } } } + $import_data['key_list'] = $key_list; $import_data['field_positions'] = $field_positions; $this->Application->StoreVar('import_data', serialize($import_data)); return true; } + /** + * Returns columns of given grid + * + * @param string $prefix + * @param string $grid_name + * @return Array + * @access protected + */ + protected function _getGridColumns($prefix, $grid_name) + { + $grid = $this->Application->getUnitConfig($prefix)->getGridByName($grid_name); + + return $grid['Fields']; + } + function ImportStep() { $import_data = unserialize($this->Application->RecallVar('import_data'));