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(); }
/** * @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; }
/** * @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))); }
/** * @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); }
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>'); }
/** * 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; }