示例#1
0
 public function testHandler()
 {
     $source = $this->getMock('Exporter\\Source\\SourceIteratorInterface');
     $writer = $this->getMock('Exporter\\Writer\\WriterInterface');
     $writer->expects($this->once())->method('open');
     $writer->expects($this->once())->method('close');
     $exporter = new Handler($source, $writer);
     $exporter->export();
 }
示例#2
0
 /**
  * @throws \RuntimeException
  * @param $format
  * @param $filename
  * @param \Exporter\Source\SourceIteratorInterface $source
  * @return \Symfony\Component\HttpFoundation\Response
  */
 public function getResponse($format, $filename, SourceIteratorInterface $source)
 {
     $privateFilename = sprintf('%s/%s', sys_get_temp_dir(), uniqid('sonata_export_', true));
     switch ($format) {
         case 'xls':
             $writer = new \Exporter\Writer\XlsWriter($privateFilename);
             $contentType = 'application/vnd.ms-excel';
             break;
         case 'xml':
             $writer = new \Exporter\Writer\XmlWriter($privateFilename);
             $contentType = 'text/xml';
             break;
         case 'json':
             $writer = new \Exporter\Writer\JsonWriter($privateFilename);
             $contentType = 'application/json';
             break;
         case 'csv':
             $writer = new \Exporter\Writer\CsvWriter($privateFilename, ',', '"', "", true);
             $contentType = 'text/csv';
             break;
         default:
             throw new \RuntimeException('Invalid format');
     }
     $handler = Handler::create($source, $writer);
     $handler->export();
     $response = new Response(file_get_contents($privateFilename), 200, array('Content-Type' => $contentType, 'Content-Disposition' => sprintf('attachment; filename=%s', $filename)));
     unlink($privateFilename);
     return $response;
 }
示例#3
0
 /**
  * @throws \RuntimeException
  *
  * @param string                  $format
  * @param string                  $filename
  * @param SourceIteratorInterface $source
  *
  * @return StreamedResponse
  */
 public function getResponse($format, $filename, SourceIteratorInterface $source)
 {
     switch ($format) {
         case 'xls':
             $writer = new XlsWriter('php://output');
             $contentType = 'application/vnd.ms-excel';
             break;
         case 'xml':
             $writer = new XmlWriter('php://output');
             $contentType = 'text/xml';
             break;
         case 'json':
             $writer = new JsonWriter('php://output');
             $contentType = 'application/json';
             break;
         case 'csv':
             $writer = new CsvWriter('php://output', ',', '"', "", true, true);
             $contentType = 'text/csv';
             break;
         default:
             throw new \RuntimeException('Invalid format');
     }
     $callback = function () use($source, $writer) {
         $handler = \Exporter\Handler::create($source, $writer);
         $handler->export();
     };
     return new StreamedResponse($callback, 200, array('Content-Type' => $contentType, 'Content-Disposition' => sprintf('attachment; filename=%s', $filename)));
 }
示例#4
0
文件: Exporter.php 项目: kazak/forum
 /**
  * @throws \RuntimeException
  *
  * @param string                  $format
  * @param string                  $filename
  * @param SourceIteratorInterface $source
  *
  * @return StreamedResponse
  */
 public function getResponse($format, $filename, SourceIteratorInterface $source)
 {
     if (!array_key_exists($format, $this->writers)) {
         throw new \RuntimeException(sprintf('Invalid "%s" format, supported formats are : "%s"', $format, implode(', ', array_keys($this->writers))));
     }
     $writer = $this->writers[$format];
     $callback = function () use($source, $writer) {
         $handler = \Exporter\Handler::create($source, $writer);
         $handler->export();
     };
     $headers = array('Content-Disposition' => sprintf('attachment; filename="%s"', $filename));
     $headers['Content-Type'] = $writer->getDefaultMimeType();
     return new StreamedResponse($callback, 200, $headers);
 }
示例#5
0
 public function execute(InputInterface $input, OutputInterface $output)
 {
     try {
         if ($configPath = $input->getArgument('config')) {
             $this->loadFromConfig($configPath);
         }
         if (!($codes = $this->getCodes())) {
             throw new \Exception("Not enough arguments.");
         }
         Handler::create(new CodesSource($codes), $this->getWriter($input, $output))->export();
     } catch (\Exception $e) {
         $output->writeln('<error>' . $e->getMessage() . '</error>');
         return 1;
     }
 }
 /**
  * {@inheritdoc}
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     $this->getContainer()->get('router')->getContext()->setHost($input->getArgument('host'));
     $this->getContainer()->get('router')->getContext()->setScheme($input->getOption('scheme'));
     $this->getContainer()->get('router')->getContext()->setBaseUrl($input->getOption('baseurl'));
     $tempFolder = sys_get_temp_dir() . '/sonata_sitemap_' . md5(__DIR__);
     $fs = new Filesystem();
     // step 1
     $output->writeln(sprintf('Creating temporary folder: %s', $tempFolder));
     if ($fs->exists($tempFolder)) {
         $output->writeln('<error>The temporary folder already exists</error>');
         $output->writeln('<error>If the task is not running please delete this folder</error>');
         return 1;
     }
     $fs->mkdir($tempFolder);
     // step 2
     $manager = $this->getContainer()->get('sonata.seo.sitemap.manager');
     // step 3
     $output->writeln(sprintf('Generating sitemap - this can take a while'));
     foreach ($manager as $group => $sitemap) {
         $write = new SitemapWriter($tempFolder, $group, $sitemap->types, false);
         try {
             Handler::create($sitemap->sources, $write)->export();
         } catch (\Exception $e) {
             $fs->remove($tempFolder);
             throw $e;
         }
     }
     // generate global sitemap index
     $appendPath = $input->hasOption('sitemap_path') ? $input->getOption('sitemap_path') : $input->getOption('baseurl');
     SitemapWriter::generateSitemapIndex($tempFolder, sprintf('%s://%s%s', $input->getOption('scheme'), $input->getArgument('host'), $appendPath), 'sitemap*.xml', 'sitemap.xml');
     // step 4
     $output->writeln(sprintf('Moving temporary file to %s ...', $input->getArgument('folder')));
     $oldFiles = Finder::create()->files()->name('sitemap*.xml')->in($input->getArgument('folder'));
     foreach ($oldFiles as $file) {
         $fs->remove($file->getRealPath());
     }
     $newFiles = Finder::create()->files()->name('sitemap*.xml')->in($tempFolder);
     foreach ($newFiles as $file) {
         $fs->rename($file->getRealPath(), sprintf('%s/%s', $input->getArgument('folder'), $file->getFilename()));
     }
     $fs->remove($tempFolder);
     $output->writeln('<info>done!</info>');
 }
示例#7
0
 /**
  * Export data to a file on disk
  */
 public function export()
 {
     // Data to export
     /*$this->exporter_source = new ArraySourceIterator($this->data);*/
     // Get an Instance of the Writer
     $this->exporter_writer = '\\Exporter\\Writer\\' . ucfirst($this->format) . 'Writer';
     $this->exporter_writer = new $this->exporter_writer($this->fileName);
     // Export to the format
     Handler::create($this->exporter_source, $this->exporter_writer)->export();
 }
 /**
  * Export Csv.
  */
 public function exportCsvAction($format)
 {
     $config = $this->getConfig();
     $queryBuilder = $this->createQuery($config['repository']);
     $campos = array();
     foreach ($config['fieldsindex'] as $key => $value) {
         //if is defined and true
         if (!empty($value['export']) && $value['export']) {
             $campos[] = $value['name'];
         }
     }
     $query = $queryBuilder->getQuery();
     // Pick a format to export to
     //$format = 'csv';
     // Set Content-Type
     switch ($format) {
         case 'xls':
             $content_type = 'application/vnd.ms-excel';
             break;
         case 'json':
             $content_type = 'application/json';
             break;
         case 'csv':
             $content_type = 'text/csv';
             break;
         default:
             $content_type = 'text/csv';
             break;
     }
     // Location to Export this to
     $export_to = 'php://output';
     // Data to export
     $exporter_source = new DoctrineORMQuerySourceIterator($query, $campos, "Y-m-d H:i:s");
     // Get an Instance of the Writer
     $exporter_writer = '\\Exporter\\Writer\\' . ucfirst($format) . 'Writer';
     $exporter_writer = new $exporter_writer($export_to);
     // Generate response
     $response = new Response();
     // Set headers
     $response->headers->set('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
     $response->headers->set('Content-type', $content_type);
     $response->headers->set('Expires', 0);
     //$response->headers->set('Content-length', filesize($filename));
     $response->headers->set('Pragma', 'public');
     // Send headers before outputting anything
     $response->sendHeaders();
     // Export to the format
     Handler::create($exporter_source, $exporter_writer)->export();
     return $response;
 }