From 8d93a3c7ab6c50c83be2d6f8db99a993f49e0163 Mon Sep 17 00:00:00 2001 From: lovenunu Date: Fri, 11 Jul 2014 20:51:34 +0200 Subject: [PATCH] Create interfaces for documents and images exports modified: core/lib/Thelia/Controller/Admin/ImportExportController.php new file: core/lib/Thelia/ImportExport/DocumentsAwareInterface.php modified: core/lib/Thelia/ImportExport/ExportHandler.php new file: core/lib/Thelia/ImportExport/ImagesAwareInterface.php --- .../Admin/ImportExportController.php | 57 +++++++++++++++++-- .../ImportExport/DocumentsAwareInterface.php | 27 +++++++++ .../lib/Thelia/ImportExport/ExportHandler.php | 1 + .../ImportExport/ImagesAwareInterface.php | 28 +++++++++ 4 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 core/lib/Thelia/ImportExport/DocumentsAwareInterface.php create mode 100644 core/lib/Thelia/ImportExport/ImagesAwareInterface.php diff --git a/core/lib/Thelia/Controller/Admin/ImportExportController.php b/core/lib/Thelia/Controller/Admin/ImportExportController.php index f1dcb1765..dac540626 100644 --- a/core/lib/Thelia/Controller/Admin/ImportExportController.php +++ b/core/lib/Thelia/Controller/Admin/ImportExportController.php @@ -17,7 +17,10 @@ use Thelia\Core\Template\Loop\Export as ExportLoop; use Thelia\Core\Template\Loop\Import as ImportLoop; use Thelia\Form\Exception\FormValidationException; use Thelia\Form\ExportForm; +use Thelia\ImportExport\DocumentsAwareInterface; +use Thelia\ImportExport\ImagesAwareInterface; use Thelia\Model\ExportQuery; +use Thelia\Model\ImportQuery; /** * Class ImportExportController @@ -41,7 +44,14 @@ class ImportExportController extends BaseAdminController public function import($id) { + if (null === $import = $this->getImport($id)) { + return $this->render("404"); + } + /** + * Get needed services + */ + $this->hydrate(); } public function export($id) @@ -102,8 +112,7 @@ class ImportExportController extends BaseAdminController $formattedContent = $formatter->encode($data); - if (!$boundForm->get("do_compress")->getData()) - { + if (!$boundForm->get("do_compress")->getData()) { return new Response( $formattedContent, 200, @@ -112,6 +121,37 @@ class ImportExportController extends BaseAdminController "Content-Disposition" => $formatter::FILENAME . "." . $formatter->getExtension(), ] ); + } else { + /** @var \Thelia\Core\FileFormat\Archive\AbstractArchiveBuilder $archiveBuilder */ + $archiveBuilder = $this->archiveBuilderManager->get($boundForm->get("archive_builder")->getData()); + + /** + * Put the images in the archive + */ + if ($boundForm->get("images")->getData() && $handler instanceof ImagesAwareInterface) { + foreach ($handler->getImagesPaths() as $image) { + $archiveBuilder->addFile($image, "images"); + } + } + + /** + * Then the documents + */ + if ($boundForm->get("documents")->getData() && $handler instanceof DocumentsAwareInterface) { + foreach ($handler->getDocumentsPaths() as $document) { + $archiveBuilder->addFile($document, "documents"); + } + } + + /** + * Then add the export file + */ + $archiveBuilder->addFileFromString( + $formattedContent, + $formatter::FILENAME . "." . $formatter->getExtension() + ); + + return $archiveBuilder->buildArchiveResponse($formatter::FILENAME); } } catch(FormValidationException $e) { @@ -137,7 +177,7 @@ class ImportExportController extends BaseAdminController public function importView($id) { - if (null === $export = $this->getExport($id)) { + if (null === $import = $this->getImport($id)) { return $this->render("404"); } @@ -147,7 +187,7 @@ class ImportExportController extends BaseAdminController $loop = new ImportLoop($this->container); $loop->initializeArgs([ - "export" => $export->getId() + "export" => $import->getId() ]); $query = $loop->buildModelCriteria(); @@ -221,4 +261,13 @@ class ImportExportController extends BaseAdminController return $export; } + + protected function getImport($id) + { + $export = ImportQuery::create() + ->findPk($id) + ; + + return $export; + } } \ No newline at end of file diff --git a/core/lib/Thelia/ImportExport/DocumentsAwareInterface.php b/core/lib/Thelia/ImportExport/DocumentsAwareInterface.php new file mode 100644 index 000000000..0c6691450 --- /dev/null +++ b/core/lib/Thelia/ImportExport/DocumentsAwareInterface.php @@ -0,0 +1,27 @@ + + */ +interface DocumentsAwareInterface +{ + /** + * @return array + * + * return an array with the paths to the documents to include in the archive + */ + public function getDocumentsPaths(); +} \ No newline at end of file diff --git a/core/lib/Thelia/ImportExport/ExportHandler.php b/core/lib/Thelia/ImportExport/ExportHandler.php index ec67ad096..03000ae5f 100644 --- a/core/lib/Thelia/ImportExport/ExportHandler.php +++ b/core/lib/Thelia/ImportExport/ExportHandler.php @@ -54,4 +54,5 @@ abstract class ExportHandler * ); */ abstract public function getHandledType(); + } \ No newline at end of file diff --git a/core/lib/Thelia/ImportExport/ImagesAwareInterface.php b/core/lib/Thelia/ImportExport/ImagesAwareInterface.php new file mode 100644 index 000000000..9386a2a69 --- /dev/null +++ b/core/lib/Thelia/ImportExport/ImagesAwareInterface.php @@ -0,0 +1,28 @@ + + */ +interface ImagesAwareInterface +{ + /** + * @return array + * + * return an array with the paths to the images to include in the archive + */ + public function getImagesPaths(); +} \ No newline at end of file