コード例 #1
0
ファイル: Csv.php プロジェクト: terminal42/contao-leads
 /**
  * Exports a given set of data row ids using a given configuration.
  *
  * @param \Database\Result $config
  * @param array|null       $ids
  *
  * @throws ExportFailedException
  */
 public function export($config, $ids = null)
 {
     $dataCollector = $this->prepareDefaultDataCollector($config, $ids);
     $reader = new ArrayReader($dataCollector->getExportData());
     $writer = new CsvFileWriter('system/tmp/' . File::getName($config));
     // Add header fields
     if ($config->headerFields) {
         $reader->setHeaderFields($this->prepareDefaultHeaderFields($config, $dataCollector));
         $writer->enableHeaderFields();
     }
     $row = new Row($config, $this->prepareDefaultExportConfig($config, $dataCollector));
     $writer->setRowCallback(function ($data) use($row) {
         return $row->compile($data);
     });
     $this->handleDefaultExportResult($writer->writeFrom($reader));
     $this->updateLastRun($config);
     $objFile = new \File($writer->getFilename());
     $objFile->sendToBrowser();
 }
コード例 #2
0
ファイル: Export.php プロジェクト: terminal42/contao-leads
 /**
  * Get the filename from config
  * @param object
  * @return string
  * @deprecated Use File::getName() instead. To be removed in 2.0.
  */
 public function getFilename($objConfig)
 {
     return File::getName($objConfig);
 }
コード例 #3
0
 /**
  * Export with template.
  *
  * @param               $config
  * @param ArrayReader   $reader
  * @param Row           $row
  * @param               $format
  */
 protected function exportWithTemplate($config, ArrayReader $reader, Row $row, $format)
 {
     // Fetch the template and make a copy of it
     $template = \FilesModel::findByPk($config->template);
     if (null === $template) {
         $objResponse = new Response('Could not find template.', 500);
         $objResponse->send();
     }
     $tmpPath = 'system/tmp/' . File::getName($config);
     \Files::getInstance()->copy($template->path, $tmpPath);
     $excelReader = PHPExcel_IOFactory::createReader($format);
     $excel = $excelReader->load(TL_ROOT . '/' . $tmpPath);
     $excel->setActiveSheetIndex((int) $config->sheetIndex);
     $sheet = $excel->getActiveSheet();
     $currentRow = (int) $config->startIndex ?: 1;
     $currentColumn = 0;
     foreach ($reader as $readerRow) {
         $compiledRow = $row->compile($readerRow);
         foreach ($compiledRow as $k => $value) {
             // Support explicit target column
             if ('tokens' === $config->export && isset($config->tokenFields[$k]['targetColumn'])) {
                 $column = $config->tokenFields[$k]['targetColumn'];
                 if (!is_numeric($column)) {
                     $column = PHPExcel_Cell::columnIndexFromString($column) - 1;
                 }
             } else {
                 // Use next column, ignoring explicit target columns in the counter
                 $column = $currentColumn++;
             }
             $sheet->setCellValueExplicitByColumnAndRow($column, $currentRow, (string) $value, \PHPExcel_Cell_DataType::TYPE_STRING2);
         }
         $currentColumn = 0;
         $currentRow++;
     }
     $excelWriter = \PHPExcel_IOFactory::createWriter($excel, $format);
     $excelWriter->save(TL_ROOT . '/' . $tmpPath);
     $this->updateLastRun($config);
     $tmpFile = new \File($tmpPath);
     $tmpFile->sendToBrowser();
 }