Loading CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -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 ----- Loading module/Application/config/others/utilisateur.config.php +10 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ return [ 'ajouter-role', 'ajouter', 'ajouterFromIndividu', 'supprimer', 'lier-individu', 'lier-nouvel-individu', 'delier-individu', Loading Loading @@ -117,6 +118,15 @@ return [ ], ], ], 'supprimer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/supprimer/:utilisateur', 'defaults' => [ 'action' => 'supprimer', ], ], ], 'gerer-utilisateur' => [ 'type' => Segment::class, 'options' => [ Loading module/Application/src/Application/Controller/UtilisateurController.php +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() Loading Loading @@ -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**. * Loading module/Application/src/Application/Service/Utilisateur/UtilisateurService.php +13 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } } Loading module/Application/view/application/utilisateur/voir.phtml +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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()) ?> Loading Loading @@ -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> Loading Loading
CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -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 ----- Loading
module/Application/config/others/utilisateur.config.php +10 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ return [ 'ajouter-role', 'ajouter', 'ajouterFromIndividu', 'supprimer', 'lier-individu', 'lier-nouvel-individu', 'delier-individu', Loading Loading @@ -117,6 +118,15 @@ return [ ], ], ], 'supprimer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/supprimer/:utilisateur', 'defaults' => [ 'action' => 'supprimer', ], ], ], 'gerer-utilisateur' => [ 'type' => Segment::class, 'options' => [ Loading
module/Application/src/Application/Controller/UtilisateurController.php +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() Loading Loading @@ -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**. * Loading
module/Application/src/Application/Service/Utilisateur/UtilisateurService.php +13 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } } Loading
module/Application/view/application/utilisateur/voir.phtml +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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()) ?> Loading Loading @@ -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> Loading