src/Controller/AccountEntrepriseController.php line 35

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\Entreprise;
  5. use App\Entity\UserEntreprise;
  6. use App\Repository\RoleRepository;
  7. use App\Repository\UserRepository;
  8. use App\Repository\EntrepriseRepository;
  9. use App\Repository\UserEntrepriseRepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Http\Attribute\IsGranted;
  16. #[Route('/admin/accounts')]
  17. #[IsGranted('ROLE_ADMIN')]
  18. class AccountEntrepriseController extends AbstractController
  19. {
  20.     #[Route('/'name'admin_accounts_index'methods: ['GET'])]
  21.     public function index(UserRepository $userRepository): Response
  22.     {
  23.         $users $userRepository->findAll();
  24.         return $this->render('account_entreprise/index.html.twig', [
  25.             'users' => $users,
  26.         ]);
  27.     }
  28.     #[Route('/{id}'name'admin_accounts_manage'methods: ['GET'])]
  29.     public function manage(User $userEntrepriseRepository $entrepriseRepository): Response
  30.     {
  31.         // All entreprises to select from when adding a new link
  32.         $entreprises $entrepriseRepository->findAll();
  33.         return $this->render('account_entreprise/manage.html.twig', [
  34.             'user'        => $user,
  35.             'entreprises' => $entreprises,
  36.         ]);
  37.     }
  38.     #[Route('/{id}/add-entreprise'name'admin_accounts_add_entreprise'methods: ['POST'])]
  39.     public function addEntreprise(
  40.         User $user,
  41.         Request $request,
  42.         EntrepriseRepository $entrepriseRepository,
  43.         UserEntrepriseRepository $userEntrepriseRepository,
  44.         EntityManagerInterface $emRoleRepository $roleRepositoryUserRepository $userRepository
  45.     ): Response {
  46.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  47.         if (!$this->isCsrfTokenValid('admin_add_entreprise_'.$user->getId(), $request->request->get('_token'))) {
  48.             throw $this->createAccessDeniedException('Token CSRF invalide.');
  49.         }
  50.         $entrepriseId $request->request->get('entreprise_id');
  51.         $role         $request->request->get('role''MEMBRE');
  52.         if (!$entrepriseId) {
  53.             $this->addFlash('warning''Veuillez choisir une entreprise.');
  54.             return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);
  55.         }
  56.         $entreprise $entrepriseRepository->find($entrepriseId);
  57.         if (!$entreprise) {
  58.             $this->addFlash('danger''Entreprise introuvable.');
  59.             return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);
  60.         }
  61.         // Check if link already exists
  62.         $existing $userEntrepriseRepository->findOneBy([
  63.             'user'       => $user,
  64.             'entreprise' => $entreprise,
  65.         ]);
  66.         if ($existing) {
  67.             $this->addFlash('info''Cet utilisateur est déjà lié à cette entreprise.');
  68.             return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);
  69.         }
  70.         $link = new UserEntreprise();
  71.         $link->setUser($user);
  72.         $link->setEntreprise($entreprise);
  73.         $link->setRole($role);
  74.         $link->setStatus(true);
  75.         $em->persist($link);
  76.         // Optionnel : si l’utilisateur n’a pas d’entreprise actuelle, on met celle-ci
  77.         if (method_exists($user'getEntreprise') && method_exists($user'setEntreprise')) {
  78.             if (!$user->getEntreprise()) {
  79.                 $user->setEntreprise($entreprise);
  80.             }
  81.         }
  82.         if (!$entreprise->getPhone()){
  83.             $entreprise->setPhone($user->getPhone());
  84.         }
  85.         if (!$entreprise->getEmail()){
  86.             $entreprise->setEmail($user->getEmail());
  87.         }
  88.         if(!$entreprise->getOwner()){
  89.             $entreprise->setOwner($user);
  90.         }
  91.         $em->flush();
  92.         $this->addFlash('success''Entreprise ajoutée à l’utilisateur.');
  93.         return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);
  94.     }
  95.     #[Route('/link/{id}/toggle'name'admin_accounts_toggle_link'methods: ['POST'])]
  96.     public function toggleLink(
  97.         UserEntreprise $link,
  98.         Request $request,
  99.         EntityManagerInterface $em
  100.     ): Response {
  101.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  102.         if (!$this->isCsrfTokenValid('admin_toggle_link_'.$link->getId(), $request->request->get('_token'))) {
  103.             throw $this->createAccessDeniedException('Token CSRF invalide.');
  104.         }
  105.         $user $link->getUser();
  106.         $newStatus = !($link->isStatus() === true);
  107.         $link->setStatus($newStatus);
  108.         $em->flush();
  109.         $this->addFlash('success''Lien entreprise mis à jour ('.$newStatus.').');
  110.         return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);
  111.     }
  112.     #[Route('/link/{id}/remove'name'admin_accounts_remove_link'methods: ['POST'])]
  113.     public function removeLink(
  114.         UserEntreprise $link,
  115.         Request $request,
  116.         EntityManagerInterface $em
  117.     ): Response {
  118.         $this->denyAccessUnlessGranted('ROLE_ADMIN');
  119.         if (!$this->isCsrfTokenValid('admin_remove_link_'.$link->getId(), $request->request->get('_token'))) {
  120.             throw $this->createAccessDeniedException('Token CSRF invalide.');
  121.         }
  122.         $user       $link->getUser();
  123.         $entreprise $link->getEntreprise();
  124.         // If this entreprise is the user's current entreprise, you may want to null it
  125.         if (method_exists($user'getEntreprise') && method_exists($user'setEntreprise')) {
  126.             if ($user->getEntreprise() && $user->getEntreprise()->getId() === $entreprise->getId()) {
  127.                 $user->setEntreprise(null);
  128.                 $user->setStatus(false);
  129.             }
  130.         }
  131.         $em->remove($link);
  132.         $em->flush();
  133.         $this->addFlash('success''Utilisateur retiré de l’entreprise.');
  134.         return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);
  135.     }
  136. }