protected function finish($filename) { $cleanup = !!$this->getRequest()->post('cleanup'); if ($cleanup && !$this->emulate()) { if (!empty($this->data['processed_count'][self::STAGE_PRODUCT])) { $params = array('type' => 'CSV'); switch ($this->data['direction']) { case 'import': $action = 'catalog_import'; break; case 'export': $action = 'catalog_export'; break; } if (!empty($action)) { $this->logAction($action, $params); } } if ($this->reader) { $this->reader->delete(true); } } return $cleanup; }
protected function save(waRequestFile $file) { $path = wa()->getTempPath('csv/upload/'); waFiles::create($path); $original_name = $file->name; if ($name = tempnam($path, 'csv')) { unlink($name); if (($ext = pathinfo($original_name, PATHINFO_EXTENSION)) && preg_match('/^\\w+$/', $ext)) { $name .= '.' . $ext; } $file->moveTo($name); } else { throw new waException(_w('Error file upload')); } $encoding = waRequest::post('encoding', 'UTF-8'); $delimiter = waRequest::post('delimiter'); try { $this->reader = new shopCsvReader($name, $delimiter, $encoding); $delimiters = array(';', ',', 'tab'); $used_delimiters = array($delimiter); while (count($this->reader->header()) < 2 && ($delimiter = array_diff($delimiters, $used_delimiters))) { $delimiter = reset($delimiter); $used_delimiters[] = $delimiter; $this->reader->delete(); $this->reader = new shopCsvReader($name, $delimiter, $encoding); } if (count($this->reader->header()) < 2) { $this->reader->delete(); $delimiter = waRequest::post('delimiter'); $this->reader = new shopCsvReader($name, $delimiter, $encoding); } $encodings = array('UTF-8', 'Windows-1251', 'ISO-8859-1'); $used_encodings = array($encoding); while (in_array(false, (array) $this->reader->header(), true) && ($encoding = array_diff($encodings, $used_encodings))) { $encoding = reset($encoding); $used_encodings[] = $encoding; $this->reader->delete(); $this->reader = new shopCsvReader($name, $delimiter, $encoding); } if (in_array(false, (array) $this->reader->header(), true) || count($this->reader->header()) < 2) { throw new waException($this->reader->header() ? _w('No data columns were located in the uploaded file. Make sure right separator and encoding were chosen for this upload.') : _w('Unsupported CSV file structure')); } $profile_helper = new shopImportexportHelper('csv:product:import'); $profile = $profile_helper->getConfig(); $profile['config'] += array('encoding' => $encoding, 'delimiter' => ';', 'map' => array()); $params = array(); $params['id'] = 'csvproducts'; $params['title_wrapper'] = '%s'; $params['description_wrapper'] = '<br><span class="hint">%s</span>'; $params['control_wrapper'] = '<div class="field"><div class="name">%s</div><div class="value">%s %s</div></div>'; $params['options'] = $this->options(); $control = true ? shopCsvReader::TABLE_CONTROL : shopCsvReader::MAP_CONTROL; switch ($control) { case shopCsvReader::TABLE_CONTROL: $params['preview'] = 50; $params['columns'] = array(array('shopCsvProductviewController', 'tableRowHandler'), ' '); $params['control_wrapper'] = '<div class="field"><div class="value" style="overflow-x:auto;margin-left:0;">%s %s</div></div>'; $params['title_wrapper'] = false; $params['row_handler'] = 'csv_product/rows/'; $params['row_handler_string'] = true; $params['autocomplete_handler'] = 'csv_product/autocomplete/reset/'; break; case shopCsvReader::MAP_CONTROL: default: $control = shopCsvReader::MAP_CONTROL; break; } return array('name' => htmlentities(basename($this->reader->file()), ENT_QUOTES, 'utf-8'), 'original_name' => htmlentities(basename($original_name), ENT_QUOTES, 'utf-8'), 'size' => waFiles::formatSize($this->reader->size()), 'original_size' => waFiles::formatSize($file->size), 'controls' => waHtmlControl::getControl($control, 'csv_map', $params), 'control' => $control, 'header' => $this->reader->header(), 'columns_offset' => count(ifset($params['columns'], array())), 'delimiter' => $delimiter, 'encoding' => $encoding); } catch (waException $ex) { if ($this->reader) { $this->reader->delete(true); } throw $ex; } }