Commit 4ff9c82e authored by David Surville's avatar David Surville
Browse files

Suppression dans la base du rattachement d'un rôle automatique à un...

Suppression dans la base du rattachement d'un rôle automatique à un utilisateur si le rôle n'est rattaché à aucun périmètre
parent 8b7220dd
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -428,6 +428,33 @@ class UserService extends CommonService implements RechercheIndividuServiceInter
        return $utilisateur;
    }

    public function removePerimetre(UserInterface $utilisateur, RoleInterface $role, PerimetreInterface $perimetre)
    {
        $userRole = $utilisateur->getFullRole($role);

        $repo = $this->getEntityManager()->getRepository($this->userRolePerimetreEntityClass);
        $entity = $repo->findOneBy(['userRole' => $userRole, 'perimetre' => $perimetre]);

        try {
            $this->getEntityManager()->remove($entity);
            $this->getEntityManager()->flush($entity);
        } catch (\Exception $e) {
            throw new RuntimeException("Un problème est survenu lors de la suppression du périmètre \"" . $perimetre->getLibelle() . "\" à l'utilisateur " . $utilisateur->getUsername() . ".", null, $e);
        }

        // cas d'un rôle automatique : suppression du rôle de l'utilisateur dans la base si aucun périmètre n'est rattaché à celui-ci
        if($userRole->getRole()->isAuto() && $userRole->getPerimetres()->isEmpty()) {
            try {
                $this->getEntityManager()->remove($userRole);
                $this->getEntityManager()->flush($userRole);
            } catch (\Exception $e) {
                throw new RuntimeException("Un problème est survenu lors de la suppression du périmètre \"" . $perimetre->getLibelle() . "\" à l'utilisateur " . $utilisateur->getUsername() . ".", null, $e);
            }
        }

        return $utilisateur;
    }

    /**
     * @param UserInterface $utilisateur
     */