Example #1
0
 /**
  * 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();
 }
 /**
  * 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();
 }
Example #3
0
 /**
  * Handles the Simple Tokens and Insert Tags when exporting.
  *
  * @param $columnConfig
  * @param $data
  * @param $config
  * @param $value
  */
 public function handleTokenExports($columnConfig, $data, $config, $value)
 {
     if ($config->export != 'tokens') {
         return null;
     }
     $tokens = array();
     foreach ($columnConfig['allFieldsConfig'] as $fieldConfig) {
         $value = '';
         if (isset($data[$fieldConfig['id']])) {
             $value = $data[$fieldConfig['id']]['value'];
             $value = deserialize($value);
             // Add multiple tokens (<fieldname>_<option_name>) for multi-choice fields
             if (is_array($value)) {
                 foreach ($value as $choice) {
                     $tokens[$fieldConfig['name'] . '_' . $choice] = 1;
                 }
             }
             $value = Row::transformValue($data[$fieldConfig['id']]['value'], $fieldConfig);
         }
         $tokens[$fieldConfig['name']] = $value;
     }
     return Tokens::recursiveReplaceTokensAndTags($columnConfig['tokensValue'], $tokens);
 }