Commit 135b15c7 authored by David Surville's avatar David Surville
Browse files

Refonte des pages de gestion des rôles

parent f58bb053
Loading
Loading
Loading
Loading
Loading
+13 −8
Changes for config/merged/role.config.php: 13 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -9,6 +9,12 @@ use UnicaenUtilisateur\Form\Role\RoleHydratorFactory;
use UnicaenUtilisateur\Service\Role\RoleService;
use UnicaenUtilisateur\Service\Role\RoleServiceFactory;
use UnicaenUtilisateur\Provider\Privilege\RolePrivileges;
use UnicaenUtilisateur\Provider\Role\Config;
use UnicaenUtilisateur\Provider\Role\ConfigServiceFactory;
use UnicaenUtilisateur\Provider\Role\DbRole;
use UnicaenUtilisateur\Provider\Role\DbRoleServiceFactory;
use UnicaenUtilisateur\Provider\Role\Username;
use UnicaenUtilisateur\Provider\Role\UsernameServiceFactory;
use UnicaenPrivilege\Guard\PrivilegeController;
use Zend\Router\Http\Literal;
use Zend\Router\Http\Segment;
@@ -21,7 +27,7 @@ return [
                    'controller' => RoleController::class,
                    'action' => [
                        'index',
                        'listing',
                        'exporter',
                    ],
                    'privileges' => [
                        RolePrivileges::ROLE_AFFICHER,
@@ -63,13 +69,13 @@ return [
                ],
                'may_terminate' => true,
                'child_routes' => [
                    'listing' => [
                    'exporter' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/lister/:role',
                            'route'       => '/exporter/:role',
                            'defaults'    => [
                                'controller' => RoleController::class,
                                'action' => 'lister',
                                'action' => 'exporter',
                            ],
                        ],
                    ],
@@ -110,10 +116,9 @@ return [

    'service_manager' => [
        'factories' => [
            'UnicaenUtilisateur\Provider\Role\Config'         => 'UnicaenUtilisateur\Provider\Role\ConfigServiceFactory',
            'UnicaenUtilisateur\Provider\Role\Config'         => 'UnicaenUtilisateur\Provider\Role\ConfigServiceFactory',
            'UnicaenUtilisateur\Provider\Role\DbRole'         => 'UnicaenUtilisateur\Provider\Role\DbRoleServiceFactory',
            'UnicaenUtilisateur\Provider\Role\Username'       => 'UnicaenUtilisateur\Provider\Role\UsernameServiceFactory',
            Config::class => ConfigServiceFactory::class,
            DbRole::class => DbRoleServiceFactory::class,
            Username::class => UsernameServiceFactory::class,
            RoleService::class => RoleServiceFactory::class,
        ],
    ],
+4 −4
Changes for config/merged/utilisateur.config.php: 4 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ return [
                        'index',
                        'rechercher',
                        'lister',
                        'export'
                        'exporter'
                    ],
                    'privileges' => [
                        UtilisateurPrivileges::UTILISATEUR_AFFICHER,
@@ -109,13 +109,13 @@ return [
                            ],
                        ],
                    ],
                    'export' => [
                    'exporter' => [
                        'type'          => Literal::class,
                        'options'       => [
                            'route'       => '/export',
                            'route'       => '/exporter',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'export',
                                'action' => 'exporter',
                            ],
                        ],
                    ],
+40 −48
Changes for src/UnicaenUtilisateur/Controller/RoleController.php: 40 added lines, 48 removed lines.
Original line number Diff line number Diff line
@@ -31,12 +31,13 @@ class RoleController extends AbstractActionController {
        $roles = $this->roleService->findAll();

        return new ViewModel([
            'title' => "Gestion des rôles",
            'roles' => $roles,
            'identityprovider' => $this->identityProvider,
        ]);
    }

    public function listingAction()
    public function exporterAction()
    {
        $role = $this->roleService->getRequestedRole($this);

@@ -54,7 +55,7 @@ class RoleController extends AbstractActionController {
        }


        $headers = [ 'Nom d\'utilisateur', 'Nom affiché', 'Adresse électronique'];
        $headers = [ 'Identifiant de connexion', 'Nom', 'Adresse email'];

        $records = [];
        foreach ($users as $user) {
@@ -73,87 +74,78 @@ class RoleController extends AbstractActionController {
        $CSV->setHeader($headers);
        $CSV->setData($records);
        $CSV->setFilename($filename);

        return $CSV;
    }

    public function ajouterAction()
    {
        $role = $this->roleService->getEntityInstance();
        $form = $this->getRoleForm();
        $form = $this->roleForm;
        $form->setAttribute('action', $this->url()->fromRoute('unicaen-role/ajouter', [], [], true));
        $form->bind($role);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
        if ($data = $this->params()->fromPost()) {
            $form->setData($data);
            if ($form->isValid()) {
                $this->getRoleService()->create($role);
                //return $this->redirect()->toRoute('unicaen-role', [], [], true);
                try {
                    $this->roleService->create($role);
                    $this->flashMessenger()->addSuccessMessage(sprintf("Rôle <strong>%s</strong> créé avec succès.", $role->getLibelle()));
                } catch (Exception $e) {
                    $this->flashMessenger()->addErrorMessage(sprintf("Une erreur est survenu lors de la création du rôle <strong>%s</strong>.", $role->getLibelle()));
                }
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('unicaen-utilisateur/default/default-form');
        $vm->setVariables([
        $view = new ViewModel();
        $view->setTemplate('unicaen-utilisateur/default/form-role');
        $view->setVariables([
            'title' => 'Ajout d\'un nouveau rôle',
            'form' => $form,
        ]);
        return $vm;

        return $view;
    }

    public function modifierAction()
    {
        $role = $this->getRoleService()->getRequestedRole($this);
        $form = $this->getRoleForm();
        $role = $this->roleService->getRequestedRole($this);
        $form = $this->roleForm;
        $form->setAttribute('action', $this->url()->fromRoute('unicaen-role/modifier', ['role' => $role->getId()], [], true));
        $form->bind($role);
        $form->setOldLibelle($role->getLibelle());
        $form->setOldRoleId($role->getRoleId());

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
        if ($data = $this->params()->fromPost()) {
            $form->setData($data);
            if ($form->isValid()) {
                $this->getRoleService()->update($role);
                //return $this->redirect()->toRoute('unicaen-role', [], [], true);
                try {
                    $this->roleService->update($role);
                    $this->flashMessenger()->addSuccessMessage(sprintf("Rôle <strong>%s</strong> modifié avec succès.", $role->getLibelle()));
                } catch (Exception $e) {
                    $this->flashMessenger()->addErrorMessage(sprintf("Une erreur est survenu lors de la modification du rôle <strong>%s</strong>.", $role->getLibelle()));
                }
            }
        }

        $vm = new ViewModel();
        $vm->setTemplate('unicaen-utilisateur/default/default-form');
        $vm->setVariables([
            'title' => 'Ajout d\'un nouveau rôle',
        $view = new ViewModel();
        $view->setTemplate('unicaen-utilisateur/default/form-role');
        $view->setVariables([
            'title' => "Modification du rôle",
            'form' => $form,
        ]);
        return $vm;

        return $view;
    }

    public function supprimerAction()
    {
        $role = $this->getRoleService()->getRequestedRole($this);

        /** @var Request $request */
        $request = $this->getRequest();
        if ($request->isPost()) {
            $data = $request->getPost();
            if ($data["reponse"] === "oui") $this->getRoleService()->delete($role);
            //return $this->redirect()->toRoute('unicaen-role', [], [], true);
            exit();
        }

        $vm = new ViewModel();
        if ($role !== null) {
            $vm->setTemplate('unicaen-utilisateur/default/confirmation');
            $vm->setVariables([
                'title' => "Suppression du rôle " . $role->getLibelle(),
                'text' => "La suppression est définitive êtes-vous sûr&middot;e de vouloir continuer ?",
                'action' => $this->url()->fromRoute('unicaen-role/supprimer', ["role" => $role->getId()], [], true),
            ]);
        try {
            $role = $this->roleService->getRequestedRole($this);
//            $this->roleService->supprimer($role);
            $this->flashMessenger()->addSuccessMessage(sprintf("Rôle <strong>%s</strong> supprimé avec succès.", $role->getLibelle()));
        } catch (Exception $e) {
            $this->flashMessenger()->addErrorMessage(sprintf("Une erreur est survenu lors de la suppression du rôle <strong>%s</strong>.", $role->getLibelle()));
        }
        return $vm;

        return compact('role');
    }
}
 No newline at end of file
+8 −8
Changes for src/UnicaenUtilisateur/Controller/UtilisateurController.php: 8 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ class UtilisateurController extends AbstractActionController

        // TODO recupérer le provider qui va bien ...
        return new ViewModel([
            'title' => "Gestion des utilisateurs",
            'form' => $form,
            'utilisateur' => $utilisateur,
            'roles' => $roles,
@@ -149,8 +150,7 @@ class UtilisateurController extends AbstractActionController

    public function addRoleAction()
    {
        $utilisateurId = $this->params()->fromRoute("utilisateur");
        $utilisateur = $this->userService->find($utilisateurId);
        $utilisateur = $this->userService->getRequestedUser($this);
        $roleId = $this->params()->fromRoute("role");
        $role = $this->roleService->find($roleId);

@@ -169,8 +169,7 @@ class UtilisateurController extends AbstractActionController

    public function removeRoleAction()
    {
        $utilisateurId = $this->params()->fromRoute("utilisateur");
        $utilisateur = $this->userService->find($utilisateurId);
        $utilisateur = $this->userService->getRequestedUser($this);
        $roleId = $this->params()->fromRoute("role");
        $role = $this->roleService->find($roleId);

@@ -190,7 +189,7 @@ class UtilisateurController extends AbstractActionController
    public function changerStatutAction()
    {
        try {
            $utilisateur = $this->userService->find($this->params()->fromRoute("utilisateur"));
            $utilisateur = $this->userService->getRequestedUser($this);
            $utilisateur = $this->userService->changeStatus($utilisateur);

            $this->flashMessenger()->addSuccessMessage(sprintf("Utilisateur <strong>%s</strong> %s avec succès.",
@@ -208,8 +207,7 @@ class UtilisateurController extends AbstractActionController
    public function supprimerAction()
    {
        try {
            /** @var IndividuCompte $compte */
            $utilisateur = $this->userService->find($this->params()->fromRoute("utilisateur"));
            $utilisateur = $this->userService->getRequestedUser($this);
            $this->userService->supprimer($utilisateur);
            $this->flashMessenger()->addSuccessMessage(sprintf("Utilisateur <strong>%s</strong> supprimé avec succès.", $utilisateur->getDisplayName()));
        } catch (Exception $e) {
@@ -268,11 +266,12 @@ class UtilisateurController extends AbstractActionController
        $users = $this->userService->findAll();

        return new ViewModel([
            'title' => "Liste des utilisateurs",
            'users' => $users,
        ]);
    }
    
    public function exportAction() 
    public function exporterAction()
    {
        $users = $this->userService->findAll();
        $headers = [ 'Identifiant de connexion', 'Nom', 'Activé', 'Rôle'];
@@ -300,6 +299,7 @@ class UtilisateurController extends AbstractActionController
        $CSV->setHeader($headers);
        $CSV->setData($records);
        $CSV->setFilename($filename);

        return $CSV;    
    }
}
 No newline at end of file
+79 −104
Changes for src/UnicaenUtilisateur/Form/Role/RoleForm.php: 79 added lines, 104 removed lines.
Original line number Diff line number Diff line
@@ -2,9 +2,14 @@

namespace UnicaenUtilisateur\Form\Role;

use Application\Entity\Db\UtilisateurRole;
use DoctrineModule\Form\Element\ObjectSelect;
use DoctrineModule\Validator\UniqueObject;
use UnicaenApp\Service\EntityManagerAwareTrait;
use UnicaenUtilisateur\Entity\Db\UserInterface;
use UnicaenUtilisateur\Service\Role\RoleServiceAwareTrait;
use Zend\Form\Element\Button;
use Zend\Form\Element\Checkbox;
use Zend\Form\Element\Hidden;
use Zend\Form\Element\Select;
use Zend\Form\Element\Text;
@@ -19,99 +24,107 @@ class RoleForm extends Form

    public function init()
    {
        //libelle
        /** nécessaire pour le validator @see \DoctrineModule\Validator\UniqueObject */
        $this->add([
            'name' => 'id',
            'type' => Hidden::class,
        ]);

        $this->add([
            'type' => Text::class,
            'name' => 'libelle',
            'options' => [
                'label' => "Libelle* :",
                'label' => "Libellé :",
                'label_attributes' => [
                    'class' => 'required',
                ],
            ],
            'attributes' => [
                'id' => 'libelle',
            ],
        ]);

        $this->add([
            'name' => 'old-libelle',
            'type' => Hidden::class,
        ]);

        //RoleId
        $this->add([
            'type' => Text::class,
            'name' => 'role_id',
            'name' => 'roleId',
            'options' => [
                'label' => "Identifiant du rôle* :",
                'label' => "Identifiant :",
                'label_attributes' => [
                    'class' => 'required',
                ],
            ],
            'attributes' => [
                'id' => 'role_id',
                'id' => 'role-id',
            ],
        ]);

        $this->add([
            'name' => 'old-roleid',
            'type' => Hidden::class,
        ]);

        //parent
        $this->add([
            'type' => Select::class,
            'name' => 'parent_id',
            'type' => ObjectSelect::class,
            'name' => 'parent',
            'options' => [
                'label' => "Role parent :",
                'empty_option' => "Aucun parent",
                'value_options' => $this->roleService->getRolesAsOptions(),
                'label' => "Rôle parent :",
                'empty_option' => "Aucun rôle parent",
                'object_manager' => $this->getEntityManager(),
                'target_class' => $this->roleService->getEntityClass(),
                'property' => 'libelle',
                'find_method' => [
                    'name' => 'findBy',
                    'params' => [
                        'criteria' => [],
                        'orderBy' => ['libelle' => 'ASC'],
                    ],
                ],
                'disable_inarray_validator' => true,
            ],
            'attributes' => [
                'id' => 'parent_id',
                'id' => 'parent',
            ],
        ]);

        //is default
        $this->add([
            'type' => Select::class,
            'name' => 'is_default',
            'type' => Checkbox::class,
            'name' => 'default',
            'options' => [
                'label' => "Rôle par defaut ? *",
                'value_options' => [
                    'false' => 'Non',
                    'true' => 'Oui',
                ],
            ],
            'attributes' => [
                'id' => 'is_default',
                'label' => "rôle par défaut",
                'use_hidden_element' => true,
                'checked_value' => 1,
                'unchecked_value' => 0,
            ],
        ]);

        //is auto
        $this->add([
            'type' => Select::class,
            'name' => 'is_auto',
            'type' => Checkbox::class,
            'name' => 'auto',
            'options' => [
                'label' => "Rôle automatique ? *",
                'value_options' => [
                    'false' => 'Non',
                    'true' => 'Oui',
                'label' => "rôle automatique",
                'use_hidden_element' => true,
                'checked_value' => 1,
                'unchecked_value' => 0,
            ],
            ],
            'attributes' => [
                'id' => 'is_auto',
        ]);

        $this->add([
            'type' => Checkbox::class,
            'name' => 'accessibleExterieur',
            'options' => [
                'label' => "accès extérieur",
                'use_hidden_element' => true,
                'checked_value' => 1,
                'unchecked_value' => 0,
            ],
        ]);

        //ldap filter
        $this->add([
            'type' => Text::class,
            'name' => 'ldap_filter',
            'name' => 'ldapFilter',
            'options' => [
                'label' => "Filtre LDAP * :",
                'label' => "Filtre LDAP :",
            ],
            'attributes' => [
                'id' => 'ldap_filter',
                'id' => 'ldap-filter',
            ],
        ]);

        //submit
        $this->add([
            'type' => Button::class,
            'name' => 'bouton',
@@ -132,79 +145,41 @@ class RoleForm extends Form
                'required' => true,
                'validators' => [
                    [
                        'name' => Callback::class,
                        'name' => UniqueObject::class,
                        'options' => [
                            'object_manager' => $this->getEntityManager(),
                            'object_repository' => $this->roleService->getRepo(),
                            'use_context' => true,
                            'fields'   => ['libelle'],
                            'messages' => [
                            Callback::INVALID_VALUE => "Ce libellé de rôle existe déjà",
                                UniqueObject::ERROR_OBJECT_NOT_UNIQUE => "Ce libellé est déjà utilisé dans l'application.",
                            ],
                        'callback' => function ($value, $context = []) {
                            if($value == $context['old-libelle']) {
                                return true;
                            }
                            else {
                                return !$this->roleService->findByLibelle($value);
                            }
                        },
                        'break_chain_on_failure' => true,
                        ],
                ]],
                    ]
                ],
            ],

            'role_id' => [
            'roleId' => [
                'required' => true,
                'validators' => [
                    [
                        'name' => Callback::class,
                        'name' => UniqueObject::class,
                        'options' => [
                            'object_manager' => $this->getEntityManager(),
                            'object_repository' => $this->roleService->getRepo(),
                            'use_context' => true,
                            'fields'   => ['roleId'],
                            'messages' => [
                            Callback::INVALID_VALUE => "Cet identifiant de rôle existe déjà",
                                UniqueObject::ERROR_OBJECT_NOT_UNIQUE => "Cet identifiant est déjà utilisé dans l'application.",
                            ],
                        'callback' => function ($value, $context = []) {
                            if($value == $context['old-roleid']) {
                                return true;
                            }
                            else {
                                return !$this->roleService->findByRoleId($value);
                            }
                        },
                        'break_chain_on_failure' => true,
                        ],
                ]],
                    ]
                ],

            'parent_id' => [
                'required' => false,
            ],

            'is_default' => [
                'required' => true,
            ],

            'is_auto' => [
                'required' => true,
            ],

            'ldap_fitler' => [
                'required' => false,
            ],

            'old-libelle' => [
                'required' => false,
            ],

            'old-roleid' => [
            'parent' => [
                'required' => false,
            ],
        ]));
    }

    public function setOldLibelle($value)
    {
        $this->get('old-libelle')->setValue($value);
    }

    public function setOldRoleId($value)
    {
        $this->get('old-roleid')->setValue($value);
    }
}
 No newline at end of file
Loading