diff --git a/core/lib/Thelia/Action/Folder.php b/core/lib/Thelia/Action/Folder.php index c9f8a0dfd..b830947cc 100644 --- a/core/lib/Thelia/Action/Folder.php +++ b/core/lib/Thelia/Action/Folder.php @@ -28,6 +28,7 @@ use Thelia\Core\Event\FolderDeleteEvent; use Thelia\Core\Event\FolderToggleVisibilityEvent; use Thelia\Core\Event\FolderUpdateEvent; use Thelia\Core\Event\TheliaEvents; +use Thelia\Core\Event\UpdatePositionEvent; use Thelia\Model\FolderQuery; use Thelia\Model\Folder as FolderModel; @@ -100,6 +101,26 @@ class Folder extends BaseAction implements EventSubscriberInterface { } + public function updatePosition(UpdatePositionEvent $event) + { + if(null !== $folder = FolderQuery::create()->findPk($event->getObjectId())) { + $folder->setDispatcher($this->getDispatcher()); + + switch($event->getMode()) + { + case UpdatePositionEvent::POSITION_ABSOLUTE: + $folder->changeAbsolutePosition($event->getPosition()); + break; + case UpdatePositionEvent::POSITION_DOWN: + $folder->movePositionDown(); + break; + case UpdatePositionEvent::POSITION_UP: + $folder->movePositionUp(); + break; + } + } + } + /** * 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 dbb6b1199..0b129fd0b 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -216,6 +216,10 @@ Thelia\Controller\Admin\FolderController::deleteAction + + Thelia\Controller\Admin\FolderController::updatePositionAction + + diff --git a/core/lib/Thelia/Controller/Admin/FolderController.php b/core/lib/Thelia/Controller/Admin/FolderController.php index ea8e2f909..db8a83e48 100644 --- a/core/lib/Thelia/Controller/Admin/FolderController.php +++ b/core/lib/Thelia/Controller/Admin/FolderController.php @@ -27,6 +27,7 @@ use Thelia\Core\Event\FolderDeleteEvent; use Thelia\Core\Event\FolderToggleVisibilityEvent; use Thelia\Core\Event\FolderUpdateEvent; use Thelia\Core\Event\TheliaEvents; +use Thelia\Core\Event\UpdatePositionEvent; use Thelia\Form\FolderCreationForm; use Thelia\Form\FolderModificationForm; use Thelia\Model\FolderQuery; @@ -149,13 +150,27 @@ class FolderController extends AbstractCrudController } /** - * + * @return FolderToggleVisibilityEvent|void */ protected function createToggleVisibilityEvent() { return new FolderToggleVisibilityEvent($this->getExistingObject()); } + /** + * @param $positionChangeMode + * @param $positionValue + * @return UpdatePositionEvent|void + */ + protected function createUpdatePositionEvent($positionChangeMode, $positionValue) { + + return new UpdatePositionEvent( + $this->getRequest()->get('folder_id', null), + $positionChangeMode, + $positionValue + ); + } + /** * Return true if the event contains the object, e.g. the action has updated the object in the event. * @@ -272,6 +287,26 @@ class FolderController extends AbstractCrudController ); } + /** + * @param $event \Thelia\Core\Event\UpdatePositionEvent + * @return null|Response + */ + protected function performAdditionalUpdatePositionAction($event) + { + + $folder = FolderQuery::create()->findPk($event->getObjectId()); + + if ($folder != null) { + // Redirect to parent category list + $this->redirectToRoute( + 'admin.folders.default', + array('folder_id' => $folder->getParent()) + ); + } + + return null; + } + /** * Redirect to the edition template */