From c5c8b4c9e4f2844da592792662caff701c98f511 Mon Sep 17 00:00:00 2001 From: Benjamin Perche Date: Wed, 23 Jul 2014 16:36:02 +0200 Subject: [PATCH] =?UTF-8?q?Refactor=20ExportHandler=20to=20allow=20queries?= =?UTF-8?q?=20override=20=09modifi=C3=A9:=20=20=20=20=20=20=20=20=20core/l?= =?UTF-8?q?ib/Thelia/Controller/Admin/ExportController.php=20=09modifi?= =?UTF-8?q?=C3=A9:=20=20=20=20=20=20=20=20=20core/lib/Thelia/ImportExport/?= =?UTF-8?q?Export/ExportHandler.php=20=09modifi=C3=A9:=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20core/lib/Thelia/ImportExport/Export/Type/MailingExport?= =?UTF-8?q?.php=20=09modifi=C3=A9:=20=20=20=20=20=20=20=20=20core/lib/Thel?= =?UTF-8?q?ia/ImportExport/Export/Type/ProductPricesExport.php=20=09modifi?= =?UTF-8?q?=C3=A9:=20=20=20=20=20=20=20=20=20core/lib/Thelia/ImportExport/?= =?UTF-8?q?Export/Type/ProductSEOExport.php=20=09modifi=C3=A9:=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20core/lib/Thelia/Tests/ImportExport/Export/Mailin?= =?UTF-8?q?gExportTest.php=20=09modifi=C3=A9:=20=20=20=20=20=20=20=20=20co?= =?UTF-8?q?re/lib/Thelia/Tests/ImportExport/Export/ProductPricesExportTest?= =?UTF-8?q?.php=20=09modifi=C3=A9:=20=20=20=20=20=20=20=20=20core/lib/Thel?= =?UTF-8?q?ia/Tests/ImportExport/Export/ProductSEOExportTest.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/Admin/ExportController.php | 2 +- .../ImportExport/Export/ExportHandler.php | 39 +++++++++++++++- .../Export/Type/MailingExport.php | 45 +++++++++---------- .../Export/Type/ProductPricesExport.php | 36 +++++++-------- .../Export/Type/ProductSEOExport.php | 37 +++++++-------- .../ImportExport/Export/MailingExportTest.php | 4 +- .../Export/ProductPricesExportTest.php | 2 +- .../Export/ProductSEOExportTest.php | 2 +- 8 files changed, 98 insertions(+), 69 deletions(-) diff --git a/core/lib/Thelia/Controller/Admin/ExportController.php b/core/lib/Thelia/Controller/Admin/ExportController.php index 50aac7713..0d61aeb64 100644 --- a/core/lib/Thelia/Controller/Admin/ExportController.php +++ b/core/lib/Thelia/Controller/Admin/ExportController.php @@ -169,7 +169,7 @@ class ExportController extends BaseAdminController * Used for specific configuration (e.g: XML node names) */ $data = $handler - ->buildFormatterData($lang) + ->buildData($lang) ->setLang($lang) ; diff --git a/core/lib/Thelia/ImportExport/Export/ExportHandler.php b/core/lib/Thelia/ImportExport/Export/ExportHandler.php index 54caa232b..50360953c 100644 --- a/core/lib/Thelia/ImportExport/Export/ExportHandler.php +++ b/core/lib/Thelia/ImportExport/Export/ExportHandler.php @@ -11,7 +11,10 @@ /*************************************************************************************/ namespace Thelia\ImportExport\Export; +use Propel\Runtime\ActiveQuery\Criterion\Exception\InvalidValueException; use Propel\Runtime\ActiveQuery\ModelCriteria; +use Thelia\Core\FileFormat\Formatting\FormatterData; +use Thelia\Core\Translation\Translator; use Thelia\Model\Lang; use Thelia\ImportExport\AbstractHandler; @@ -123,6 +126,40 @@ abstract class ExportHandler extends AbstractHandler * * The method builds the FormatterData for the formatter */ - abstract public function buildFormatterData(Lang $lang); + public function buildData(Lang $lang) + { + $data = new FormatterData($this->getAliases()); + $query = $this->buildDataSet($lang); + + if ($query instanceof ModelCriteria) { + return $data->loadModelCriteria($query); + } elseif (is_array($query)) { + return $data->setData($query); + } + + throw new InvalidValueException( + Translator::getInstance()->trans( + "The method \"%class\"::buildDataSet must return an array or a ModelCriteria", + [ + "%class" => get_class($this), + ] + ) + ); + } + + /** + * @return null|array + * + */ + protected function getAliases() + { + return null; + } + + /** + * @param Lang $lang + * @return ModelCriteria|array + */ + abstract protected function buildDataSet(Lang $lang); } \ No newline at end of file diff --git a/core/lib/Thelia/ImportExport/Export/Type/MailingExport.php b/core/lib/Thelia/ImportExport/Export/Type/MailingExport.php index 25531183f..8d397b11d 100644 --- a/core/lib/Thelia/ImportExport/Export/Type/MailingExport.php +++ b/core/lib/Thelia/ImportExport/Export/Type/MailingExport.php @@ -28,30 +28,11 @@ use Thelia\Model\NewsletterQuery; class MailingExport extends ExportHandler { /** - * @return \Thelia\Core\FileFormat\Formatting\FormatterData - * - * The method builds + * @param Lang $lang + * @return array|\Propel\Runtime\ActiveQuery\ModelCriteria */ - public function buildFormatterData(Lang $lang) + public function buildDataSet(Lang $lang) { - $email = "email"; - $lastName = "last_name"; - $firstName = "first_name"; - - - $aliases = [ - NewsletterTableMap::EMAIL => $email, - CustomerTableMap::EMAIL => $email, - - NewsletterTableMap::LASTNAME => $lastName, - CustomerTableMap::LASTNAME => $lastName, - - NewsletterTableMap::FIRSTNAME => $firstName, - CustomerTableMap::FIRSTNAME => $firstName, - ]; - - $data = new FormatterData($aliases); - $newsletter = NewsletterQuery::create() ->select([ NewsletterTableMap::EMAIL, @@ -72,9 +53,25 @@ class MailingExport extends ExportHandler ->toArray() ; - $both = $newsletter + $customers; + return $customers + $newsletter; + } - return $data->setData($both); + protected function getAliases() + { + $email = "email"; + $lastName = "last_name"; + $firstName = "first_name"; + + return [ + NewsletterTableMap::EMAIL => $email, + CustomerTableMap::EMAIL => $email, + + NewsletterTableMap::LASTNAME => $lastName, + CustomerTableMap::LASTNAME => $lastName, + + NewsletterTableMap::FIRSTNAME => $firstName, + CustomerTableMap::FIRSTNAME => $firstName, + ]; } /** diff --git a/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php b/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php index 25519fd64..7fd82b505 100644 --- a/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php +++ b/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php @@ -58,23 +58,10 @@ class ProductPricesExport extends ExportHandler /** * @param Lang $lang - * @return \Thelia\Core\FileFormat\Formatting\FormatterData - * - * The method builds the FormatterData for the formatter + * @return FormatterData */ - public function buildFormatterData(Lang $lang) + protected function buildDataSet(Lang $lang) { - $aliases = [ - "product_sale_elements_REF" => "ref", - "product_sale_elements_EAN_CODE" => "ean", - "price_PRICE" => "price", - "price_PROMO_PRICE" => "promo_price", - "currency_CODE" => "currency", - "product_TITLE" => "title", - "attribute_av_i18n_ATTRIBUTES" => "attributes", - "product_sale_elements_PROMO" => "promo", - ]; - $locale = $lang->getLocale(); $productJoin = new Join(ProductTableMap::ID, ProductI18nTableMap::ID, Criteria::LEFT_JOIN); @@ -122,9 +109,22 @@ class ProductPricesExport extends ExportHandler ->groupBy("product_sale_elements_REF") ; - $data = new FormatterData($aliases); - - return $data->loadModelCriteria($query); + return $query; } + protected function getAliases() + { + return [ + "product_sale_elements_REF" => "ref", + "product_sale_elements_EAN_CODE" => "ean", + "price_PRICE" => "price", + "price_PROMO_PRICE" => "promo_price", + "currency_CODE" => "currency", + "product_TITLE" => "title", + "attribute_av_i18n_ATTRIBUTES" => "attributes", + "product_sale_elements_PROMO" => "promo", + ]; + } + + } \ No newline at end of file diff --git a/core/lib/Thelia/ImportExport/Export/Type/ProductSEOExport.php b/core/lib/Thelia/ImportExport/Export/Type/ProductSEOExport.php index 1b18ce39c..f674479fe 100644 --- a/core/lib/Thelia/ImportExport/Export/Type/ProductSEOExport.php +++ b/core/lib/Thelia/ImportExport/Export/Type/ProductSEOExport.php @@ -16,8 +16,6 @@ use Propel\Runtime\ActiveQuery\Join; use Thelia\Core\FileFormat\Formatting\FormatterData; use Thelia\Core\FileFormat\FormatType; use Thelia\ImportExport\Export\ExportHandler; -use Thelia\Model\Map\ContentI18nTableMap; -use Thelia\Model\Map\ContentTableMap; use Thelia\Model\Map\ProductI18nTableMap; use Thelia\Model\Map\ProductTableMap; use Thelia\Model\Map\RewritingUrlTableMap; @@ -56,23 +54,11 @@ class ProductSEOExport extends ExportHandler } /** - * @param \Thelia\Model\Lang $lang - * @return \Thelia\Core\FileFormat\Formatting\FormatterData - * - * The method builds the FormatterData for the formatter + * @param Lang $lang + * @return array|\Propel\Runtime\ActiveQuery\ModelCriteria */ - public function buildFormatterData(Lang $lang) + public function buildDataSet(Lang $lang) { - $aliases = [ - "product_REF" => "ref", - "product_VISIBLE" => "visible", - "product_i18n_TITLE" => "product_title", - "product_URL" => "url", - "product_seo_TITLE" => "page_title", - "product_seo_META_DESCRIPTION" => "meta_description", - "product_seo_META_KEYWORDS" => "meta_keywords", - ]; - $locale = $this->locale = $lang->getLocale(); /** @@ -111,9 +97,7 @@ class ProductSEOExport extends ExportHandler ]) ; - $data = new FormatterData($aliases); - - return $data->loadModelCriteria($query); + return $query; } protected function getDefaultOrder() @@ -129,6 +113,17 @@ class ProductSEOExport extends ExportHandler ]; } - + protected function getAliases() + { + return [ + "product_REF" => "ref", + "product_VISIBLE" => "visible", + "product_i18n_TITLE" => "product_title", + "product_URL" => "url", + "product_seo_TITLE" => "page_title", + "product_seo_META_DESCRIPTION" => "meta_description", + "product_seo_META_KEYWORDS" => "meta_keywords", + ]; + } } \ No newline at end of file diff --git a/core/lib/Thelia/Tests/ImportExport/Export/MailingExportTest.php b/core/lib/Thelia/Tests/ImportExport/Export/MailingExportTest.php index fe99924f0..acb0b4271 100644 --- a/core/lib/Thelia/Tests/ImportExport/Export/MailingExportTest.php +++ b/core/lib/Thelia/Tests/ImportExport/Export/MailingExportTest.php @@ -15,6 +15,7 @@ use Symfony\Component\DependencyInjection\Container; use Thelia\Core\Translation\Translator; use Thelia\Core\FileFormat\FormatType; use Thelia\ImportExport\Export\Type\MailingExport; +use Thelia\Model\Lang; /** * Class MailingExportTest @@ -37,8 +38,7 @@ class MailingExportTest extends \PHPUnit_Framework_TestCase public function testExport() { - $data = $this->handler->buildFormatterData(); - + $data = $this->handler->buildData(Lang::getDefaultLanguage()); } diff --git a/core/lib/Thelia/Tests/ImportExport/Export/ProductPricesExportTest.php b/core/lib/Thelia/Tests/ImportExport/Export/ProductPricesExportTest.php index 910a8b96a..186f3b27a 100644 --- a/core/lib/Thelia/Tests/ImportExport/Export/ProductPricesExportTest.php +++ b/core/lib/Thelia/Tests/ImportExport/Export/ProductPricesExportTest.php @@ -31,7 +31,7 @@ class ProductPricesExportTest extends \PHPUnit_Framework_TestCase new Translator(new Container()); $export = new ProductPricesExport(new Container()); - $data = $export->buildFormatterData(Lang::getDefaultLanguage()); + $data = $export->buildData(Lang::getDefaultLanguage()); $keys = ["attributes","currency","ean","price","promo","promo_price","ref","title"]; diff --git a/core/lib/Thelia/Tests/ImportExport/Export/ProductSEOExportTest.php b/core/lib/Thelia/Tests/ImportExport/Export/ProductSEOExportTest.php index 204670a12..62a2fdac8 100644 --- a/core/lib/Thelia/Tests/ImportExport/Export/ProductSEOExportTest.php +++ b/core/lib/Thelia/Tests/ImportExport/Export/ProductSEOExportTest.php @@ -33,7 +33,7 @@ class ProductSEOExportTest extends \PHPUnit_Framework_TestCase new Translator(new Container()); $export = new ProductSEOExport(new Container()); - $data = $export->buildFormatterData(Lang::getDefaultLanguage()); + $data = $export->buildData(Lang::getDefaultLanguage()); $keys=["ref","visible","product_title","url","page_title","meta_description","meta_keywords",]; sort($keys);