src/Controller/AccountEntrepriseController.php line 35
<?phpnamespace App\Controller;use App\Entity\User;use App\Entity\Entreprise;use App\Entity\UserEntreprise;use App\Repository\RoleRepository;use App\Repository\UserRepository;use App\Repository\EntrepriseRepository;use App\Repository\UserEntrepriseRepository;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Security\Http\Attribute\IsGranted;#[Route('/admin/accounts')]#[IsGranted('ROLE_ADMIN')]class AccountEntrepriseController extends AbstractController{#[Route('/', name: 'admin_accounts_index', methods: ['GET'])]public function index(UserRepository $userRepository): Response{$users = $userRepository->findAll();return $this->render('account_entreprise/index.html.twig', ['users' => $users,]);}#[Route('/{id}', name: 'admin_accounts_manage', methods: ['GET'])]public function manage(User $user, EntrepriseRepository $entrepriseRepository): Response{// All entreprises to select from when adding a new link$entreprises = $entrepriseRepository->findAll();return $this->render('account_entreprise/manage.html.twig', ['user' => $user,'entreprises' => $entreprises,]);}#[Route('/{id}/add-entreprise', name: 'admin_accounts_add_entreprise', methods: ['POST'])]public function addEntreprise(User $user,Request $request,EntrepriseRepository $entrepriseRepository,UserEntrepriseRepository $userEntrepriseRepository,EntityManagerInterface $em, RoleRepository $roleRepository, UserRepository $userRepository): Response {$this->denyAccessUnlessGranted('ROLE_ADMIN');if (!$this->isCsrfTokenValid('admin_add_entreprise_'.$user->getId(), $request->request->get('_token'))) {throw $this->createAccessDeniedException('Token CSRF invalide.');}$entrepriseId = $request->request->get('entreprise_id');$role = $request->request->get('role', 'MEMBRE');if (!$entrepriseId) {$this->addFlash('warning', 'Veuillez choisir une entreprise.');return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);}$entreprise = $entrepriseRepository->find($entrepriseId);if (!$entreprise) {$this->addFlash('danger', 'Entreprise introuvable.');return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);}// Check if link already exists$existing = $userEntrepriseRepository->findOneBy(['user' => $user,'entreprise' => $entreprise,]);if ($existing) {$this->addFlash('info', 'Cet utilisateur est déjà lié à cette entreprise.');return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);}$link = new UserEntreprise();$link->setUser($user);$link->setEntreprise($entreprise);$link->setRole($role);$link->setStatus(true);$em->persist($link);// Optionnel : si l’utilisateur n’a pas d’entreprise actuelle, on met celle-ciif (method_exists($user, 'getEntreprise') && method_exists($user, 'setEntreprise')) {if (!$user->getEntreprise()) {$user->setEntreprise($entreprise);}}if (!$entreprise->getPhone()){$entreprise->setPhone($user->getPhone());}if (!$entreprise->getEmail()){$entreprise->setEmail($user->getEmail());}if(!$entreprise->getOwner()){$entreprise->setOwner($user);}$em->flush();$this->addFlash('success', 'Entreprise ajoutée à l’utilisateur.');return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);}#[Route('/link/{id}/toggle', name: 'admin_accounts_toggle_link', methods: ['POST'])]public function toggleLink(UserEntreprise $link,Request $request,EntityManagerInterface $em): Response {$this->denyAccessUnlessGranted('ROLE_ADMIN');if (!$this->isCsrfTokenValid('admin_toggle_link_'.$link->getId(), $request->request->get('_token'))) {throw $this->createAccessDeniedException('Token CSRF invalide.');}$user = $link->getUser();$newStatus = !($link->isStatus() === true);$link->setStatus($newStatus);$em->flush();$this->addFlash('success', 'Lien entreprise mis à jour ('.$newStatus.').');return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);}#[Route('/link/{id}/remove', name: 'admin_accounts_remove_link', methods: ['POST'])]public function removeLink(UserEntreprise $link,Request $request,EntityManagerInterface $em): Response {$this->denyAccessUnlessGranted('ROLE_ADMIN');if (!$this->isCsrfTokenValid('admin_remove_link_'.$link->getId(), $request->request->get('_token'))) {throw $this->createAccessDeniedException('Token CSRF invalide.');}$user = $link->getUser();$entreprise = $link->getEntreprise();// If this entreprise is the user's current entreprise, you may want to null itif (method_exists($user, 'getEntreprise') && method_exists($user, 'setEntreprise')) {if ($user->getEntreprise() && $user->getEntreprise()->getId() === $entreprise->getId()) {$user->setEntreprise(null);$user->setStatus(false);}}$em->remove($link);$em->flush();$this->addFlash('success', 'Utilisateur retiré de l’entreprise.');return $this->redirectToRoute('admin_accounts_manage', ['id' => $user->getId()]);}}