src\Controller\SubEmpresaController.php line 89

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\SubEmpresa;
  4. use App\Form\SubEmpresaType;
  5. use App\Repository\SubEmpresaRepository;
  6. use App\Repository\UserRepository;
  7. use App\Entity\User;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. #[Route('/sub/empresa')]
  13. class SubEmpresaController extends AbstractController
  14. {
  15.     #[Route('/'name'app_sub_empresa_index'methods: ['GET'])]
  16.     public function index(SubEmpresaRepository $subEmpresaRepository): Response
  17.     {
  18.         return $this->render('sub_empresa/index.html.twig', [
  19.             'sub_empresas' => $subEmpresaRepository->findAll(),
  20.             'nav_active'   => 'Subempresa',
  21.         ]);
  22.     }
  23.     #[Route('/new'name'app_sub_empresa_new'methods: ['GET''POST'])]
  24.     public function new(
  25.         Request $request,
  26.         SubEmpresaRepository $subEmpresaRepository,
  27.         UserRepository $userRepository
  28.     ): Response {
  29.         $subEmpresa = new SubEmpresa();
  30.         // ---- Monta lista de usuários permitidos (aprovadores e administradores)
  31.         $todosUsuarios $userRepository->findAll();
  32.         $matches = static function (User $u): bool {
  33.             $roles $u->getRoles() ?? [];
  34.             // exatos aceitos
  35.             $exact = ['ROLE_ADMINISTRATIVO''ROLE_APROVADOR'];
  36.             // prefixes aceitos (cobre ROLE_ADMINISTRADOR_ASSESSORIA, ROLE_APROVADOR_ADMINISTRATIVO etc.)
  37.             $prefixes = ['ROLE_ADMINISTRADOR''ROLE_APROVADOR'];
  38.             foreach ($roles as $r) {
  39.                 if (in_array($r$exacttrue)) {
  40.                     return true;
  41.                 }
  42.                 foreach ($prefixes as $p) {
  43.                     if (strpos($r$p) === 0) {
  44.                         return true;
  45.                     }
  46.                 }
  47.             }
  48.             return false;
  49.         };
  50.         $permitidos array_values(array_filter($todosUsuarios$matches));
  51.         $form $this->createForm(SubEmpresaType::class, $subEmpresa, [
  52.             'usuarios_permitidos' => $permitidos,
  53.         ]);
  54.         $form->handleRequest($request);
  55.         if ($form->isSubmitted() && $form->isValid()) {
  56.             $subEmpresaRepository->save($subEmpresatrue);
  57.             return $this->redirectToRoute('app_sub_empresa_index', [], Response::HTTP_SEE_OTHER);
  58.         }
  59.         return $this->renderForm('sub_empresa/new.html.twig', [
  60.             'sub_empresa' => $subEmpresa,
  61.             'form'        => $form,
  62.             'nav_active'  => 'Subempresa',
  63.         ]);
  64.     }
  65.     #[Route('/{id}'name'app_sub_empresa_show'methods: ['GET'])]
  66.     public function show(SubEmpresa $subEmpresa): Response
  67.     {
  68.         return $this->render('sub_empresa/show.html.twig', [
  69.             'sub_empresa' => $subEmpresa,
  70.         ]);
  71.     }
  72.     #[Route('/{id}/edit'name'app_sub_empresa_edit'methods: ['GET''POST'])]
  73.     public function edit(
  74.         Request $request,
  75.         SubEmpresa $subEmpresa,
  76.         SubEmpresaRepository $subEmpresaRepository,
  77.         UserRepository $userRepository
  78.     ): Response {
  79.         // ---- Monta lista base com aprovadores/administradores
  80.         $todosUsuarios $userRepository->findAll();
  81.         $matches = static function (User $u): bool {
  82.             $roles $u->getRoles() ?? [];
  83.             $exact = ['ROLE_ADMINISTRATIVO''ROLE_APROVADOR'];
  84.             $prefixes = ['ROLE_ADMINISTRADOR''ROLE_APROVADOR'];
  85.             foreach ($roles as $r) {
  86.                 if (in_array($r$exacttrue)) {
  87.                     return true;
  88.                 }
  89.                 foreach ($prefixes as $p) {
  90.                     if (strpos($r$p) === 0) {
  91.                         return true;
  92.                     }
  93.                 }
  94.             }
  95.             return false;
  96.         };
  97.         $permitidosBase array_values(array_filter($todosUsuarios$matches));
  98.         // Garante que os já associados continuem aparecendo (mesmo se perderam o role)
  99.         $selecionados $subEmpresa->getUsers()->toArray();
  100.         $porId = [];
  101.         foreach (array_merge($permitidosBase$selecionados) as $u) {
  102.             $porId[$u->getId()] = $u;
  103.         }
  104.         $permitidos array_values($porId);
  105.         $form $this->createForm(SubEmpresaType::class, $subEmpresa, [
  106.             'usuarios_permitidos' => $permitidos,
  107.         ]);
  108.         $form->handleRequest($request);
  109.         if ($form->isSubmitted() && $form->isValid()) {
  110.             $subEmpresaRepository->save($subEmpresatrue);
  111.             return $this->redirectToRoute('app_sub_empresa_index', [], Response::HTTP_SEE_OTHER);
  112.         }
  113.         return $this->renderForm('sub_empresa/edit.html.twig', [
  114.             'sub_empresa' => $subEmpresa,
  115.             'form'        => $form,
  116.             'nav_active'  => 'Subempresa',
  117.         ]);
  118.     }
  119.     #[Route('/{id}'name'app_sub_empresa_delete'methods: ['POST'])]
  120.     public function delete(Request $requestSubEmpresa $subEmpresaSubEmpresaRepository $subEmpresaRepository): Response
  121.     {
  122.         if ($this->isCsrfTokenValid('delete' $subEmpresa->getId(), $request->request->get('_token'))) {
  123.             $subEmpresaRepository->remove($subEmpresatrue);
  124.         }
  125.         return $this->redirectToRoute('app_sub_empresa_index', [], Response::HTTP_SEE_OTHER);
  126.     }
  127. }