From a7796cf481d848ed97e20f56d7115625ac5df504 Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Wed, 23 Oct 2013 19:04:49 +0200 Subject: [PATCH] manage lanf <=> url assignment --- core/lib/Thelia/Action/Lang.php | 13 ++++- .../Thelia/Config/Resources/routing/admin.xml | 2 +- .../Controller/Admin/LangController.php | 39 +++++++++++++ core/lib/Thelia/Core/Event/TheliaEvents.php | 23 ++++---- core/lib/Thelia/Form/Lang/LangUrlEvent.php | 46 +++++++++++++++ core/lib/Thelia/Form/Lang/LangUrlForm.php | 3 +- templates/admin/default/languages.html | 58 ++++++++++--------- 7 files changed, 142 insertions(+), 42 deletions(-) create mode 100644 core/lib/Thelia/Form/Lang/LangUrlEvent.php diff --git a/core/lib/Thelia/Action/Lang.php b/core/lib/Thelia/Action/Lang.php index da5a07197..1c74da3bd 100644 --- a/core/lib/Thelia/Action/Lang.php +++ b/core/lib/Thelia/Action/Lang.php @@ -29,6 +29,7 @@ use Thelia\Core\Event\Lang\LangDeleteEvent; use Thelia\Core\Event\Lang\LangToggleDefaultEvent; use Thelia\Core\Event\Lang\LangUpdateEvent; use Thelia\Core\Event\TheliaEvents; +use Thelia\Form\Lang\LangUrlEvent; use Thelia\Model\ConfigQuery; use Thelia\Model\LangQuery; use Thelia\Model\Lang as LangModel; @@ -102,6 +103,15 @@ class Lang extends BaseAction implements EventSubscriberInterface ->update(array('Value' => $event->getDefaultBehavior())); } + public function langUrl(LangUrlEvent $event) + { + foreach($event->getUrl() as $id => $url){ + LangQuery::create() + ->filterById($id) + ->update(array('Url' => $url)); + } + } + /** * Returns an array of event names this subscriber wants to listen to. * @@ -129,7 +139,8 @@ class Lang extends BaseAction implements EventSubscriberInterface TheliaEvents::LANG_TOGGLEDEFAULT => array('toggleDefault', 128), TheliaEvents::LANG_CREATE => array('create', 128), TheliaEvents::LANG_DELETE => array('delete', 128), - TheliaEvents::LANG_DEFAULTBEHAVIOR => array('defaultBehavior', 128) + TheliaEvents::LANG_DEFAULTBEHAVIOR => array('defaultBehavior', 128), + TheliaEvents::LANG_URL => array('langUrl', 128) ); } } \ No newline at end of file diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index 42bb0eaba..8a6037844 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -966,7 +966,7 @@ Thelia\Controller\Admin\LangController::defaultBehaviorAction - + Thelia\Controller\Admin\LangController::domainAction diff --git a/core/lib/Thelia/Controller/Admin/LangController.php b/core/lib/Thelia/Controller/Admin/LangController.php index ec46412e9..9b6074955 100644 --- a/core/lib/Thelia/Controller/Admin/LangController.php +++ b/core/lib/Thelia/Controller/Admin/LangController.php @@ -36,6 +36,8 @@ use Thelia\Form\Exception\FormValidationException; use Thelia\Form\Lang\LangCreateForm; use Thelia\Form\Lang\LangDefaultBehaviorForm; use Thelia\Form\Lang\LangUpdateForm; +use Thelia\Form\Lang\LangUrlEvent; +use Thelia\Form\Lang\LangUrlForm; use Thelia\Model\ConfigQuery; use Thelia\Model\LangQuery; @@ -57,6 +59,13 @@ class LangController extends BaseAdminController public function renderDefault(array $param = array()) { + $data = array(); + foreach (LangQuery::create()->find() as $lang) { + $data[LangUrlForm::LANG_PREFIX.$lang->getId()] = $lang->getUrl(); + } + $langUrlForm = new LangUrlForm($this->getRequest(), 'form', $data); + $this->getParserContext()->addForm($langUrlForm); + return $this->render('languages', array_merge($param, array( 'lang_without_translation' => ConfigQuery::getDefaultLangWhenNoTranslationAvailable(), 'one_domain_per_lang' => ConfigQuery::read("one_domain_foreach_lang", false) @@ -263,6 +272,36 @@ class LangController extends BaseAdminController if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, AccessManager::UPDATE)) return $response; $error_msg = false; + $langUrlForm = new LangUrlForm($this->getRequest()); + + try { + $form = $this->validateForm($langUrlForm); + + $data = $form->getData(); + $event = new LangUrlEvent(); + foreach ($data as $key => $value) { + $pos= strpos($key, LangUrlForm::LANG_PREFIX); + if(false !== strpos($key, LangUrlForm::LANG_PREFIX)) { + $event->addUrl(substr($key,strlen(LangUrlForm::LANG_PREFIX)), $value); + } + } + + $this->dispatch(TheliaEvents::LANG_URL, $event); + + $this->redirectToRoute('admin.configuration.languages'); + } catch (FormValidationException $ex) { + // Form cannot be validated + $error_msg = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + // Any other error + $error_msg = $ex->getMessage(); + } + + $this->setupFormErrorContext( + $this->getTranslator()->trans("%obj creation", array('%obj' => 'Lang')), $error_msg, $langUrlForm, $ex); + + // At this point, the form has error, and should be redisplayed. + return $this->renderDefault(); } public function activateDomainAction() diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php index 22e5a1841..8327cc3c3 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -697,20 +697,21 @@ final class TheliaEvents /************ LANG MANAGEMENT ****************************/ - const LANG_UPDATE = 'action.lang.update'; - const LANG_CREATE = 'action.lang.create'; - const LANG_DELETE = 'action.lang.delete'; + const LANG_UPDATE = 'action.lang.update'; + const LANG_CREATE = 'action.lang.create'; + const LANG_DELETE = 'action.lang.delete'; - const LANG_DEFAULTBEHAVIOR = 'action.lang.defaultBehavior'; + const LANG_DEFAULTBEHAVIOR = 'action.lang.defaultBehavior'; + const LANG_URL = 'action.lang.url'; - const LANG_TOGGLEDEFAULT = 'action.lang.toggleDefault'; + const LANG_TOGGLEDEFAULT = 'action.lang.toggleDefault'; - const BEFORE_UPDATELANG = 'action.lang.beforeUpdate'; - const AFTER_UPDATELANG = 'action.lang.afterUpdate'; + const BEFORE_UPDATELANG = 'action.lang.beforeUpdate'; + const AFTER_UPDATELANG = 'action.lang.afterUpdate'; - const BEFORE_CREATELANG = 'action.lang.beforeCreate'; - const AFTER_CREATELANG = 'action.lang.afterCreate'; + const BEFORE_CREATELANG = 'action.lang.beforeCreate'; + const AFTER_CREATELANG = 'action.lang.afterCreate'; - const BEFORE_DELETELANG = 'action.lang.beforeDelete'; - const AFTER_DELETELANG = 'action.lang.afterDelete'; + const BEFORE_DELETELANG = 'action.lang.beforeDelete'; + const AFTER_DELETELANG = 'action.lang.afterDelete'; } diff --git a/core/lib/Thelia/Form/Lang/LangUrlEvent.php b/core/lib/Thelia/Form/Lang/LangUrlEvent.php new file mode 100644 index 000000000..de8248c81 --- /dev/null +++ b/core/lib/Thelia/Form/Lang/LangUrlEvent.php @@ -0,0 +1,46 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Form\Lang; +use Thelia\Core\Event\ActionEvent; + + +/** + * Class LangUrlEvent + * @package Thelia\Form\Lang + * @author Manuel Raynaud + */ +class LangUrlEvent extends ActionEvent +{ + protected $url = array(); + + public function addUrl($id, $url) + { + $this->url[$id] = $url; + } + + public function getUrl() + { + return $this->url; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/Lang/LangUrlForm.php b/core/lib/Thelia/Form/Lang/LangUrlForm.php index ab4fd9fc1..ec9837329 100644 --- a/core/lib/Thelia/Form/Lang/LangUrlForm.php +++ b/core/lib/Thelia/Form/Lang/LangUrlForm.php @@ -34,7 +34,7 @@ use Thelia\Model\LangQuery; */ class LangUrlForm extends BaseForm { - const LANG_PREFIX = 'url'; + const LANG_PREFIX = 'url_'; /** * @@ -69,6 +69,7 @@ class LangUrlForm extends BaseForm "attr" => array( "tag" => "url", "url_id" => $lang->getId(), + "url_title" => $lang->getTitle() ), ) diff --git a/templates/admin/default/languages.html b/templates/admin/default/languages.html index 72dbcdd43..5fe0c9e61 100644 --- a/templates/admin/default/languages.html +++ b/templates/admin/default/languages.html @@ -118,36 +118,38 @@
{intl l="Using a domain or subdomain for each language"}
{form name="thelia.lang.url"} -
+ {form_hidden_fields form=$form} - - - {form_tagged_fields form=$form tag='url'} - {if $attr_list.url_id} - {loop type="lang" name="lang.list" id=$attr_list.url_id backend_context="1"} - - - - - {/loop} - {/if} - {/form_tagged_fields} - - - - - + + +
{$TITLE}
- {if $one_domain_per_lang == 0} - {intl l="activate"} - {else} - {intl l="deactivate"} - {/if} + + + {form_tagged_fields form=$form tag='url'} + {if $attr_list.url_id} + + + + + {/if} + {/form_tagged_fields} + + + + + - - -
{$attr_list.url_title} +
+ +
+
+ {if $one_domain_per_lang == 0} + {intl l="activate"} + {else} + {intl l="deactivate"} + {/if} - -
+ +
{/form}