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