From 02322f8f11ff7a12738d610333866ee136c7de5e Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Tue, 1 Oct 2013 10:08:48 +0200 Subject: [PATCH] create removeAdditionalFolder controller, event and listener --- core/lib/Thelia/Action/Content.php | 19 +++++++++ .../Thelia/Config/Resources/routing/admin.xml | 4 +- .../Controller/Admin/ContentController.php | 39 ++++++++++++++++++- .../Content/ContentRemoveFolderEvent.php | 34 ++++++++++++++++ 4 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 core/lib/Thelia/Core/Event/Content/ContentRemoveFolderEvent.php diff --git a/core/lib/Thelia/Action/Content.php b/core/lib/Thelia/Action/Content.php index fa4229a02..cca90b2b2 100644 --- a/core/lib/Thelia/Action/Content.php +++ b/core/lib/Thelia/Action/Content.php @@ -27,6 +27,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Thelia\Core\Event\Content\ContentAddFolderEvent; use Thelia\Core\Event\Content\ContentCreateEvent; use Thelia\Core\Event\Content\ContentDeleteEvent; +use Thelia\Core\Event\Content\ContentRemoveFolderEvent; use Thelia\Core\Event\Content\ContentToggleVisibilityEvent; use Thelia\Core\Event\Content\ContentUpdateEvent; use Thelia\Core\Event\TheliaEvents; @@ -127,6 +128,12 @@ class Content extends BaseAction implements EventSubscriberInterface } } + /** + * + * associate a folder to a content if the association already does not exists + * + * @param ContentAddFolderEvent $event + */ public function addFolder(ContentAddFolderEvent $event) { if(ContentFolderQuery::create() @@ -144,6 +151,18 @@ class Content extends BaseAction implements EventSubscriberInterface } } + public function removeFolder(ContentRemoveFolderEvent $event) + { + $contentFolder = ContentFolderQuery::create() + ->filterByContent($event->getContent()) + ->filterByFolderId($event->getFolderId()) + ->findOne(); + + if(null !== $contentFolder) { + $contentFolder->delete(); + } + } + /** * 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 246279f08..2c595b877 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -396,11 +396,11 @@ - Thelia\Controller\Admin\ContentController::addAdditionalCategoryAction + Thelia\Controller\Admin\ContentController::addAdditionalFolderAction - Thelia\Controller\Admin\ContentController::deleteAdditionalCategoryAction + Thelia\Controller\Admin\ContentController::removeAdditionalFolderAction diff --git a/core/lib/Thelia/Controller/Admin/ContentController.php b/core/lib/Thelia/Controller/Admin/ContentController.php index 6929be41c..c3811695f 100644 --- a/core/lib/Thelia/Controller/Admin/ContentController.php +++ b/core/lib/Thelia/Controller/Admin/ContentController.php @@ -25,6 +25,7 @@ namespace Thelia\Controller\Admin; use Thelia\Core\Event\Content\ContentAddFolderEvent; use Thelia\Core\Event\Content\ContentCreateEvent; use Thelia\Core\Event\Content\ContentDeleteEvent; +use Thelia\Core\Event\Content\ContentRemoveFolderEvent; use Thelia\Core\Event\Content\ContentToggleVisibilityEvent; use Thelia\Core\Event\Content\ContentUpdateEvent; use Thelia\Core\Event\TheliaEvents; @@ -61,6 +62,11 @@ class ContentController extends AbstractCrudController ); } + /** + * controller adding content to additional folder + * + * @return mixed|\Symfony\Component\HttpFoundation\Response + */ public function addAdditionalFolderAction() { // Check current user authorization @@ -75,12 +81,41 @@ class ContentController extends AbstractCrudController ); try { - + $this->dispatch(TheliaEvents::CONTENT_ADD_FOLDER, $event); } catch (\Exception $e) { - $this->errorPage($e); + return $this->errorPage($e); } } + $this->redirectToEditionTemplate(); + } + + /** + * controller removing additional folder to a content + * + * @return mixed|\Symfony\Component\HttpFoundation\Response + */ + public function removeAdditionalFolderAction() + { + // Check current user authorization + if (null !== $response = $this->checkAuth('admin.content.update')) return $response; + + $folder_id = intval($this->getRequest()->request->get('additional_folder_id')); + + if ($folder_id > 0) { + $event = new ContentRemoveFolderEvent( + $this->getExistingObject(), + $folder_id + ); + + try { + $this->dispatch(TheliaEvents::CONTENT_REMOVE_FOLDER, $event); + } catch (\Exception $e) { + return $this->errorPage($e); + } + } + + $this->redirectToEditionTemplate(); } /** diff --git a/core/lib/Thelia/Core/Event/Content/ContentRemoveFolderEvent.php b/core/lib/Thelia/Core/Event/Content/ContentRemoveFolderEvent.php new file mode 100644 index 000000000..195f4f3b0 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Content/ContentRemoveFolderEvent.php @@ -0,0 +1,34 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Content; + + +/** + * Class ContentRemoveFolderEvent + * @package Thelia\Core\Event\Content + * @author Manuel Raynaud + */ +class ContentRemoveFolderEvent extends ContentAddFolderEvent +{ +} \ No newline at end of file