From 3dd51d98b65ec0a2e75c59ceb46ea4baf264769f Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Wed, 23 Oct 2013 15:41:41 +0200 Subject: [PATCH] process default behacior for languages --- core/lib/Thelia/Action/Lang.php | 10 +++ .../Controller/Admin/LangController.php | 30 +++++++++ .../Event/Lang/LangDefaultBehaviorEvent.php | 64 +++++++++++++++++++ core/lib/Thelia/Core/Event/TheliaEvents.php | 2 + templates/admin/default/languages.html | 3 +- 5 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 core/lib/Thelia/Core/Event/Lang/LangDefaultBehaviorEvent.php diff --git a/core/lib/Thelia/Action/Lang.php b/core/lib/Thelia/Action/Lang.php index 0bfb96020..da5a07197 100644 --- a/core/lib/Thelia/Action/Lang.php +++ b/core/lib/Thelia/Action/Lang.php @@ -24,10 +24,12 @@ namespace Thelia\Action; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Thelia\Core\Event\Lang\LangCreateEvent; +use Thelia\Core\Event\Lang\LangDefaultBehaviorEvent; 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\Model\ConfigQuery; use Thelia\Model\LangQuery; use Thelia\Model\Lang as LangModel; @@ -93,6 +95,13 @@ class Lang extends BaseAction implements EventSubscriberInterface } } + public function defaultBehavior(LangDefaultBehaviorEvent $event) + { + ConfigQuery::create() + ->filterByName('default_lang_without_translation') + ->update(array('Value' => $event->getDefaultBehavior())); + } + /** * Returns an array of event names this subscriber wants to listen to. * @@ -120,6 +129,7 @@ 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) ); } } \ No newline at end of file diff --git a/core/lib/Thelia/Controller/Admin/LangController.php b/core/lib/Thelia/Controller/Admin/LangController.php index dae52c089..0b882579a 100644 --- a/core/lib/Thelia/Controller/Admin/LangController.php +++ b/core/lib/Thelia/Controller/Admin/LangController.php @@ -25,6 +25,7 @@ namespace Thelia\Controller\Admin; use Symfony\Component\Form\Form; use Thelia\Core\Event\Lang\LangCreateEvent; +use Thelia\Core\Event\Lang\LangDefaultBehaviorEvent; use Thelia\Core\Event\Lang\LangDeleteEvent; use Thelia\Core\Event\Lang\LangToggleDefaultEvent; use Thelia\Core\Event\Lang\LangUpdateEvent; @@ -33,6 +34,7 @@ use Thelia\Core\Security\AccessManager; use Thelia\Core\Security\Resource\AdminResources; use Thelia\Form\Exception\FormValidationException; use Thelia\Form\Lang\LangCreateForm; +use Thelia\Form\Lang\LangDefaultBehaviorForm; use Thelia\Form\Lang\LangUpdateForm; use Thelia\Model\ConfigQuery; use Thelia\Model\LangQuery; @@ -226,6 +228,34 @@ class LangController extends BaseAdminController public function defaultBehaviorAction() { + if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, AccessManager::UPDATE)) return $response; + $error_msg = false; + $exception = false; + + $behaviorForm = new LangDefaultBehaviorForm($this->getRequest()); + + try { + $form = $this->validateForm($behaviorForm); + + $event = new LangDefaultBehaviorEvent($form->get('behavior')->getData()); + + $this->dispatch(TheliaEvents::LANG_DEFAULTBEHAVIOR, $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, $behaviorForm, $ex); + + // At this point, the form has error, and should be redisplayed. + return $this->renderDefault(); } } \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Lang/LangDefaultBehaviorEvent.php b/core/lib/Thelia/Core/Event/Lang/LangDefaultBehaviorEvent.php new file mode 100644 index 000000000..4c3e857e3 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Lang/LangDefaultBehaviorEvent.php @@ -0,0 +1,64 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Lang; +use Thelia\Core\Event\ActionEvent; + + +/** + * Class LangDefaultBehaviorEvent + * @package Thelia\Core\Event\Lang + * @author Manuel Raynaud + */ +class LangDefaultBehaviorEvent extends ActionEvent +{ + /** + * @var int default behavior status + */ + protected $defaultBehavior; + + function __construct($defaultBehavior) + { + $this->defaultBehavior = $defaultBehavior; + } + + /** + * @param int $defaultBehavior + */ + public function setDefaultBehavior($defaultBehavior) + { + $this->defaultBehavior = $defaultBehavior; + } + + /** + * @return int + */ + public function getDefaultBehavior() + { + return $this->defaultBehavior; + } + + + + +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php index 6857dc2ec..218160197 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -695,6 +695,8 @@ final class TheliaEvents const LANG_CREATE = 'action.lang.create'; const LANG_DELETE = 'action.lang.delete'; + const LANG_DEFAULTBEHAVIOR = 'action.lang.defaultBehavior'; + const LANG_TOGGLEDEFAULT = 'action.lang.toggleDefault'; const BEFORE_UPDATELANG = 'action.lang.beforeUpdate'; diff --git a/templates/admin/default/languages.html b/templates/admin/default/languages.html index 9611d6b84..b1a0433da 100644 --- a/templates/admin/default/languages.html +++ b/templates/admin/default/languages.html @@ -93,8 +93,9 @@
{intl l="Parameters"}
{form name="thelia.lang.defaultBehavior"}
+ {form_hidden_fields form=$form} {form_field form=$form field="behavior"} -
+