diff --git a/core/lib/Thelia/Action/Lang.php b/core/lib/Thelia/Action/Lang.php index bf3df3f62..a539cd486 100644 --- a/core/lib/Thelia/Action/Lang.php +++ b/core/lib/Thelia/Action/Lang.php @@ -23,10 +23,12 @@ namespace Thelia\Action; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Thelia\Core\Event\Lang\LangCreateEvent; use Thelia\Core\Event\Lang\LangToggleDefaultEvent; use Thelia\Core\Event\Lang\LangUpdateEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Model\LangQuery; +use Thelia\Model\Lang as LangModel; /** @@ -64,6 +66,21 @@ class Lang extends BaseAction implements EventSubscriberInterface } } + public function create(LangCreateEvent $event) + { + $lang = new LangModel(); + + $lang + ->setTitle($event->getTitle()) + ->setCode($event->getCode()) + ->setLocale($event->getLocale()) + ->setDateFormat($event->getDateFormat()) + ->setTimeFormat($event->getTimeFormat()) + ->save(); + + $event->setLang($lang); + } + /** * Returns an array of event names this subscriber wants to listen to. * @@ -88,7 +105,8 @@ class Lang extends BaseAction implements EventSubscriberInterface { return array( TheliaEvents::LANG_UPDATE => array('update', 128), - TheliaEvents::LANG_TOGGLEDEFAULT => array('toggleDefault', 128) + TheliaEvents::LANG_TOGGLEDEFAULT => array('toggleDefault', 128), + TheliaEvents::LANG_CREATE => array('create', 128) ); } } \ No newline at end of file diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index 67c856a05..875215015 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -138,8 +138,6 @@
- - @@ -155,6 +153,7 @@ + diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index 744d24ca8..d61e2ce72 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -941,6 +941,10 @@ \d+ + + Thelia\Controller\Admin\LangController::addAction + + diff --git a/core/lib/Thelia/Controller/Admin/BaseAdminController.php b/core/lib/Thelia/Controller/Admin/BaseAdminController.php index b7d80383f..be6deca15 100755 --- a/core/lib/Thelia/Controller/Admin/BaseAdminController.php +++ b/core/lib/Thelia/Controller/Admin/BaseAdminController.php @@ -136,7 +136,7 @@ class BaseAdminController extends BaseController // Generate the proper response $response = new Response(); - return $this->errorPage($this->getTranslator()->trans("Sorry, you're not allowed to perform this action")); + return $this->errorPage($this->getTranslator()->trans("Sorry, you're not allowed to perform this action"), 403); } /* diff --git a/core/lib/Thelia/Controller/Admin/LangController.php b/core/lib/Thelia/Controller/Admin/LangController.php index 5dc950d6f..71e95988f 100644 --- a/core/lib/Thelia/Controller/Admin/LangController.php +++ b/core/lib/Thelia/Controller/Admin/LangController.php @@ -23,11 +23,15 @@ namespace Thelia\Controller\Admin; +use Symfony\Component\Form\Form; +use Thelia\Core\Event\Lang\LangCreateEvent; use Thelia\Core\Event\Lang\LangToggleDefaultEvent; use Thelia\Core\Event\Lang\LangUpdateEvent; use Thelia\Core\Event\TheliaEvents; 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\LangUpdateForm; use Thelia\Model\LangQuery; @@ -83,13 +87,7 @@ class LangController extends BaseAdminController $form = $this->validateForm($langForm); $event = new LangUpdateEvent($form->get('id')->getData()); - $event - ->setTitle($form->get('title')->getData()) - ->setCode($form->get('code')->getData()) - ->setLocale($form->get('locale')->getData()) - ->setDateFormat($form->get('date_format')->getData()) - ->setTimeFormat($form->get('time_format')->getData()) - ; + $event = $this->hydrateEvent($event, $form); $this->dispatch(TheliaEvents::LANG_UPDATE, $event); @@ -108,6 +106,17 @@ class LangController extends BaseAdminController return $this->render('languages'); } + protected function hydrateEvent($event,Form $form) + { + return $event + ->setTitle($form->get('title')->getData()) + ->setCode($form->get('code')->getData()) + ->setLocale($form->get('locale')->getData()) + ->setDateFormat($form->get('date_format')->getData()) + ->setTimeFormat($form->get('time_format')->getData()) + ; + } + public function toggleDefaultAction($lang_id) { if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, AccessManager::UPDATE)) return $response; @@ -138,4 +147,46 @@ class LangController extends BaseAdminController return $this->nullResponse(); } } + + public function addAction() + { + if (null !== $response = $this->checkAuth(AdminResources::LANGUAGE, AccessManager::CREATE)) return $response; + + $createForm = new LangCreateForm($this->getRequest()); + + $error_msg = false; + + try { + $form = $this->validateForm($createForm); + + $createEvent = new LangCreateEvent(); + $createEvent = $this->hydrateEvent($createEvent, $form); + + $this->dispatch(TheliaEvents::LANG_CREATE, $createEvent); + + if (false === $createEvent->hasLang()) { + throw new \LogicException( + $this->getTranslator()->trans("No %obj was updated.", array('%obj', 'Lang'))); + } + + $createdObject = $createEvent->getLang(); + $this->adminLogAppend(sprintf("%s %s (ID %s) created", 'Lang', $createdObject->getTitle(), $createdObject->getId())); + + $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, $createForm, $ex); + + // At this point, the form has error, and should be redisplayed. + return $this->render('languages'); + + } } \ 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 9aede0ae2..5da2dc88c 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -692,6 +692,7 @@ final class TheliaEvents /************ LANG MANAGEMENT ****************************/ const LANG_UPDATE = 'action.lang.update'; + const LANG_CREATE = 'action.lang.create'; const LANG_TOGGLEDEFAULT = 'action.lang.toggleDefault'; diff --git a/core/lib/Thelia/Form/LanguageCreationForm.php b/core/lib/Thelia/Form/LanguageCreationForm.php deleted file mode 100644 index 713cafcd9..000000000 --- a/core/lib/Thelia/Form/LanguageCreationForm.php +++ /dev/null @@ -1,58 +0,0 @@ -. */ -/* */ -/*************************************************************************************/ -namespace Thelia\Form; - -use Symfony\Component\Validator\Constraints\NotBlank; -use Thelia\Core\Translation\Translator; - -class LanguageCreationForm extends BaseForm -{ - protected function buildForm() - { - $this->formBuilder - ->add("title", "text", array( - "constraints" => array( - new NotBlank() - ), - "label" => Translator::getInstance()->trans("Language title *"), - "label_attr" => array( - "for" => "title" - ) - )) - ->add("isocode", "text", array( - "constraints" => array( - new NotBlank() - ), - "label" => Translator::getInstance()->trans("ISO Code *"), - "label_attr" => array( - "for" => "isocode" - ) - )) - ; - } - - public function getName() - { - return "thelia_language_creation"; - } -} diff --git a/templates/admin/default/admin-layout.tpl b/templates/admin/default/admin-layout.tpl index 3d671ecb2..dc667e6fc 100644 --- a/templates/admin/default/admin-layout.tpl +++ b/templates/admin/default/admin-layout.tpl @@ -250,6 +250,17 @@ {block name="javascript-initialization"}{/block} + + {* Modules scripts are included now *} {module_include location='footer_js'} diff --git a/templates/admin/default/includes/generic-create-dialog.html b/templates/admin/default/includes/generic-create-dialog.html index fe3488535..f9a79a98b 100755 --- a/templates/admin/default/includes/generic-create-dialog.html +++ b/templates/admin/default/includes/generic-create-dialog.html @@ -15,7 +15,7 @@ A generic modal creation dialog template. Parameters ok_button_id (optionnal) = the id of the OK button *} -