Add accepted formats on import form and add delete not registred exports and imports

modifié:         core/lib/Thelia/Config/Resources/export.xml
	modifié:         core/lib/Thelia/Config/Resources/import.xml
	modifié:         core/lib/Thelia/Controller/Admin/ImportExportController.php
	modifié:         core/lib/Thelia/Core/DependencyInjection/Loader/XmlFileLoader.php
	modifié:         core/lib/Thelia/Core/FileFormat/Archive/ArchiveBuilderManager.php
	modifié:         core/lib/Thelia/Core/FileFormat/Formatting/FormatterManager.php
	modifié:         core/lib/Thelia/Model/Export.php
	modifié:         core/lib/Thelia/Model/Import.php
	modifié:         templates/backOffice/default/ajax/import-modal.html
	modifié:         templates/backOffice/default/import-page.html
This commit is contained in:
Benjamin Perche
2014-07-17 11:35:37 +02:00
parent b86683a580
commit a16b481059
10 changed files with 102 additions and 20 deletions

View File

@@ -12,7 +12,7 @@
</export_categories>
<exports>
<export id="thelia.export.mailing" category_id="thelia.export.customer" class="Thelia\ImportExport\Export\MailingExport">
<export id="thelia.export.mailing" category_id="thelia.export.customer" class="Thelia\ImportExport\Export\Type\MailingExport">
<export_descriptive locale="fr_FR">
<title>Mailing</title>
<description>Exporter le nom, prénom et adresse mail des clients inscrits et des abonnées à la newsletter</description>

View File

@@ -11,7 +11,7 @@
</import_categories>
<imports>
<import id="thelia.import.stock" class="Thelia\ImportExport\Import\ProductStockImport" category_id="thelia.import.products">
<import id="thelia.import.stock" class="Thelia\ImportExport\Import\Type\ProductStockImport" category_id="thelia.import.products">
<import_descriptive locale="fr_FR">
<title>Importez votre stock</title>
</import_descriptive>

View File

@@ -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;
}
}

View File

@@ -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();

View File

@@ -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;

View File

@@ -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)) {

View File

@@ -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",
]
)
);

View File

@@ -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(
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",
Translator::getInstance()->trans(
"The class \"%class\" must extend %baseClass",
[
"%class" => $class,
"%interface" => "\\Thelia\\ImportExport\\Import\\ImportHandler",
"%baseClass" => "Thelia\\ImportExport\\Import\\ImportHandler",
]
)
);
}

View File

@@ -10,7 +10,7 @@
<div class="modal-body">
{custom_render_form_field form=$form field="file_upload"}
<input type="file" required aria-required="true" name="{$name}" id="{$label_attr.for}" />
<div class="small">Accepted formats: </div>
<div class="small">Accepted formats: {$ALLOWED_EXTENSIONS}</div>
{/custom_render_form_field}
</div>
<div class="modal-footer">

View File

@@ -41,6 +41,7 @@
<form action="{$URL}" method="post" {form_enctype form=$form}>
{custom_render_form_field form=$form field="file_upload"}
<input type="file" required aria-required="true" name="{$name}" id="{$label_attr.for}" />
<div class="small">Accepted formats: {$ALLOWED_EXTENSIONS}</div>
{/custom_render_form_field}
<button type="submit" class="btn btn-primary" title="{intl l="Import this file"}">{intl l="Import this file"}</button>