diff --git a/core/lib/Thelia/Action/Folder.php b/core/lib/Thelia/Action/Folder.php new file mode 100644 index 000000000..12d78e125 --- /dev/null +++ b/core/lib/Thelia/Action/Folder.php @@ -0,0 +1,91 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Action; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Thelia\Core\Event\FolderUpdateEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Model\FolderQuery; + + +/** + * Class Folder + * @package Thelia\Action + * @author Manuel Raynaud + */ +class Folder extends BaseAction implements EventSubscriberInterface { + + + public function update(FolderUpdateEvent $event) + { + + if (null !== $folder = FolderQuery::create()->findPk($event->getFolderId())) { + $folder->setDispatcher($this->getDispatcher()); + + $folder + ->setParent($event->getParent()) + ->setVisible($event->getVisible()) + ->setLocale($event->getLocale()) + ->setTitle($event->getTitle()) + ->setDescription($event->getDescription()) + ->setChapo($event->getChapo()) + ->setPostscriptum($event->getPostscriptum()) + ->save(); + ; + + $event->setFolder($folder); + } + } + + /** + * Returns an array of event names this subscriber wants to listen to. + * + * The array keys are event names and the value can be: + * + * * The method name to call (priority defaults to 0) + * * An array composed of the method name to call and the priority + * * An array of arrays composed of the method names to call and respective + * priorities, or 0 if unset + * + * For instance: + * + * * array('eventName' => 'methodName') + * * array('eventName' => array('methodName', $priority)) + * * array('eventName' => array(array('methodName1', $priority), array('methodName2')) + * + * @return array The event names to listen to + * + * @api + */ + public static function getSubscribedEvents() + { + return array( + TheliaEvents::FOLDER_CREATE => array("create", 128), + TheliaEvents::FOLDER_UPDATE => array("update", 128), + TheliaEvents::FOLDER_DELETE => array("delete", 128), + TheliaEvents::FOLDER_TOGGLE_VISIBILITY => array("toggleVisibility", 128), + + TheliaEvents::FOLDER_UPDATE_POSITION => array("updatePosition", 128), + ); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Config/Resources/action.xml b/core/lib/Thelia/Config/Resources/action.xml index f7ef4806d..801e68c6b 100755 --- a/core/lib/Thelia/Config/Resources/action.xml +++ b/core/lib/Thelia/Config/Resources/action.xml @@ -97,6 +97,11 @@ + + + + + diff --git a/core/lib/Thelia/Controller/Admin/FolderController.php b/core/lib/Thelia/Controller/Admin/FolderController.php index 8cfdda8a3..eec4733f2 100644 --- a/core/lib/Thelia/Controller/Admin/FolderController.php +++ b/core/lib/Thelia/Controller/Admin/FolderController.php @@ -143,7 +143,7 @@ class FolderController extends AbstractCrudController */ protected function eventContainsObject($event) { - // TODO: Implement eventContainsObject() method. + return $event->hasFolder(); } /** @@ -170,9 +170,8 @@ class FolderController extends AbstractCrudController * * @param unknown $object */ - protected function getObjectLabel($object) - { - // TODO: Implement getObjectLabel() method. + protected function getObjectLabel($object) { + return $object->getTitle(); } /** @@ -182,7 +181,7 @@ class FolderController extends AbstractCrudController */ protected function getObjectId($object) { - // TODO: Implement getObjectId() method. + return $object->getId(); } /** @@ -220,12 +219,37 @@ class FolderController extends AbstractCrudController ); } + /** + * @param \Thelia\Core\Event\FolderUpdateEvent $updateEvent + * @return Response|void + */ + protected function performAdditionalUpdateAction($updateEvent) + { + if ($this->getRequest()->get('save_mode') != 'stay') { + + // Redirect to parent category list + $this->redirectToRoute( + 'admin.folders.default', + array('folder_id' => $updateEvent->getFolder()->getParent()) + ); + } + } + + protected function performAdditionalDeleteAction($deleteEvent) + { + // Redirect to parent category list + $this->redirectToRoute( + 'admin.folders.default', + array('folder_id' => $deleteEvent->getFolder()->getParent()) + ); + } + /** * Redirect to the edition template */ protected function redirectToEditionTemplate() { - // TODO: Implement redirectToEditionTemplate() method. + $this->redirectToRoute("admin.folders.update", $this->getEditionArguments()); } /** @@ -233,6 +257,9 @@ class FolderController extends AbstractCrudController */ protected function redirectToListTemplate() { - // TODO: Implement redirectToListTemplate() method. + $this->redirectToRoute( + 'admin.folders.default', + array('folder_id' => $this->getRequest()->get('folder_id', 0)) + ); } } \ No newline at end of file diff --git a/templates/admin/default/folder-edit.html b/templates/admin/default/folder-edit.html index cba9a2742..26795b7aa 100644 --- a/templates/admin/default/folder-edit.html +++ b/templates/admin/default/folder-edit.html @@ -67,7 +67,7 @@ {form_hidden_fields form=$form} {form_field form=$form field='success_url'} - + {/form_field} {form_field form=$form field='locale'}