/** * @return void */ public function actionCsv() { $model = new ImportCsvUploadForm(); // upload form (first step) was submitted if (isset($_POST['ImportCsvUploadForm'])) { $model->attributes = $_POST['ImportCsvUploadForm']; // validate upload if ($model->validate()) { $models = array(); // get file $file = CUploadedFile::getInstance($model, 'file'); $fileContent = trim(file_get_contents($file->tempName)); $fileLines = explode("\n", $fileContent); // relations between CSV and ImportCsvForm $csvToObject = array( 0 => 'name', 1 => 'url', 2 => 'comment', 3 => 'tags', 4 => 'username', 5 => 'password' ); // traverse uploaded file per line foreach ($fileLines as $index => $line) { // skip first line (header) if ($index == 0) { continue; } // parse line to array $csv = str_getcsv($line); if (count($csv) < 1) { continue; } // create model $tmpModel = new ImportCsvForm(); // set array values to model foreach ($csvToObject as $position => $name) { if (!isset($csv[$position])) { break; } $tmpModel->$csvToObject[$position] = $csv[$position]; } $models[] = $tmpModel; } } } elseif (isset($_POST['ImportCsvForm'])) { // import $models = array(); $valid = true; foreach ($_POST['ImportCsvForm'] as $data) { $model = new ImportCsvForm(); $model->attributes = $data; $valid = $model->validate(); $models[] = $model; if (!$valid) { Yii::app()->user->setFlash('hasError', true); } } if ($valid) { foreach ($models as $model) { $entry = new Entry('create'); $entry->name = $model->name; $entry->url = $model->url; $entry->username = $model->username; $entry->password = $model->password; $entry->tagList = $model->tags; $entry->comment = $model->comment; $entry->save(); $entry->resaveTags(); } Yii::app()->user->setFlash('success', 'Your CSV was successfully imported!'); $this->redirect(array('/entry/index')); } } // render upload form if (!isset($models)) { $this->render('csv-upload', array('model' => $model, 'maxImport' => ceil(ini_get('max_input_vars') / 6))); } else { // render import form $this->render('csv-import', array('models' => $models)); } }
public function actionImport() { $this->pageTitle = 'Импорт товаров'; $this->breadcrumbs = array_merge($this->breadcrumbs, array('Импорт товаров')); $importCsvForm = new ImportCsvForm(); $errors = array(); if (isset($_POST['ImportCsvForm'])) { $importCsvForm->attributes = $_POST['ImportCsvForm']; if ($importCsvForm->validate()) { $model = new ShopProducts(); $columns = array_values(array_flip($model->getAvailableColumns())); //var_dump($columns);die; $csvFile = CUploadedFile::getInstance($importCsvForm, 'csvFile'); $csvFileTemp = $csvFile->getTempName(); $csvHandle = file_get_contents($csvFileTemp); $csvHandle = iconv("WINDOWS-1251", "UTF-8", $csvHandle); file_put_contents($csvFileTemp, $csvHandle); $csvHandle = fopen($csvFileTemp, "r"); $checkedLine = fgetcsv($csvHandle, 0, $importCsvForm->delimiter); if (count($checkedLine) > count($columns)) { $importCsvForm->addError('csvFile', 'Неверная схема csv-документа'); $errors[] = $importCsvForm; die('error'); } rewind($csvHandle); while (($csvLine = fgetcsv($csvHandle, 0, $importCsvForm->delimiter)) !== FALSE) { $i = 0; foreach ($csvLine as $key => $value) { $data[$columns[$i]] = $value; $i++; } $csvDataArray[] = $data; } //var_dump($csvDataArray);die; if ($importCsvForm->skipFirstLine) { unset($csvDataArray[0]); } //var_dump($csvDataArray);die; foreach ($csvDataArray as $attributes) { $model = new ShopProducts('import'); $model->attributes = $attributes; $model->category_id = $importCsvForm->categoryId; //var_dump($model->attributes);die; if (!$model->validate()) { $errors[] = $model; } //var_dump($model->attributes); //var_dump($model->_remoteFile); //var_dump($model->getErrors());die; } $transaction = Yii::app()->db->beginTransaction(); try { foreach ($csvDataArray as $attributes) { $ShopProducts = new ShopProducts('import'); $ShopProducts->attributes = $attributes; $ShopProducts->category_id = $importCsvForm->categoryId; if (!$ShopProducts->save()) { throw new Exception('Ошибка при сохранении данных.'); } $ShopProductsImages = new ShopProductsImages(); $ShopProductsImages->createStorageIfNotExists(); $attr = $ShopProductsImages->uploadImageFromUrl($attributes['_remoteFile']); if (isset($attr['error'])) { echo CJSON::encode(array('error' => $attr['error'])); Yii::app()->end(); } //$ShopProductsImages->validate(); //var_dump($ShopProductsImages->getErrors());die; $ShopProductsImages->attributes = $attr; $ShopProductsImages->product_id = $ShopProducts->id; // var_dump($ShopProductsImages->save());die; if (!$ShopProductsImages->save()) { throw new Exception('Ошибка при сохранении данных.'); } } $transaction->commit(); } catch (Exception $e) { $error = $e->getMessage(); $transaction->rollBack(); } //var_dump($error); die; $this->redirect(array('import')); } } $this->render('import', array('model' => $importCsvForm, 'errors' => $errors)); }