diff --git a/src/Controller/OrganizationController.php b/src/Controller/OrganizationController.php index 9920f9d..3d8f509 100644 --- a/src/Controller/OrganizationController.php +++ b/src/Controller/OrganizationController.php @@ -30,7 +30,7 @@ class OrganizationController extends AbstractController public function __construct(private readonly EntityManagerInterface $entityManager, private readonly UserService $userService, - private readonly OrganizationsService $organizationsService, private readonly ActionService $actionService) + private readonly OrganizationsService $organizationsService, private readonly ActionService $actionService, private readonly UserOrganizationService $userOrganizationService) { } @@ -40,7 +40,7 @@ class OrganizationController extends AbstractController $this->denyAccessUnlessGranted('ROLE_ADMIN'); $user = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); if ($this->isGranted("ROLE_SUPER_ADMIN")) { - $organizations = $this->entityManager->getRepository(Organizations::class)->findAll(); + $organizations = $this->entityManager->getRepository(Organizations::class)->findBy([ 'isDeleted' => false ]); } else { //get all the UO of the user $uos = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['users' => $user]); @@ -187,5 +187,24 @@ class OrganizationController extends AbstractController ]); } + #[Route(path: '/delete/{id}', name: 'delete', methods: ['POST'])] + public function delete($id) + { + $this->denyAccessUnlessGranted("ROLE_ADMIN"); + $actingUser = $this->userService->getUserByIdentifier($this->getUser()->getUserIdentifier()); + $organization = $this->entityManager->getRepository(Organizations::class)->find($id); + if (!$organization) { + throw $this->createNotFoundException(self::NOT_FOUND); + } + $organization->setIsActive(false); + $organization->setIsDeleted(true); + // Deactivate all associated UsersOrganizations + $this->userOrganizationService->deactivateAllUserOrganizationLinks($actingUser, null, $organization); + + $this->entityManager->persist($organization); + $this->actionService->createAction("Delete Organization", $actingUser, $organization, $organization->getName()); + return $this->redirectToRoute('organization_index'); + } + } diff --git a/src/Service/UserOrganizationService.php b/src/Service/UserOrganizationService.php index 9fcbe10..8000b12 100644 --- a/src/Service/UserOrganizationService.php +++ b/src/Service/UserOrganizationService.php @@ -3,6 +3,7 @@ namespace App\Service; use App\Entity\Actions; +use App\Entity\Organizations; use App\Entity\User; use App\Entity\UsersOrganizations; use App\Service\ActionService; @@ -28,8 +29,12 @@ readonly class UserOrganizationService * @param User $actingUser * @return void */ - public function deactivateAllUserOrganizationLinks(User $user, User $actingUser): void{ - $uos = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['users' => $user, 'isActive' => true]); + public function deactivateAllUserOrganizationLinks(User $actingUser, User $user = null, Organizations $organizations = null): void{ + if($user !== null) { + $uos = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['users' => $user, 'isActive' => true]); + }elseif($organizations !== null){ + $uos = $this->entityManager->getRepository(UsersOrganizations::class)->findBy(['organization' => $organizations, 'isActive' => true]); + } foreach ($uos as $uo) { $this->userOrganizationAppService->deactivateAllUserOrganizationsAppLinks($uo); $uo->setIsActive(false); diff --git a/templates/organization/show.html.twig b/templates/organization/show.html.twig index e4e3f5a..0ec62ee 100644 --- a/templates/organization/show.html.twig +++ b/templates/organization/show.html.twig @@ -14,6 +14,10 @@ {% if is_granted("ROLE_SUPER_ADMIN") %} Gérer l'organisation +