示例#1
0
 public function run()
 {
     $kernel = kernel();
     $currentUser = $kernel->currentUser;
     if (!$currentUser->isLogged()) {
         return $this->error('權限不足。');
     }
     // get the current upload file
     $session = kernel()->session;
     $excelPath = $session->get('_current_upload');
     if (!$excelPath) {
         return $this->error('無上傳檔案。');
     }
     // TODO: currently we only support excel files
     $recordClass = $this->recordClass;
     $record = new $recordClass();
     $importer = new ExcelImporter($record->getSchema(), $this->importFields);
     list($imported, $skipped, $records) = $importer->import($excelPath);
     $numOfRecords = count($records);
     return $this->success('匯入成功,共 ' . $numOfRecords . ' 筆資料匯入。 ' . $skipped . ' 筆重複資料。', ['number_of_records' => $numOfRecords, 'imported' => $imported, 'skipped' => $skipped]);
 }
示例#2
0
 public function importColumnMapRegionAction()
 {
     $session = $this->kernel->session;
     $uploadedFile = $session->get('_current_upload');
     $schema = $this->getModel()->getSchema();
     $columnDefinitions = $schema->getColumns();
     $columnOptions = [];
     foreach ($columnDefinitions as $definition) {
         if (!$definition->label) {
             continue;
         }
         $columnOptions[$definition->label] = $definition->name;
     }
     $columnHeaders = [];
     $previewRows = [];
     if (preg_match('/\\.csv$/', $uploadedFile)) {
         $fp = fopen($uploadedFile, 'r');
         if ($_columnHeaders = fgetcsv($fp)) {
             $columnHeaders = $_columnHeaders;
             $i = 5;
             while ($i-- && ($row = fgetcsv($fp))) {
                 $previewRows[] = $row;
             }
         }
         fclose($fp);
     } else {
         if (preg_match('#.xls(x)?$#', $uploadedFile)) {
             $importer = new ExcelImporter($schema, $this->importFields);
             $preview = $importer->preview($uploadedFile);
             $columnHeaders = $preview['headers'];
             $previewRows = $preview['rows'];
         } else {
             // TODO: show error message
         }
     }
     $columnSelect = new SelectInput('columns[]', ['options' => $columnOptions, 'allow_empty' => [0, "-- 請選擇 --"]]);
     return $this->render($this->findTemplatePath('import_column_map.html'), ['columnSelect' => $columnSelect, 'columnHeaders' => $columnHeaders, 'previewRows' => $previewRows]);
 }