Esempio n. 1
0
 /**
  * @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);
     }
 }
Esempio n. 2
0
 public function processImport($content, ImportHandler $handler, AbstractFormatter $formatter = null, AbstractArchiveBuilder $archiveBuilder = null, Lang $lang = null)
 {
     $event = new ImportExportEvent($formatter, $handler, null, $archiveBuilder);
     $event->setContent($content);
     $this->dispatch(TheliaEvents::IMPORT_AFTER_DECODE, $event);
     $data = $formatter->decode($event->getContent())->setLang($lang);
     $event->setContent(null)->setData($data);
     $this->dispatch(TheliaEvents::IMPORT_AFTER_DECODE, $event);
     $errors = $handler->retrieveFromFormatterData($data);
     if (!empty($errors)) {
         throw new \Exception($this->getTranslator()->trans("Errors occurred while importing the file: %errors", ["%errors" => implode(", ", $errors)]));
     }
     return $this->getTranslator()->trans("Import successfully done, %numb row(s) have been changed", ["%numb" => $handler->getImportedRows()]);
 }