diff --git a/core/lib/Thelia/Action/Administrator.php b/core/lib/Thelia/Action/Administrator.php new file mode 100644 index 000000000..0f3891e15 --- /dev/null +++ b/core/lib/Thelia/Action/Administrator.php @@ -0,0 +1,108 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Action; + +use Propel\Runtime\ActiveQuery\Criteria; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Thelia\Core\Event\Administrator\AdministratorEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Core\Security\AccessManager; +use Thelia\Model\Admin as AdminModel; +use Thelia\Model\AdminQuery; + +class Administrator extends BaseAction implements EventSubscriberInterface +{ + /** + * @param AdministratorEvent $event + */ + public function create(AdministratorEvent $event) + { + $administrator = new AdminModel(); + + $administrator + ->setDispatcher($this->getDispatcher()) + ->setFirstname($event->getFirstname()) + ->setLastname($event->getLastname()) + ->setLogin($event->getLogin()) + ->setPassword($event->getPassword()) + ->setProfileId($event->getProfile()) + ; + + $administrator->save(); + + $event->setAdministrator($administrator); + } + + /** + * @param AdministratorEvent $event + */ + public function update(AdministratorEvent $event) + { + if (null !== $administrator = AdminQuery::create()->findPk($event->getId())) { + + $administrator + ->setDispatcher($this->getDispatcher()) + ->setFirstname($event->getFirstname()) + ->setLastname($event->getLastname()) + ->setLogin($event->getLogin()) + ->setProfileId($event->getProfile()) + ; + + if('' !== $event->getPassword()) { + $administrator->setPassword($event->getPassword()); + } + + $administrator->save(); + + $event->setAdministrator($administrator); + } + } + + /** + * @param AdministratorEvent $event + */ + public function delete(AdministratorEvent $event) + { + if (null !== $administrator = AdminQuery::create()->findPk($event->getId())) { + + $administrator + ->delete() + ; + + $event->setAdministrator($administrator); + } + } + + /** + * {@inheritDoc} + */ + public static function getSubscribedEvents() + { + return array( + TheliaEvents::ADMINISTRATOR_CREATE => array("create", 128), + TheliaEvents::ADMINISTRATOR_UPDATE => array("update", 128), + TheliaEvents::ADMINISTRATOR_DELETE => array("delete", 128), + ); + } +} diff --git a/core/lib/Thelia/Command/GenerateResources.php b/core/lib/Thelia/Command/GenerateResources.php index 46924ac99..fcad56b41 100644 --- a/core/lib/Thelia/Command/GenerateResources.php +++ b/core/lib/Thelia/Command/GenerateResources.php @@ -28,6 +28,7 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Thelia\Command\ContainerAwareCommand; +use Thelia\Core\Security\Resource\AdminResources; use Thelia\Model\Admin; use Thelia\Model\Map\ResourceI18nTableMap; use Thelia\Model\Map\ResourceTableMap; @@ -72,7 +73,7 @@ class GenerateResources extends ContainerAwareCommand ); $compteur = 0; foreach($constants as $constant => $value) { - if($constant == 'SUPERADMINISTRATOR') { + if($constant == AdminResources::SUPERADMINISTRATOR) { continue; } $compteur++; @@ -87,7 +88,7 @@ class GenerateResources extends ContainerAwareCommand ); $compteur = 0; foreach($constants as $constant => $value) { - if($constant == 'SUPERADMINISTRATOR') { + if($constant == AdminResources::SUPERADMINISTRATOR) { continue; } @@ -105,7 +106,7 @@ class GenerateResources extends ContainerAwareCommand break; default : foreach($constants as $constant => $value) { - if($constant == 'SUPERADMINISTRATOR') { + if($constant == AdminResources::SUPERADMINISTRATOR) { continue; } $output->writeln('[' . $constant . "] => " . $value); diff --git a/core/lib/Thelia/Config/Resources/action.xml b/core/lib/Thelia/Config/Resources/action.xml index e5d6c9492..15737d79b 100755 --- a/core/lib/Thelia/Config/Resources/action.xml +++ b/core/lib/Thelia/Config/Resources/action.xml @@ -156,6 +156,11 @@ + + + + + diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index 09a1e60e8..c744b4820 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -133,6 +133,9 @@
+ + + @@ -141,8 +144,6 @@ - - diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml index 7b377b48e..cb6db3f9b 100755 --- a/core/lib/Thelia/Config/Resources/routing/admin.xml +++ b/core/lib/Thelia/Config/Resources/routing/admin.xml @@ -24,13 +24,6 @@ Thelia\Controller\Admin\SessionController::checkLoginAction - - - Thelia\Controller\Admin\AdminController::updateAction - - - - @@ -791,6 +784,26 @@ + + + + Thelia\Controller\Admin\AdministratorController::defaultAction + + + + Thelia\Controller\Admin\AdministratorController::createAction + + + + Thelia\Controller\Admin\AdministratorController::processUpdateAction + + + + Thelia\Controller\Admin\AdministratorController::deleteAction + + + + diff --git a/core/lib/Thelia/Controller/Admin/AdministratorController.php b/core/lib/Thelia/Controller/Admin/AdministratorController.php new file mode 100644 index 000000000..10780037a --- /dev/null +++ b/core/lib/Thelia/Controller/Admin/AdministratorController.php @@ -0,0 +1,201 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Controller\Admin; + +use Thelia\Core\Security\AccessManager; +use Thelia\Core\Security\Resource\AdminResources; +use Thelia\Core\Event\Administrator\AdministratorEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Form\AdministratorCreationForm; +use Thelia\Form\AdministratorModificationForm; +use Thelia\Model\AdminQuery; + + +class AdministratorController extends AbstractCrudController +{ + public function __construct() + { + parent::__construct( + 'administrator', + 'manual', + 'order', + + AdminResources::ADMINISTRATOR, + + TheliaEvents::ADMINISTRATOR_CREATE, + TheliaEvents::ADMINISTRATOR_UPDATE, + TheliaEvents::ADMINISTRATOR_DELETE + ); + } + + protected function getCreationForm() + { + return new AdministratorCreationForm($this->getRequest()); + } + + protected function getUpdateForm() + { + return new AdministratorModificationForm($this->getRequest()); + } + + protected function getCreationEvent($formData) + { + $event = new AdministratorEvent(); + + $event->setLogin($formData['login']); + $event->setFirstname($formData['firstname']); + $event->setLastname($formData['lastname']); + $event->setPassword($formData['password']); + $event->setProfile($formData['profile'] ? : null); + + return $event; + } + + protected function getUpdateEvent($formData) + { + $event = new AdministratorEvent(); + + $event->setId($formData['id']); + $event->setLogin($formData['login']); + $event->setFirstname($formData['firstname']); + $event->setLastname($formData['lastname']); + $event->setPassword($formData['password']); + $event->setProfile($formData['profile'] ? : null); + + return $event; + } + + protected function getDeleteEvent() + { + $event = new AdministratorEvent(); + + $event->setId( + $this->getRequest()->get('administrator_id', 0) + ); + + return $event; + } + + protected function eventContainsObject($event) + { + return $event->hasAdministrator(); + } + + protected function hydrateObjectForm($object) + { + $data = array( + 'id' => $object->getId(), + 'firstname' => $object->getFirstname(), + 'lastname' => $object->getLastname(), + 'login' => $object->getLogin(), + 'profile' => $object->getProfileId(), + ); + + // Setup the object form + return new AdministratorModificationForm($this->getRequest(), "form", $data); + } + + protected function hydrateResourceUpdateForm($object) + { + $data = array( + 'id' => $object->getId(), + ); + + // Setup the object form + return new AdministratorUpdateResourceAccessForm($this->getRequest(), "form", $data); + } + + protected function hydrateModuleUpdateForm($object) + { + $data = array( + 'id' => $object->getId(), + ); + + // Setup the object form + return new AdministratorUpdateModuleAccessForm($this->getRequest(), "form", $data); + } + + protected function getObjectFromEvent($event) + { + return $event->hasAdministrator() ? $event->getAdministrator() : null; + } + + protected function getExistingObject() + { + return AdminQuery::create() + ->joinWithI18n($this->getCurrentEditionLocale()) + ->findOneById($this->getRequest()->get('administrator_id')); + } + + protected function getObjectLabel($object) + { + return $object->getLogin(); + } + + protected function getObjectId($object) + { + return $object->getId(); + } + + + protected function renderListTemplate($currentOrder) + { + // We always return to the feature edition form + return $this->render( + 'administrators', + array() + ); + } + + protected function renderEditionTemplate() + { + // We always return to the feature edition form + return $this->render('administrators'); + } + + protected function redirectToEditionTemplate() + { + // We always return to the feature edition form + $this->redirectToListTemplate(); + } + + protected function performAdditionalCreateAction($updateEvent) + { + // We always return to the feature edition form + $this->redirectToListTemplate(); + } + + protected function performAdditionalUpdateAction($updateEvent) + { + // We always return to the feature edition form + $this->redirectToListTemplate(); + } + + protected function redirectToListTemplate() + { + $this->redirectToRoute( + "admin.configuration.administrators.view" + ); + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Event/Administrator/AdministratorEvent.php b/core/lib/Thelia/Core/Event/Administrator/AdministratorEvent.php new file mode 100644 index 000000000..070e57f87 --- /dev/null +++ b/core/lib/Thelia/Core/Event/Administrator/AdministratorEvent.php @@ -0,0 +1,120 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Event\Administrator; + +use Thelia\Core\Event\ActionEvent; +use Thelia\Model\Admin; + +class AdministratorEvent extends ActionEvent +{ + protected $administrator = null; + protected $id = null; + protected $firstname = null; + protected $lastname = null; + protected $login = null; + protected $password = null; + protected $profile = null; + + public function __construct(Admin $administrator = null) + { + $this->administrator = $administrator; + } + + public function hasAdministrator() + { + return ! is_null($this->administrator); + } + + public function getAdministrator() + { + return $this->administrator; + } + + public function setAdministrator(Admin $administrator) + { + $this->administrator = $administrator; + + return $this; + } + + public function setId($id) + { + $this->id = $id; + } + + public function getId() + { + return $this->id; + } + + public function setFirstname($firstname) + { + $this->firstname = $firstname; + } + + public function getFirstname() + { + return $this->firstname; + } + + public function setLastname($lastname) + { + $this->lastname = $lastname; + } + + public function getLastname() + { + return $this->lastname; + } + + public function setLogin($login) + { + $this->login = $login; + } + + public function getLogin() + { + return $this->login; + } + + public function setPassword($password) + { + $this->password = $password; + } + + public function getPassword() + { + return $this->password; + } + + public function setProfile($profile) + { + $this->profile = $profile; + } + + public function getProfile() + { + return $this->profile; + } +} diff --git a/core/lib/Thelia/Core/Event/TheliaEvents.php b/core/lib/Thelia/Core/Event/TheliaEvents.php index bc16115f9..db5ea6aa6 100755 --- a/core/lib/Thelia/Core/Event/TheliaEvents.php +++ b/core/lib/Thelia/Core/Event/TheliaEvents.php @@ -555,6 +555,12 @@ final class TheliaEvents const PROFILE_RESOURCE_ACCESS_UPDATE = "action.updateProfileResourceAccess"; const PROFILE_MODULE_ACCESS_UPDATE = "action.updateProfileModuleAccess"; + // -- Administrator management --------------------------------------------- + + const ADMINISTRATOR_CREATE = "action.createAdministrator"; + const ADMINISTRATOR_UPDATE = "action.updateAdministrator"; + const ADMINISTRATOR_DELETE = "action.deleteAdministrator"; + // -- Tax Rules management --------------------------------------------- const TAX_RULE_CREATE = "action.createTaxRule"; diff --git a/core/lib/Thelia/Core/Security/Resource/AdminResources.php b/core/lib/Thelia/Core/Security/Resource/AdminResources.php index 8ca3bdd82..d935c64ab 100644 --- a/core/lib/Thelia/Core/Security/Resource/AdminResources.php +++ b/core/lib/Thelia/Core/Security/Resource/AdminResources.php @@ -37,16 +37,16 @@ final class AdminResources static public function retrieve($name) { - $contantName = strtoupper($name); + $constantName = strtoupper($name); if(null === self::$selfReflection) { self::$selfReflection = new \ReflectionClass(__CLASS__); } - if(self::$selfReflection->hasConstant($contantName)) { - return self::$selfReflection->getConstant($contantName); + if(self::$selfReflection->hasConstant($constantName)) { + return self::$selfReflection->getConstant($constantName); } else { - throw new ResourceException(sprintf('Resource `%s` not found', $contantName), ResourceException::RESOURCE_NOT_FOUND); + throw new ResourceException(sprintf('Resource `%s` not found', $constantName), ResourceException::RESOURCE_NOT_FOUND); } } @@ -54,7 +54,7 @@ final class AdminResources const ADDRESS = "admin.address"; - const ADMIN = "admin.configuration.admin"; + const ADMINISTRATOR = "admin.configuration.administrator"; const AREA = "admin.configuration.area"; diff --git a/core/lib/Thelia/Form/AdministratorCreationForm.php b/core/lib/Thelia/Form/AdministratorCreationForm.php new file mode 100644 index 000000000..afab36cac --- /dev/null +++ b/core/lib/Thelia/Form/AdministratorCreationForm.php @@ -0,0 +1,138 @@ +. */ +/* */ +/*************************************************************************************/ +namespace Thelia\Form; + +use Symfony\Component\Validator\Constraints; +use Symfony\Component\Validator\Constraints\NotBlank; +use Symfony\Component\Validator\ExecutionContextInterface; +use Thelia\Core\Security\AccessManager; +use Thelia\Core\Security\Resource\AdminResources; +use Thelia\Core\Translation\Translator; +use Thelia\Model\AdminQuery; +use Thelia\Model\ProfileQuery; +use Thelia\Model\ConfigQuery; + +class AdministratorCreationForm extends BaseForm +{ + const PROFILE_FIELD_PREFIX = "profile"; + + protected function buildForm() + { + $this->formBuilder + ->add("login", "text", array( + "constraints" => array( + new Constraints\NotBlank(), + new Constraints\Callback(array( + "methods" => array( + array($this, "verifyExistingLogin"), + ) + )), + ), + "label" => Translator::getInstance()->trans("Login"), + "label_attr" => array( + "for" => "login" + ), + )) + ->add("firstname", "text", array( + "constraints" => array( + new Constraints\NotBlank() + ), + "label" => Translator::getInstance()->trans("First Name"), + "label_attr" => array( + "for" => "firstname" + ), + )) + ->add("lastname", "text", array( + "constraints" => array( + new Constraints\NotBlank() + ), + "label" => Translator::getInstance()->trans("Last Name"), + "label_attr" => array( + "for" => "lastname" + ) + )) + ->add("password", "password", array( + "constraints" => array(), + "label" => Translator::getInstance()->trans("Password"), + "label_attr" => array( + "for" => "password" + ), + )) + ->add("password_confirm", "password", array( + "constraints" => array( + new Constraints\Callback(array("methods" => array( + array($this, "verifyPasswordField") + ))) + ), + "label" => "Password confirmation", + "label_attr" => array( + "for" => "password_confirmation" + ), + )) + ->add( + 'profile', + "choice", + array( + "choices" => ProfileQuery::getProfileList(), + "constraints" => array( + new Constraints\NotBlank(), + ), + "label" => "Profile", + "label_attr" => array( + "for" => "profile" + ), + ) + ) + ; + } + + public function verifyPasswordField($value, ExecutionContextInterface $context) + { + $data = $context->getRoot()->getData(); + + if($data["password"] === '' && $data["password_confirm"] === '') { + $context->addViolation("password can't be empty"); + } + + if ($data["password"] != $data["password_confirm"]) { + $context->addViolation("password confirmation is not the same as password field"); + } + + if(strlen($data["password"]) < 4) { + $context->addViolation("password must be composed of at least 4 characters"); + } + } + + public function verifyExistingLogin($value, ExecutionContextInterface $context) + { + $administrator = AdminQuery::create()->findOneByLogin($value); + if ($administrator !== null) { + $context->addViolation("This login already exists"); + } + } + + public function getName() + { + return "thelia_admin_administrator_creation"; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Form/AdminProfileCreationForm.php b/core/lib/Thelia/Form/AdministratorModificationForm.php old mode 100644 new mode 100755 similarity index 50% rename from core/lib/Thelia/Form/AdminProfileCreationForm.php rename to core/lib/Thelia/Form/AdministratorModificationForm.php index 34ce7556b..68ad228a5 --- a/core/lib/Thelia/Form/AdminProfileCreationForm.php +++ b/core/lib/Thelia/Form/AdministratorModificationForm.php @@ -4,7 +4,7 @@ /* Thelia */ /* */ /* Copyright (c) OpenStudio */ -/* email : info@thelia.net */ +/* email : info@thelia.net */ /* web : http://www.thelia.net */ /* */ /* This program is free software; you can redistribute it and/or modify */ @@ -20,46 +20,78 @@ /* along with this program. If not, see . */ /* */ /*************************************************************************************/ + namespace Thelia\Form; use Symfony\Component\Validator\Constraints; -use Symfony\Component\Validator\Constraints\NotBlank; +use Symfony\Component\Validator\ExecutionContextInterface; use Thelia\Core\Translation\Translator; +use Thelia\Model\AdminQuery; -class AdminProfileCreationForm extends BaseForm +class AdministratorModificationForm extends AdministratorCreationForm { protected function buildForm() { + parent::buildForm(); + $this->formBuilder - ->add("wording" , "text" , array( + ->add("id", "hidden", array( + "required" => true, "constraints" => array( - new NotBlank() + new Constraints\NotBlank(), + new Constraints\Callback( + array( + "methods" => array( + array($this, "verifyAdministratorId"), + ), + ) + ), ), - "label" => Translator::getInstance()->trans("Wording *"), - "label_attr" => array( - "for" => "wording" - )) - ) - ->add("name" , "text" , array( - "constraints" => array( - new NotBlank() + "attr" => array( + "id" => "administrator_update_id", ), - "label" => Translator::getInstance()->trans("Name *"), - "label_attr" => array( - "for" => "name" - )) - ) - ->add("description" , "text" , array( - "label" => Translator::getInstance()->trans("Description"), - "label_attr" => array( - "for" => "description" - )) - ) + )) ; } + /** + * @return string the name of you form. This name must be unique + */ public function getName() { - return "thelia_admin_profile_creation"; + return "thelia_admin_administrator_modification"; } -} \ No newline at end of file + + public function verifyAdministratorId($value, ExecutionContextInterface $context) + { + $administrator = AdminQuery::create() + ->findPk($value); + + if (null === $administrator) { + $context->addViolation("Administrator ID not found"); + } + } + + public function verifyExistingLogin($value, ExecutionContextInterface $context) + { + $data = $context->getRoot()->getData(); + + $administrator = AdminQuery::create()->findOneByLogin($value); + if ($administrator !== null && $administrator->getId() != $data['id']) { + $context->addViolation("This login already exists"); + } + } + + public function verifyPasswordField($value, ExecutionContextInterface $context) + { + $data = $context->getRoot()->getData(); + + if ($data["password"] != $data["password_confirm"]) { + $context->addViolation("password confirmation is not the same as password field"); + } + + if($data["password"] !== '' && strlen($data["password"]) < 4) { + $context->addViolation("password must be composed of at least 4 characters"); + } + } +} diff --git a/core/lib/Thelia/Form/ProfileUpdateModuleAccessForm.php b/core/lib/Thelia/Form/ProfileUpdateModuleAccessForm.php index bbbc869ee..fcbee854f 100644 --- a/core/lib/Thelia/Form/ProfileUpdateModuleAccessForm.php +++ b/core/lib/Thelia/Form/ProfileUpdateModuleAccessForm.php @@ -71,7 +71,6 @@ class ProfileUpdateModuleAccessForm extends BaseForm "attr" => array( "tag" => "modules", "module_code" => $module->getCode(), - "module_title" => $module->getTitle(), ), "multiple" => true, "constraints" => array( diff --git a/core/lib/Thelia/Form/ProfileUpdateResourceAccessForm.php b/core/lib/Thelia/Form/ProfileUpdateResourceAccessForm.php index 0c51b71aa..99ef2ccf3 100644 --- a/core/lib/Thelia/Form/ProfileUpdateResourceAccessForm.php +++ b/core/lib/Thelia/Form/ProfileUpdateResourceAccessForm.php @@ -71,7 +71,6 @@ class ProfileUpdateResourceAccessForm extends BaseForm "attr" => array( "tag" => "resources", "resource_code" => $resource->getCode(), - "resource_title" => $resource->getTitle(), ), "multiple" => true, "constraints" => array( diff --git a/core/lib/Thelia/Model/Admin.php b/core/lib/Thelia/Model/Admin.php index 1c13ea6f1..84fb65b35 100755 --- a/core/lib/Thelia/Model/Admin.php +++ b/core/lib/Thelia/Model/Admin.php @@ -10,6 +10,7 @@ use Thelia\Core\Security\Role\Role; use Thelia\Model\Base\Admin as BaseAdmin; use Propel\Runtime\Connection\ConnectionInterface; +use Thelia\Model\Tools\ModelEventDispatcherTrait; /** * Skeleton subclass for representing a row from the 'admin' table. @@ -24,6 +25,8 @@ use Propel\Runtime\Connection\ConnectionInterface; */ class Admin extends BaseAdmin implements UserInterface { + use ModelEventDispatcherTrait; + public function getPermissions() { $profileId = $this->getProfileId(); diff --git a/core/lib/Thelia/Model/ProfileQuery.php b/core/lib/Thelia/Model/ProfileQuery.php index bb3dcef98..f5e9616c5 100644 --- a/core/lib/Thelia/Model/ProfileQuery.php +++ b/core/lib/Thelia/Model/ProfileQuery.php @@ -2,6 +2,7 @@ namespace Thelia\Model; +use Thelia\Core\Security\Resource\AdminResources; use Thelia\Model\Base\ProfileQuery as BaseProfileQuery; @@ -17,5 +18,14 @@ use Thelia\Model\Base\ProfileQuery as BaseProfileQuery; */ class ProfileQuery extends BaseProfileQuery { - + public static function getProfileList() + { + $profileList = array( + 0 => AdminResources::SUPERADMINISTRATOR, + ); + foreach(ProfileQuery::create()->find() as $profile) { + $profileList[$profile->getId()] = $profile->getCode(); + } + return $profileList; + } } // ProfileQuery diff --git a/templates/admin/default/administrators.html b/templates/admin/default/administrators.html new file mode 100644 index 000000000..9cb4a792a --- /dev/null +++ b/templates/admin/default/administrators.html @@ -0,0 +1,351 @@ +{extends file="admin-layout.tpl"} + +{block name="page-title"}{intl l='Taxes rules'}{/block} + +{block name="check-resource"}admin.configuration.administrator{/block} +{block name="check-access"}view{/block} + +{block name="main-content"} +
+ +
+ + + + {module_include location='administrators_top'} + +
+
+ +
+
+ + + + + + + + + + + + + + {loop type="admin" name="administrators" backend_context="1"} + + + + + + + + + + {/loop} + + +
+ {intl l="Taxes"} + {loop type="auth" name="can_create" role="ADMIN" resource="admin.administrator" access="CREATE"} + + + + {/loop} +
{intl l="Login"}{intl l="FirstName"}{intl l="LastName"}{intl l="Profile"}{intl l="Actions"}
{$LOGIN}{$FIRSTNAME}{$LASTNAME} + {if $PROFILE} + {loop type="profile" name="admin-profile" id=$PROFILE} + {$TITLE} + {/loop} + {else} + {intl l='Superadministrator'} + {/if} + +
+ {loop type="auth" name="can_change" role="ADMIN" resource="admin.configuration.administrator" access="UPDATE"} + + {/loop} + + {loop type="auth" name="can_delete" role="ADMIN" resource="admin.configuration.administrator" access="DELETE"} + + {/loop} +
+
+
+
+ + +
+
+ + {module_include location='administrators_bottom'} + +
+
+ +{* -- Add administrator confirmation dialog ----------------------------------- *} +{form name="thelia.admin.administrator.add"} + +{if $form_error_message} + {$administratorCreateError = true} +{else} + {$administratorCreateError = false} +{/if} + +{* Capture the dialog body, to pass it to the generic dialog *} +{capture "administrator_create_dialog"} + + {form_hidden_fields form=$form} + + {form_field form=$form field='login'} +
+ + +
+ {/form_field} + + {form_field form=$form field='firstname'} +
+ + +
+ {/form_field} + + {form_field form=$form field='lastname'} +
+ + +
+ {/form_field} + + {form_field form=$form field='password_confirm'} + {$passwordError = $error} + {/form_field} + + {form_field form=$form field='password'} +
+ + +
+ {/form_field} + + {form_field form=$form field='password_confirm'} +
+ + +
+ {/form_field} + + {form_field form=$form field='profile'} +
+ + + + +
+ {/form_field} + +{/capture} + + {include + file = "includes/generic-create-dialog.html" + + dialog_id = "administrator_create_dialog" + dialog_title = {intl l="Create a new administrator"} + dialog_body = {$smarty.capture.administrator_create_dialog nofilter} + + dialog_ok_label = {intl l="Create"} + dialog_cancel_label = {intl l="Cancel"} + + form_action = {url path="/admin/configuration/administrators/add"} + form_enctype = {form_enctype form=$form} + form_error_message = $form_error_message + } + +{/form} + +{* -- Update administrator confirmation dialog ----------------------------------- *} +{form name="thelia.admin.administrator.update"} + +{if $form_error_message} + {$administratorUpdateError = true} +{else} + {$administratorUpdateError = false} +{/if} + +{* Capture the dialog body, to pass it to the generic dialog *} +{capture "administrator_update_dialog"} + + {form_hidden_fields form=$form} + + {form_field form=$form field='login'} +
+ + +
+ {/form_field} + + {form_field form=$form field='firstname'} +
+ + +
+ {/form_field} + + {form_field form=$form field='lastname'} +
+ + +
+ {/form_field} + + {form_field form=$form field='password_confirm'} + {$passwordError = $error} + {/form_field} + + {form_field form=$form field='password'} +
+ + +
+ {/form_field} + + {form_field form=$form field='password_confirm'} +
+ + +
+ {/form_field} + + {form_field form=$form field='profile'} +
+ + + + +
+ {/form_field} + +{/capture} + + {include + file = "includes/generic-create-dialog.html" + + dialog_id = "administrator_update_dialog" + dialog_title = {intl l="Update a new administrator"} + dialog_body = {$smarty.capture.administrator_update_dialog nofilter} + + dialog_ok_label = {intl l="Update"} + dialog_cancel_label = {intl l="Cancel"} + + form_action = {url path="/admin/configuration/administrators/save"} + form_enctype = {form_enctype form=$form} + form_error_message = $form_error_message + } + +{/form} + +{* -- Delete administrator confirmation dialog ----------------------------------- *} + +{capture "administrator_delete_dialog"} + + + {module_include location='administrator_delete_form'} + +{/capture} + +{include + file = "includes/generic-confirm-dialog.html" + + dialog_id = "administrator_delete_dialog" + dialog_title = {intl l="Delete administrator"} + dialog_message = {intl l="Do you really want to delete this administrator ?"} + + form_action = {url path='/admin/configuration/administrators/delete'} + form_content = {$smarty.capture.administrator_delete_dialog nofilter} +} + +{include + file = "includes/generic-warning-dialog.html" + + dialog_id = "administrator_cannot_delete_dialog" + dialog_title = {intl l="You can't delete this administrator"} + dialog_body = {intl l="They are some administrator which are linked to this administrator. Please edit/remove them before deleting this administrator."} +} + +{/block} + +{block name="javascript-initialization"} + +{javascripts file='assets/js/bootstrap-select/bootstrap-select.js'} + +{/javascripts} + +{javascripts file='assets/js/main.js'} + +{/javascripts} + + + +{/block} \ No newline at end of file