From abac6075340c78b344c586ca48a6a1c6dcedd1ae Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Fri, 20 Sep 2013 20:23:49 +0200 Subject: [PATCH] allow possibility to change folder visibility --- core/lib/Thelia/Action/Folder.php | 12 +++++++ .../Thelia/Config/Resources/routing/admin.xml | 8 +++-- .../Admin/AbstractCrudController.php | 5 +-- .../Controller/Admin/FolderController.php | 9 +++++ .../Event/FolderToggleVisibilityEvent.php | 34 +++++++++++++++++++ 5 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 core/lib/Thelia/Core/Event/FolderToggleVisibilityEvent.php diff --git a/core/lib/Thelia/Action/Folder.php b/core/lib/Thelia/Action/Folder.php index 647a6ac33..c9f8a0dfd 100644 --- a/core/lib/Thelia/Action/Folder.php +++ b/core/lib/Thelia/Action/Folder.php @@ -25,6 +25,7 @@ namespace Thelia\Action; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Thelia\Core\Event\FolderCreateEvent; use Thelia\Core\Event\FolderDeleteEvent; +use Thelia\Core\Event\FolderToggleVisibilityEvent; use Thelia\Core\Event\FolderUpdateEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Model\FolderQuery; @@ -88,6 +89,17 @@ class Folder extends BaseAction implements EventSubscriberInterface { $event->setFolder($folder); } + public function toggleVisibility(FolderToggleVisibilityEvent $event) + { + $folder = $event->getFolder(); + + $folder + ->setDispatcher($this->getDispatcher()) + ->setVisible(!$folder->getVisible()) + ->save(); + + } + /** * Returns an array of event names this subscriber wants to listen to. * diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index e371f685d..dbb6b1199 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -204,11 +204,15 @@ Thelia\Controller\Admin\FolderController::updateAction - + + Thelia\Controller\Admin\FolderController::setToggleVisibilityAction + + + Thelia\Controller\Admin\FolderController::processUpdateAction - + Thelia\Controller\Admin\FolderController::deleteAction diff --git a/core/lib/Thelia/Controller/Admin/AbstractCrudController.php b/core/lib/Thelia/Controller/Admin/AbstractCrudController.php index 7b9550610..a86f55b13 100644 --- a/core/lib/Thelia/Controller/Admin/AbstractCrudController.php +++ b/core/lib/Thelia/Controller/Admin/AbstractCrudController.php @@ -492,9 +492,6 @@ abstract class AbstractCrudController extends BaseAdminController $changeEvent = $this->createToggleVisibilityEvent($this->getRequest()); - // Create and dispatch the change event - $changeEvent->setIsDefault(true); - try { $this->dispatch($this->visibilityToggleEventIdentifier, $changeEvent); } catch (\Exception $ex) { @@ -502,7 +499,7 @@ abstract class AbstractCrudController extends BaseAdminController return $this->errorPage($ex); } - $this->redirectToListTemplate(); + return $this->nullResponse(); } /** diff --git a/core/lib/Thelia/Controller/Admin/FolderController.php b/core/lib/Thelia/Controller/Admin/FolderController.php index d75c0ab96..ea8e2f909 100644 --- a/core/lib/Thelia/Controller/Admin/FolderController.php +++ b/core/lib/Thelia/Controller/Admin/FolderController.php @@ -24,6 +24,7 @@ namespace Thelia\Controller\Admin; use Thelia\Core\Event\FolderCreateEvent; use Thelia\Core\Event\FolderDeleteEvent; +use Thelia\Core\Event\FolderToggleVisibilityEvent; use Thelia\Core\Event\FolderUpdateEvent; use Thelia\Core\Event\TheliaEvents; use Thelia\Form\FolderCreationForm; @@ -147,6 +148,14 @@ class FolderController extends AbstractCrudController return new FolderDeleteEvent($this->getRequest()->get('folder_id'), 0); } + /** + * + */ + protected function createToggleVisibilityEvent() + { + return new FolderToggleVisibilityEvent($this->getExistingObject()); + } + /** * Return true if the event contains the object, e.g. the action has updated the object in the event. * diff --git a/core/lib/Thelia/Core/Event/FolderToggleVisibilityEvent.php b/core/lib/Thelia/Core/Event/FolderToggleVisibilityEvent.php new file mode 100644 index 000000000..9d7c53ab7 --- /dev/null +++ b/core/lib/Thelia/Core/Event/FolderToggleVisibilityEvent.php @@ -0,0 +1,34 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event; + + +/** + * Class FolderToggleVisibilityEvent + * @package Thelia\Core\Event + * @author Manuel Raynaud + */ +class FolderToggleVisibilityEvent extends FolderEvent { + +} \ No newline at end of file