Example #1
0
 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');
         }
     }
 }