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]); }
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]); }