public function actionImportUpload() { $model = new $this->modelName(); $session = Yii::app()->session; $modelUsers = new User('search'); $modelUsers->resetScope(); $modelUsers->active(); $modelUsers->unsetAttributes(); // clear any default values if (isset($_GET['User'])) { $modelUsers->attributes = $_GET['User']; } if (!isset($_FILES[$this->modelName]) && isset($session['importAds']) && $session['importAds']) { $itemsProvider = new CArrayDataProvider($session['importAds'], array('sort' => array('attributes' => array('title')), 'pagination' => array('pageSize' => count($session['importAds'])))); $this->render('view_import_grid', compact('itemsProvider', 'model', 'modelUsers')); } else { if (isset($_FILES[$this->modelName]) && isset($_FILES[$this->modelName]['name'])) { $model->import = CUploadedFile::getInstance($model, 'import'); if ($model->validate()) { $fileExt = $model->import->extensionName; $fileName = date('Y_m_d_s') . rand(0, 9) . '_import.' . $fileExt; $filePath = $model->csvPath . DIRECTORY_SEPARATOR . $fileName; $model->import->saveAs($filePath); $isZip = false; // if zip arhive if ($fileExt == 'zip') { $isZip = true; include_once $model->libraryPath . DIRECTORY_SEPARATOR . 'pclzip.lib.php'; $archive = new PclZip($filePath); $list = $archive->extract(PCLZIP_OPT_PATH, $model->csvPath, PCLZIP_OPT_SET_CHMOD, 0777, PCLZIP_OPT_REMOVE_ALL_PATH); $v_list = $archive->delete(); /* if ($v_list == 0) { die("Error : ".$archive->errorInfo(true)); } */ foreach ($list as $item) { if (strpos($item["stored_filename"], ".csv")) { if ($item["stored_filename"] != $fileName) { $fileNameCSV = str_replace(".zip", ".csv", $fileName); if (copy($model->csvPath . DIRECTORY_SEPARATOR . $item["stored_filename"], $model->csvPath . DIRECTORY_SEPARATOR . $fileNameCSV)) { @unlink($model->csvPath . DIRECTORY_SEPARATOR . $item["stored_filename"]); } else { Yii::app()->user->setFlash('error', tt('Error copying file. Please try again later and set 0777 for ' . $model->csvPath)); $this->redirect('viewImport'); } @unlink($model->csvPath . DIRECTORY_SEPARATOR . $item["stored_filename"]); @unlink($model->csvPath . DIRECTORY_SEPARATOR . $fileName); $fileName = $fileNameCSV; $filePath = $model->csvPath . DIRECTORY_SEPARATOR . $fileName; } break; } } } $import = $rowData = array(); //parse csv file @setlocale(LC_ALL, 'en_US.utf8'); if (($handle = fopen($filePath, "r")) !== FALSE) { while (($data = fgetcsv($handle, 0, ";")) !== FALSE) { $import[] = $data; } fclose($handle); $keys = $import[0]; // remove BOM from file $bom = pack('H*', 'EFBBBF'); $keys[0] = preg_replace("/^{$bom}/", '', $keys[0]); unset($import[0]); $j = 1; foreach ($import as $key => $items) { if (count($keys) == count($items)) { $import[$key] = array_combine($keys, $items); $import[$key]["id"] = $j; $j++; } else { continue; } } // insert result into session $session['importAds'] = $import; $session['isZip'] = $isZip; } $itemsProvider = new CArrayDataProvider($import, array('sort' => array('attributes' => array('title')), 'pagination' => array('pageSize' => count($import)))); $this->render('view_import_grid', compact('itemsProvider', 'model', 'modelUsers')); } else { Yii::app()->user->setFlash('error', Yii::t('module_iecsv', 'Please select a *.csv or *.zip file for import. Max size of file is {size}.', array('{size}' => $model->fileMaxSizeMessage))); $this->redirect('viewImport'); } } else { $this->redirect('viewImport'); } } }