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
*/