Commit ede480a5 authored by David Surville's avatar David Surville
Browse files

Interface de gestion des rôles et périmètres de l'utilisateur (wip)

parent 056b6fe8
Loading
Loading
Loading
Loading
+8 −9
Changes for config/merged/utilisateur.config.php: 8 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -67,8 +67,8 @@ return [
                [
                    'controller' => UtilisateurController::class,
                    'action' => [
                        'add-role',
                        'remove-role',
                        'ajouter-role',
                        'supprimer-role',
                    ],
                    'privileges' => [
                        UtilisateurPrivileges::UTILISATEUR_MODIFIERROLE,
@@ -131,27 +131,26 @@ return [
                            ],
                        ],
                    ],
                    'add-role' => [
                    'ajouter-role' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/add-role/:utilisateur/:role',
                            'route'       => '/ajouter-role/:utilisateur',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'add-role',
                                'action' => 'ajouter-role',
                            ],
                            'constraints' => [
                                'utilisateur' => '\d+',
                                'role' => '\d+',
                            ],
                        ],
                    ],
                    'remove-role' => [
                    'supprimer-role' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/remove-role/:utilisateur/:role',
                            'route'       => '/supprimer-role/:utilisateur/:role',
                            'defaults'    => [
                                'controller' => UtilisateurController::class,
                                'action' => 'remove-role',
                                'action' => 'supprimer-role',
                            ],
                            'constraints' => [
                                'utilisateur' => '\d+',
+25 −13
Changes for src/UnicaenUtilisateur/Controller/UtilisateurController.php: 25 added lines, 13 removed lines.
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ use UnicaenApp\View\Model\CsvModel;
use UnicaenUtilisateur\Entity\Db\UserInterface;
use UnicaenUtilisateur\Form\User\UserFormAwareTrait;
use UnicaenUtilisateur\Form\User\UserRechercheFormAwareTrait;
use UnicaenUtilisateur\Form\User\UserRoleFormAwareTrait;
use UnicaenUtilisateur\Service\RechercheIndividu\RechercheIndividuResultatInterface;
use UnicaenUtilisateur\Service\RechercheIndividu\RechercheIndividuServiceInterface;
use UnicaenUtilisateur\Service\Role\RoleServiceAwareTrait;
@@ -28,6 +29,7 @@ class UtilisateurController extends AbstractActionController
    use EntityManagerAwareTrait;
    use UserFormAwareTrait;
    use UserRechercheFormAwareTrait;
    use UserRoleFormAwareTrait;


    /**
@@ -150,26 +152,36 @@ class UtilisateurController extends AbstractActionController
        return compact('title', 'form');
    }

    public function addRoleAction()
    public function ajouterRoleAction()
    {
        $utilisateur = $this->userService->getRequestedUser($this);
        $roleId = $this->params()->fromRoute("role");
        $role = $this->roleService->find($roleId);
        $user = $this->userService->getRequestedUser($this);
        $form = $this->userRoleForm;
        $form->setAttribute('action', $this->url()->fromRoute('unicaen-utilisateur/ajouter', ['utilisateur' => $user->getId()], [], true));
        $form->bind($user);

        if ($utilisateur !== null && $role !== null) {
            $this->userService->addRole($utilisateur, $role);
            $result = true;
        if ($data = $this->params()->fromPost()) {
            $form->setData($data);
            if ($form->isValid()) {
                try {
                    $this->userService->addRole();
                    $this->flashMessenger()->addSuccessMessage(sprintf("Rôle <strong>%s</strong> créé avec succès.", $perimetre->getLibelle()));
                } catch (Exception $e) {
                    $this->flashMessenger()->addErrorMessage(sprintf("Une erreur est survenu lors de la création de la valeur de périmètre <strong>%s</strong>.", $perimetre->getLibelle()));
                }
            }
        }

        return new JsonModel([
            "result" => $result ?: false,
            "message" => $result
                ? sprintf("Ajout du rôle <strong>%s</strong> à l'utilisateur <strong>%s</strong>.", $role->getLibelle(), $utilisateur->getDisplayName())
                : sprintf("Erreur lors de l'ajout du rôle <strong>%s</strong> à l'utilisateur <strong>%s</strong>.", $role->getLibelle(), $utilisateur->getDisplayName())
        $view = new ViewModel();
        $view->setTemplate('unicaen-privilege/perimetre/template/form-perimetre');
        $view->setVariables([
            'title' => "Ajout d'une nouvelle valeur de périmètre",
            'form' => $form,
        ]);

        return $view;
    }

    public function removeRoleAction()
    public function supprimerRoleAction()
    {
        $utilisateur = $this->userService->getRequestedUser($this);
        $roleId = $this->params()->fromRoute("role");
+2 −3
Changes for src/UnicaenUtilisateur/Service/User/UserService.php: 2 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -194,13 +194,12 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
     * @param PerimetreInterface|null $perimetre
     * @return UserInterface
     */
    public function addRole(UserInterface $utilisateur, RoleInterface $role, ?PerimetreInterface $perimetre = null)
    public function addRole(UserInterface $utilisateur, RoleInterface $role)
    {
        /** @var UserRoleInterface $entity */
        $entity = new $this->userRoleEntityClass;
        $entity ->setUser($utilisateur)
            ->setRole($role)
            ->setPerimetre($perimetre);
                ->setRole($role);

        try {
            $this->getEntityManager()->persist($entity);
+8 −13
Changes for src/UnicaenUtilisateur/View/Helper/UserRole.php: 8 added lines, 13 removed lines.
Original line number Diff line number Diff line
@@ -2,11 +2,16 @@

namespace UnicaenUtilisateur\View\Helper;

use UnicaenPrivilege\Service\Perimetre\PerimetreCategorieServiceAwareTrait;
use UnicaenUtilisateur\Entity\Db\UserInterface;
use UnicaenUtilisateur\Entity\Db\UserRoleInterface;
use UnicaenUtilisateur\Entity\Db\UserRolePerimetreInterface;
use Zend\View\Helper\AbstractHelper;

class UserRole extends AbstractHelper
{
    use PerimetreCategorieServiceAwareTrait;

    /**
     * @var UserInterface
     */
@@ -37,18 +42,8 @@ class UserRole extends AbstractHelper

    public function renderListe()
    {

        return '
        <table id="user-role" class="table table-condensed">
            <thead>
                <tr>
                    <th>Rôle</th>
                    <th class="col-md-1"><i title="Rôle automatique" class="fas fa-cog"></i> / <i title="Rôle manuel" class="fas fa-user"></i></th>
                    <th class="col-md-1">Action</th>
                </tr>
            </thead>
            <tbody>
            </tbody>
        </table>';
        return $this->view->render('unicaen-utilisateur/role/template/liste', [
            'user' => $this->user,
        ]);
    }
}
 No newline at end of file
+28 −140
Changes for view/unicaen-utilisateur/utilisateur/index.phtml: 28 added lines, 140 removed lines.
Original line number Diff line number Diff line
@@ -31,34 +31,38 @@ $canCreerLocal = $canAjouter;

<?php $this->headTitle($this->translate($title)) ?>

<h1 class="page-header">
    <?php echo $title; ?>
</h1>

<?php echo $this->messenger()->addMessagesFromFlashMessengerWithNoNamespace(); ?>

<?php if ($canLister) : ?>
    <a <?php /** @see UtilisateurController::listerAction() */ ?>
            href="<?php echo $this->url('unicaen-utilisateur/lister', [], [], true); ?>"
            class="btn btn-primary">
        <i class="fas fa-list"></i>
       Afficher la liste complète
    </a>
<?php endif; ?>

<div class="unicaen-utilisateur-titre">
    <div class="row">
        <div class="col-sm-5">
            <h2><strong>Gestion</strong> des utilisateurs</h2>
        </div>
        <div class="col-sm-7">
            <?php if ($canCreerLocal) : ?>
                <a <?php /** @see UtilisateurController::ajouterAction() */ ?>
                        href="<?php echo $this->url('unicaen-utilisateur/ajouter', [], [], true); ?>"
                        class="btn btn-primary">
        <i class="fas fa-user-plus"></i>
                    <i class="fas fa-plus-circle"></i>
                    Créer un utilisateur local
                </a>
            <?php endif; ?>
            <?php if ($canLister) : ?>
                <a <?php /** @see UtilisateurController::listerAction() */ ?>
                        href="<?php echo $this->url('unicaen-utilisateur/lister', [], [], true); ?>"
                        class="btn btn-primary">
                    <i class="fas fa-sort-alpha-down"></i>
                    Afficher la liste
                </a>
            <?php endif; ?>
        </div>
    </div>
</div>

<h2>Rechercher un utilisateur</h2>
<?php echo $this->messenger()->addMessagesFromFlashMessengerWithNoNamespace(); ?>

<?php echo $this->form()->openTag($form->prepare()); ?>

<h3>Rechercher un utilisateur</h3>

<p>
    À partir de ce formulaire, vous pouvez rechercher un <span class="bg-success" style="padding: 3px;">utilisateur déjà existant <i class="fas fa-check-circle text-success"></i></span> ou une personne à ajouter dans l'application.
</p>
@@ -200,63 +204,12 @@ $canCreerLocal = $canAjouter;

    <h2>Rôles de l'utilisateur</h2>

    <div id="user-roles" <?php echo sprintf('data-url="%s"', $this->url('unicaen-utilisateur', [], [], true)); ?>>
        <?php echo $this->userRole($utilisateur)->renderListe(); ?>

    <div class="panel panel-info">
        <div class="panel-heading">
            Rôles de l'utilisateur
        </div>
        <div class="panel-body">

            <div class="col-md-4">
                <h3><span class="label label-success">Rôle manuel attribué</span></h3>

                <?php foreach ($roles as $role) : ?>
                    <div class="role <?php echo $canRole ? 'cliquable remove-role' : ''; ?>"
                         id="<?php echo sprintf('attribue_%s_%s', $utilisateur->getId(), $role->getId()); ?>"
                         style="<?php if (!in_array($role, $rolesAttribues)) echo 'display:none;'; ?>">
                        <?php if (!$role->isAuto()): ?>
                            <?php echo $role->getLibelle(); ?>
                            <?php if($canRole): ?>
                                <i class="fas fa-minus text-danger pull-right"></i>
                            <?php endif; ?>
                        <?php endif; ?>
    </div>
                <?php endforeach; ?>

            </div>

            <div class="col-md-4">
                <h3><span class="label label-danger">Rôle manuel disponible</span></h3>

                <?php foreach ($roles as $role) : ?>
                    <div class="role <?php echo $canRole ? 'cliquable add-role' : ''; ?>"
                         id="<?php echo sprintf('disponible_%s_%s', $utilisateur->getId(), $role->getId()); ?>"
                         style="<?php if (!in_array($role, $rolesDisponibles)) echo 'display:none;'; ?>">
                        <?php if (!$role->isAuto()): ?>
                            <?php echo $role->getLibelle(); ?>
                            <?php if($canRole): ?>
                                <i class="fas fa-plus text-success pull-right"></i>
                            <?php endif; ?>
                        <?php endif; ?>
                    </div>
                <?php endforeach; ?>

            </div>

            <div class="col-md-4">
                <h3><span class="label label-default">Rôle automatique</span></h3>
    <?php echo $this->userRole($utilisateur)->renderListe(); ?>

                <?php foreach ($roles as $role): ?>
                    <?php if ($role->isAuto()): ?>
                        <div class="role" style="<?php if (!in_array($role, $rolesAutomatiques)) echo 'display:none;'; ?>">
                            <i class="fas fa-cog"></i> <?php echo $role->getLibelle(); ?>
                        </div>
                    <?php endif; ?>
                <?php endforeach; ?>
            </div>
        </div>
    </div>
<?php endif; ?>

<script>
@@ -283,7 +236,7 @@ $canCreerLocal = $canAjouter;
                    $('#utilisateur-id').val(id);
                    const t = id.split("||");
                    if (t[0] !== 'app') {
                        var text = '<i class="fas fa-user-plus"></i> Créer l\'utilisateur';
                        var text = '<i class="fas fa-plus-circle"></i> Créer l\'utilisateur';
                    }
                    else {
                        text = '<i class="fas fa-user-circle"></i> Afficher l\'utilisateur';
@@ -325,75 +278,10 @@ $canCreerLocal = $canAjouter;
            btn.attr("disabled", "disabled")
                .find('i').attr('class', 'fas fa-pulse fa-spinner');
        });

        $(".add-role").click(function () {
            let id = $(this).attr("id");
            let splits = id.split("_");
            let role = splits[2];
            let individu = splits[1];

            let url = 'utilisateur/add-role/' + individu + "/" + role;
            $.ajax({
                type: "GET",
                url: url,
                success: function (data) {
                    if(data.result == true) {
                        $("#attribue_" + individu + "_" + role).show();
                        $("#disponible_" + individu + "_" + role).hide();
                        $('#role-message').addClass('alert-success')
                            .html(data.message)
                            .show();
                    } else {
                        $('#role-message').addClass('alert-danger')
                            .html(data.message)
                            .show();
                    }
                },
            });
        });

        $(".remove-role").click(function () {
            let id = $(this).attr("id");
            let splits = id.split("_");
            let role = splits[2];
            let individu = splits[1];

            let url = 'utilisateur/remove-role/' + individu + '/' + role;
            $.ajax({
                type: "GET",
                url: url,
                success: function (data) {
                    if(data.result == true) {
                        $("#attribue_" + individu + "_" + role).hide();
                        $("#disponible_" + individu + "_" + role).show();
                        $('#role-message').addClass('alert-success')
                            .html(data.message)
                            .show();
                    } else {
                        $('#role-message').addClass('alert-danger')
                            .html(data.message)
                            .show();
                    }
                },
            });
        });
    });
</script>

<style>
    .role {
        border: 1px solid lightgray;
        border-radius : 5px;
        margin: 0.25rem;
        padding: 0.4rem 1rem;
    }

    .cliquable:hover {
        background-color: lightgrey;
        cursor : pointer ;
    }

    .text-highlight {
        color: #919191;
    }
</style>
 No newline at end of file
<?php
$css = $this->partial('unicaen-utilisateur/css/default.css');
echo $this->headStyle()->appendStyle($css);
?>
 No newline at end of file