diff --git a/core/lib/Thelia/Config/Resources/export.xml b/core/lib/Thelia/Config/Resources/export.xml index 3bacdca5a..890f11199 100644 --- a/core/lib/Thelia/Config/Resources/export.xml +++ b/core/lib/Thelia/Config/Resources/export.xml @@ -12,7 +12,7 @@ - + Mailing Exporter le nom, prénom et adresse mail des clients inscrits et des abonnées à la newsletter diff --git a/core/lib/Thelia/Config/Resources/import.xml b/core/lib/Thelia/Config/Resources/import.xml index 761fb9da2..e8787dede 100644 --- a/core/lib/Thelia/Config/Resources/import.xml +++ b/core/lib/Thelia/Config/Resources/import.xml @@ -11,7 +11,7 @@ - + Importez votre stock diff --git a/core/lib/Thelia/Controller/Admin/ImportExportController.php b/core/lib/Thelia/Controller/Admin/ImportExportController.php index f2c2f03c8..c6320c1fc 100644 --- a/core/lib/Thelia/Controller/Admin/ImportExportController.php +++ b/core/lib/Thelia/Controller/Admin/ImportExportController.php @@ -60,6 +60,8 @@ class ImportExportController extends BaseAdminController * Get needed services */ $this->hydrate(); + + } /** @@ -109,6 +111,7 @@ class ImportExportController extends BaseAdminController $data = $handler->buildFormatterData(); + /** @var \Thelia\Core\FileFormat\Formatting\AbstractFormatter $formatter */ $formatter = $this->formatterManager->get( $boundForm->get("formatter")->getData() ); @@ -247,7 +250,18 @@ class ImportExportController extends BaseAdminController /** * Inject allowed formats */ - $this->archiveBuilderManager; + /** @var \Thelia\ImportExport\AbstractHandler $handler */ + $this->hydrate(); + $handler = $import->getHandleClassInstance($this->container); + + $formats = + $this->formatterManager->getExtensionsByTypes($handler->getHandledTypes(), true) + + $this->archiveBuilderManager->getExtensions(true) + ; + + $parserContext->set( + "ALLOWED_EXTENSIONS", implode(", ", $formats) + ); /** Then render the form */ if ($this->getRequest()->isXmlHttpRequest()) { @@ -328,4 +342,5 @@ class ImportExportController extends BaseAdminController return $export; } + } diff --git a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php index 697da722d..2f8215827 100644 --- a/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php +++ b/core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php @@ -12,6 +12,7 @@ namespace Thelia\Core\DependencyInjection\Loader; +use Propel\Runtime\ActiveQuery\Criteria; use Propel\Runtime\Propel; use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Config\Util\XmlUtils; @@ -310,6 +311,7 @@ class XmlFileLoader extends FileLoader $con->beginTransaction(); try { + $refs = []; /** @var SimpleXMLElement $exportCategory */ foreach ($exportCategories as $exportCategory) { $id = (string) $exportCategory->getAttributeAsPhp("id"); @@ -336,8 +338,16 @@ class XmlFileLoader extends FileLoader ->save($con); ; } + + $refs[] = $id; } + ExportCategoryQuery::create() + ->filterByRef($refs, Criteria::NOT_IN) + ->find() + ->delete() + ; + $con->commit(); } catch (\Exception $e) { $con->rollBack(); @@ -356,6 +366,8 @@ class XmlFileLoader extends FileLoader $con->beginTransaction(); try { + $refs = []; + /** @var SimpleXMLElement $export */ foreach ($exports as $export) { $id = (string) $export->getAttributeAsPhp("id"); @@ -441,8 +453,16 @@ class XmlFileLoader extends FileLoader ->save($con) ; } + + $refs[] = $id; } + ExportQuery::create() + ->filterByRef($refs, Criteria::NOT_IN) + ->find() + ->delete() + ; + $con->commit(); } catch (\Exception $e) { $con->rollBack(); @@ -461,6 +481,8 @@ class XmlFileLoader extends FileLoader $con->beginTransaction(); try { + $refs = []; + /** @var SimpleXMLElement $importCategory */ foreach ($importCategories as $importCategory) { $id = (string) $importCategory->getAttributeAsPhp("id"); @@ -487,8 +509,16 @@ class XmlFileLoader extends FileLoader ->save($con); ; } + + $refs[] = $id; } + ImportCategoryQuery::create() + ->filterByRef($refs, Criteria::NOT_IN) + ->find() + ->delete() + ; + $con->commit(); } catch (\Exception $e) { $con->rollBack(); @@ -507,6 +537,8 @@ class XmlFileLoader extends FileLoader $con->beginTransaction(); try { + $refs = []; + /** @var SimpleXMLElement $import */ foreach ($imports as $import) { $id = (string) $import->getAttributeAsPhp("id"); @@ -592,8 +624,16 @@ class XmlFileLoader extends FileLoader ->save($con) ; } + + $refs[] = $id; } + ImportQuery::create() + ->filterByRef($refs, Criteria::NOT_IN) + ->find() + ->delete() + ; + $con->commit(); } catch (\Exception $e) { $con->rollBack(); diff --git a/core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilderManager.php b/core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilderManager.php index ee396f02f..31c9fa4d9 100644 --- a/core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilderManager.php +++ b/core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilderManager.php @@ -109,13 +109,15 @@ class ArchiveBuilderManager * * Return the extensions handled by archive builders */ - public function getExtensions() + public function getExtensions($withDot = false) { $extensions = []; /** @var AbstractArchiveBuilder $archiveBuilder */ foreach ($this->archiveBuilders as $archiveBuilder) { - $extensions += [$archiveBuilder->getName() => $archiveBuilder->getExtension()]; + $extensionName = $withDot ? ".": ""; + $extensionName .= $archiveBuilder->getExtension(); + $extensions += [$archiveBuilder->getName() => $extensionName]; } return $extensions; diff --git a/core/lib/Thelia/Core/FileFormat/Formatting/FormatterManager.php b/core/lib/Thelia/Core/FileFormat/Formatting/FormatterManager.php index 53c6a4f8e..4932f8ff3 100644 --- a/core/lib/Thelia/Core/FileFormat/Formatting/FormatterManager.php +++ b/core/lib/Thelia/Core/FileFormat/Formatting/FormatterManager.php @@ -105,13 +105,28 @@ class FormatterManager * * Return the extensions handled by archive builders */ - public function getExtensions() + public function getExtensions($withDot = false) { $extensions = []; /** @var AbstractFormatter $formatter */ foreach ($this->formatters as $formatter) { - $extensions += [$formatter->getName() => $formatter->getExtension()]; + $extensionName = $withDot ? ".": ""; + $extensionName .= $formatter->getExtension(); + $extensions += [$formatter->getName() => $extensionName]; + } + + return $extensions; + } + + public function getExtensionsByTypes($types, $withDot = false) { + $extensions = []; + + /** @var AbstractFormatter $formatter */ + foreach ($this->getFormattersByTypes($types) as $formatter) { + $extensionName = $withDot ? ".": ""; + $extensionName .= $formatter->getExtension(); + $extensions += [$formatter->getName() => $extensionName]; } return $extensions; @@ -123,6 +138,10 @@ class FormatterManager */ public function getFormatterByExtension($extension) { + if ($extension[0] === ".") { + $extension = substr($extension, 1); + } + $extensions = $this->getExtensions(); if (!in_array($extension, $extensions)) { diff --git a/core/lib/Thelia/Model/Export.php b/core/lib/Thelia/Model/Export.php index 0ef869cb3..a0edc92b7 100644 --- a/core/lib/Thelia/Model/Export.php +++ b/core/lib/Thelia/Model/Export.php @@ -125,10 +125,10 @@ class Export extends BaseExport if (!$instance instanceof ExportHandler) { throw new \ErrorException( Translator::getInstance()->trans( - "The class \"%class\" must implement %interface", + "The class \"%class\" must extend %baseClass", [ "%class" => $class, - "%interface" => "\\Thelia\\ImportExport\\Export\\ExportHandler", + "%baseClass" => "Thelia\\ImportExport\\Export\\ExportHandler", ] ) ); diff --git a/core/lib/Thelia/Model/Import.php b/core/lib/Thelia/Model/Import.php index f0e377847..f24e9ff02 100644 --- a/core/lib/Thelia/Model/Import.php +++ b/core/lib/Thelia/Model/Import.php @@ -4,6 +4,7 @@ namespace Thelia\Model; use Propel\Runtime\ActiveQuery\Criteria; use Symfony\Component\DependencyInjection\ContainerInterface; +use Thelia\Core\Translation\Translator; use Thelia\ImportExport\Import\ImportHandler; use Thelia\Model\Base\Import as BaseImport; use Thelia\Model\Map\ImportTableMap; @@ -97,22 +98,26 @@ class Import extends BaseImport if (!class_exists($class)) { throw new \ErrorException( - "The class \"%class\" doesn't exist", - [ - "%class" => $class - ] + Translator::getInstance()->trans( + "The class \"%class\" doesn't exist", + [ + "%class" => $class + ] + ) ); } $instance = new $class($container); - if (!$class instanceof ImportHandler) { + if (!$instance instanceof ImportHandler) { throw new \ErrorException( - "The class \"%class\" must implement %interface", - [ - "%class" => $class, - "%interface" => "\\Thelia\\ImportExport\\Import\\ImportHandler", - ] + Translator::getInstance()->trans( + "The class \"%class\" must extend %baseClass", + [ + "%class" => $class, + "%baseClass" => "Thelia\\ImportExport\\Import\\ImportHandler", + ] + ) ); } diff --git a/templates/backOffice/default/ajax/import-modal.html b/templates/backOffice/default/ajax/import-modal.html index 3d80e9ecc..e7942e825 100644 --- a/templates/backOffice/default/ajax/import-modal.html +++ b/templates/backOffice/default/ajax/import-modal.html @@ -10,7 +10,7 @@