コード例 #1
0
ファイル: ExportController.php プロジェクト: fachriza/thelia
 /**
  * @param  AbstractFormatter      $formatter
  * @param  ExportHandler          $handler
  * @param  AbstractArchiveBuilder $archiveBuilder
  * @param  bool                   $includeImages
  * @param  bool                   $includeDocuments
  * @return Response
  *
  * Processes an export by returning a response with the export's content.
  */
 protected function processExport(AbstractFormatter $formatter, ExportHandler $handler, AbstractArchiveBuilder $archiveBuilder = null, Lang $lang, $includeImages = false, $includeDocuments = false)
 {
     /**
      * Build an event containing the formatter and the handler.
      * Used for specific configuration (e.g: XML node names)
      */
     $event = new ImportExportEvent($formatter, $handler);
     $filename = $formatter::FILENAME . "." . $formatter->getExtension();
     if ($archiveBuilder === null) {
         $data = $handler->buildData($lang);
         $event->setData($data);
         $this->dispatch(TheliaEvents::EXPORT_BEFORE_ENCODE, $event);
         $formattedContent = $formatter->setOrder($handler->getOrder())->encode($data);
         $this->dispatch(TheliaEvents::EXPORT_AFTER_ENCODE, $event->setContent($formattedContent));
         return new Response($event->getContent(), 200, ["Content-Type" => $formatter->getMimeType(), "Content-Disposition" => "attachment; filename=\"" . $filename . "\""]);
     } else {
         $event->setArchiveBuilder($archiveBuilder);
         if ($includeImages && $handler instanceof ImagesExportInterface) {
             $this->processExportImages($handler, $archiveBuilder);
             $handler->setImageExport(true);
         }
         if ($includeDocuments && $handler instanceof DocumentsExportInterface) {
             $this->processExportDocuments($handler, $archiveBuilder);
             $handler->setDocumentExport(true);
         }
         $data = $handler->buildData($lang)->setLang($lang);
         $this->dispatch(TheliaEvents::EXPORT_BEFORE_ENCODE, $event);
         $formattedContent = $formatter->setOrder($handler->getOrder())->encode($data);
         $this->dispatch(TheliaEvents::EXPORT_AFTER_ENCODE, $event->setContent($formattedContent));
         $archiveBuilder->addFileFromString($event->getContent(), $filename);
         return $archiveBuilder->buildArchiveResponse($formatter::FILENAME);
     }
 }