Commit 98b0bb4c authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

[UTILISATEUR] Possibilité de supprimer un compte utilisateur.

parent d53fe2ae
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ Journal des modifications
6.0.8
-----
- [THESE] Ajout de logos sur le document des co-encadrements
- [UTILISATEUR] Possibilité de supprimer un compte utilisateur.

6.0.7
-----
+10 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ return [
                        'ajouter-role',
                        'ajouter',
                        'ajouterFromIndividu',
                        'supprimer',
                        'lier-individu',
                        'lier-nouvel-individu',
                        'delier-individu',
@@ -117,6 +118,15 @@ return [
                            ],
                        ],
                    ],
                    'supprimer' => [
                        'type'          => Segment::class,
                        'options'       => [
                            'route'       => '/supprimer/:utilisateur',
                            'defaults'    => [
                                'action' => 'supprimer',
                            ],
                        ],
                    ],
                    'gerer-utilisateur' => [
                        'type'          => Segment::class,
                        'options'       => [
+21 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ use Application\Search\Controller\SearchControllerInterface;
use Application\Search\Controller\SearchControllerTrait;
use Application\Search\SearchServiceAwareTrait;
use Application\Service\Notification\ApplicationNotificationFactoryAwareTrait;
use Exception;
use These\Service\Acteur\ActeurServiceAwareTrait;
use Structure\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait;
use Structure\Service\Etablissement\EtablissementServiceAwareTrait;
@@ -41,6 +42,7 @@ use UnicaenAuth\Service\ShibService;
use UnicaenAuth\Service\Traits\UserServiceAwareTrait;
use UnicaenAuthToken\Controller\TokenController;
use UnicaenAuthToken\Service\TokenServiceAwareTrait;
use Webmozart\Assert\Assert;

/**
 * @method \Application\Controller\Plugin\Forward forward()
@@ -284,6 +286,25 @@ class UtilisateurController extends \UnicaenAuth\Controller\UtilisateurControlle
        ]);
    }

    public function supprimerAction(): Response|ViewModel
    {
        if ($post = $this->params()->fromPost()) {
            Assert::keyExists($post, 'utilisateur');
            Assert::eq($post['utilisateur'], $this->params()->fromRoute('utilisateur'));
            $id = $post['utilisateur'];
            $utilisateur = $this->utilisateurService->getRepository()->find($id); /** @var Utilisateur $utilisateur */
            try {
                $this->utilisateurService->supprimerUtilisateur($utilisateur);
                $this->flashMessenger()->addSuccessMessage("Compte utilisateur suivant supprimé avec succès : " . $utilisateur->getUsername());
            } catch (Exception $e) {
                $this->flashMessenger()->addErrorMessage("Le compte utilisateur '{$utilisateur->getUsername()}' n'a pas pu être supprimé. " . $e->getMessage());
                return $this->redirect()->toRoute('utilisateur/voir', ['utilisateur' => $utilisateur->getId()]);
            }
        }

        return $this->redirect()->toRoute('utilisateur');
    }

    /**
     * Usurpe l'identité d'un **individu**.
     *
+13 −7
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

namespace Application\Service\Utilisateur;

use Doctrine\DBAL\Exception\ForeignKeyConstraintViolationException;
use Exception;
use Individu\Entity\Db\Individu;
use Application\Entity\Db\Repository\UtilisateurRepository;
use Application\Entity\Db\Utilisateur;
@@ -181,15 +183,19 @@ class UtilisateurService extends BaseService
    }

    /**
     * Fonction utilisée lors de la déassociation d'un utilisateur/individu et un membre d'un jury de thèse
     * @param AbstractUser $utilisateur
     * @throws \Exception
     */
    public function supprimerUtilisateur(AbstractUser $utilisateur) {
    public function supprimerUtilisateur(AbstractUser $utilisateur): void
    {
        try {
            $this->getEntityManager()->remove($utilisateur);
            $this->getEntityManager()->flush($utilisateur);
        } catch (OptimisticLockException $e) {
            throw new RuntimeException("Impossible d'enregistrer l'utilisateur", null, $e);
            $this->entityManager->remove($utilisateur);
            $this->entityManager->flush();
        } catch (Exception $e) {
            $precision = '';
            if ($e instanceof ForeignKeyConstraintViolationException) {
                $precision = " car il est référencé dans d'autres tables de données";
            }
            throw new Exception(sprintf("Impossible de supprimer ce compte utilisateur%s.", $precision), null, $e);
        }
    }

+13 −0
Original line number Diff line number Diff line
@@ -2,8 +2,10 @@

namespace Application;

use Application\Controller\PrivilegeController;
use Application\Controller\UtilisateurController;
use Application\Entity\Db\Utilisateur;
use Application\Provider\Privilege\UtilisateurPrivileges;
use Application\View\Renderer\PhpRenderer;
use Individu\Entity\Db\Individu;
use UnicaenApp\Util;
@@ -21,6 +23,8 @@ use UnicaenAuthToken\Entity\Db\UserToken;
 *
 * @see \Application\Controller\UtilisateurController::voirAction()
 */

$canEdit = $this->isAllowed(UtilisateurPrivileges::getResourceId(UtilisateurPrivileges::UTILISATEUR_MODIFICATION));
?>

<?php $this->headTitle($this->translate("Compte utilisateur"))->append($utilisateur->getUsername()) ?>
@@ -72,6 +76,15 @@ use UnicaenAuthToken\Entity\Db\UserToken;
                        <dd class="col-md-5"><?php echo Util::truncatedString($token, 8) ?></dd>
                    <?php endif ?>
                </dl>

                <?php if ($canEdit): ?>
                    <form method="post" action="<?php echo $this->url('utilisateur/supprimer', ['utilisateur' => $utilisateur->getId()]) ?>">
                        <input type="hidden" name="utilisateur" value="<?php echo $utilisateur->getId() ?>">
                        <input type="submit" value="<?php echo $this->translate("Supprimer ce compte utilisateur") ?>"
                               onclick="return confirm('Êtes-vous certain·e de vouloir supprimer ce compte utilisateur ?')"
                               class="btn btn-danger float-end"/>
                    </form>
                <?php endif ?>
            </div>
        </div>