src/EventSubscriber/KnpAdminMenuBuilderSubscriber.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Repository\EditalRepository;
  4. use App\Service\Parametros;
  5. use KevinPapst\AdminLTEBundle\Event\KnpMenuEvent;
  6. use KevinPapst\AdminLTEBundle\Event\ThemeEvents;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Security\Core\Security;
  9. class KnpAdminMenuBuilderSubscriber implements EventSubscriberInterface
  10. {
  11.     /** @var \App\Entity\Edital[]  */
  12.     private array $editaisAtivos;
  13.     private Security $security;
  14.     private Parametros $params;
  15.     public function __construct(EditalRepository $editalRepositorySecurity $securityParametros $parametros)
  16.     {
  17.         if ($security->isGranted('ROLE_PROFESSOR') && !$security->isGranted('ROLE_ADMIN')) {
  18.             $this->editaisAtivos $editalRepository->findEditaisAtivosParaProfessor($security->getUser());
  19.         } else {
  20.             $this->editaisAtivos $editalRepository->findEditaisAtivos();
  21.         }
  22.         $this->security $security;
  23.         $this->params $parametros;
  24.     }
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             KnpMenuEvent::class => ['onSetupMenu'100],
  29.         ];
  30.     }
  31.     public function onSetupMenu(KnpMenuEvent $event)
  32.     {
  33.         $menu $event->getMenu();
  34.         $lite $this->params->get('lite');
  35.         $menu->setChildrenAttribute('style''white-space: normal;');
  36.         /**
  37.          * MENU PRINCIPAL
  38.          */
  39.         $menu->addChild('dashboard', [
  40.             'label' => 'Dashboard',
  41.             'route' => 'admin',
  42.             'childOptions' => $event->getChildOptions()
  43.         ])->setLabelAttribute('icon''fas fa-home');
  44.         /**
  45.          * MENU DOS PROCESSOS SELETIVOS ATIVOS
  46.          */
  47.         $menu->addChild('ProcessoSeletivo', [
  48.             'label' => 'EDITAIS ATIVOS',
  49.             'childOptions' => $event->getChildOptions()
  50.         ])->setAttribute('class''header');
  51.         foreach ($this->editaisAtivos as $index => $editalAtivo) {
  52.             $menu->addChild('edital' $index, [
  53.                 'label' => $editalAtivo->getNomeInterno(),
  54.                 'childOptions' => $event->getChildOptions()
  55.             ]);
  56.             if ($this->security->isGranted('ROLE_FUNCIONARIO')) {
  57.                 $menu->getChild('edital' $index)->addChild('listarInscricoes', [
  58.                     'label' => 'Candidatos',
  59.                     'childOptions' => $event->getChildOptions(),
  60.                     'route' => 'edital',
  61.                     'routeParameters' => ['id' => $editalAtivo->getId()]
  62.                 ]);
  63.                 $menu->getChild('edital' $index)->addChild('homologacao', [
  64.                     'label' => 'Homologar Inscrições',
  65.                     'childOptions' => $event->getChildOptions(),
  66.                     'route' => 'edital_homologar',
  67.                     'routeParameters' => ['id' => $editalAtivo->getId()]
  68.                 ])->setExtra('routes', [
  69.                     [
  70.                         'route' => 'edital_homologar',
  71.                         'parameters' => ['id' => $editalAtivo->getId()],
  72.                     ],
  73.                     [
  74.                         'route' => 'edital_homologar_reserva',
  75.                         'parameters' => ['id' => $editalAtivo->getId()],
  76.                     ],
  77.                     [
  78.                         'route' => 'homologar_inscricao',
  79.                         'parameters' => ['id' => $editalAtivo->getId()],
  80.                     ],
  81.                 ]);
  82.             }
  83.             foreach ($editalAtivo->getEtapas() as $etapa) {
  84.                 if ($lite) continue;
  85.                 if ($etapa->getIsPrimeiraEtapa()) {
  86.                     $menu->getChild('edital' $index)->addChild('primeiraEtapa', [
  87.                         'label' => $etapa->getNome(),
  88.                         'childOptions' => $event->getChildOptions(),
  89.                         'route' => 'edital_primeira_etapa',
  90.                         'routeParameters' => ['id' => $editalAtivo->getId()]
  91.                     ])->setExtra('routes', [
  92.                         [
  93.                             'route' => 'edital_primeira_etapa',
  94.                             'parameters' => ['id' => $editalAtivo->getId()],
  95.                         ],
  96.                         [
  97.                             'route' => 'edital_primeira_etapa_reserva',
  98.                             'parameters' => ['id' => $editalAtivo->getId()],
  99.                         ],
  100.                         [
  101.                             'route' => 'inscricao_primeira_etapa',
  102.                             'parameters' => ['id' => $editalAtivo->getId()],
  103.                         ],
  104.                         [
  105.                             'route' => 'desclassificar_primeira_etapa',
  106.                             'parameters' => ['id' => $editalAtivo->getId()],
  107.                         ],
  108.                     ]);
  109.                 } else {
  110.                     $menu->getChild('edital' $index)->addChild('segundaEtapa', [
  111.                         'label' => $etapa->getNome(),
  112.                         'childOptions' => $event->getChildOptions(),
  113.                         'route' => 'edital_segunda_etapa',
  114.                         'routeParameters' => ['id' => $editalAtivo->getId()]
  115.                     ])->setExtra('routes', [
  116.                         [
  117.                             'route' => 'edital_segunda_etapa',
  118.                             'parameters' => ['id' => $editalAtivo->getId()],
  119.                         ],
  120.                         [
  121.                             'route' => 'edital_segunda_etapa_reserva',
  122.                             'parameters' => ['id' => $editalAtivo->getId()],
  123.                         ],
  124.                         [
  125.                             'route' => 'inscricao_segunda_etapa',
  126.                             'parameters' => ['id' => $editalAtivo->getId()],
  127.                         ],
  128.                         [
  129.                             'route' => 'desclassificar_segunda_etapa',
  130.                             'parameters' => ['id' => $editalAtivo->getId()],
  131.                         ],
  132.                     ]);
  133.                     $menu->getChild('edital' $index)->addChild('cronograma', [
  134.                         'label' => 'Cronograma de Defesas',
  135.                         'childOptions' => $event->getChildOptions(),
  136.                         'route' => 'edital_cronograma',
  137.                         'routeParameters' => ['id' => $editalAtivo->getId()]
  138.                     ])->setExtra('routes', [
  139.                         [
  140.                             'route' => 'edital_cronograma',
  141.                             'parameters' => ['id' => $editalAtivo->getId()],
  142.                         ],
  143.                         [
  144.                             'route' => 'inscricao_cronograma',
  145.                             'parameters' => ['id' => $editalAtivo->getId()],
  146.                         ],
  147.                     ]);
  148.                 }
  149.             }
  150.             if (!$lite && $editalAtivo->getRemanejarCandidatos()) {
  151.                 $menu->getChild('edital' $index)->addChild('remanejos', [
  152.                     'label' => 'Remanejos',
  153.                     'childOptions' => $event->getChildOptions(),
  154.                     'route' => 'remanejos',
  155.                     'routeParameters' => ['id' => $editalAtivo->getId()]
  156.                 ])->setExtra('routes', [
  157.                     [
  158.                         'route' => 'remanejos_pendentes',
  159.                         'parameters' => ['id' => $editalAtivo->getId()],
  160.                     ],
  161.                     [
  162.                         'route' => 'remanejos_aceitos',
  163.                         'parameters' => ['id' => $editalAtivo->getId()],
  164.                     ],
  165.                     [
  166.                         'route' => 'remanejos_recusados',
  167.                         'parameters' => ['id' => $editalAtivo->getId()],
  168.                     ],
  169.                 ]);
  170.             }
  171.             if (!$lite) {
  172.                 $menu->getChild('edital' $index)->addChild('recursos', [
  173.                     'label' => 'Recursos',
  174.                     'childOptions' => $event->getChildOptions(),
  175.                     'route' => 'recursos',
  176.                     'routeParameters' => ['id' => $editalAtivo->getId()]
  177.                 ])->setExtra('routes', [
  178.                     [
  179.                         'route' => 'recursos_pendentes',
  180.                         'parameters' => ['id' => $editalAtivo->getId()],
  181.                     ],
  182.                     [
  183.                         'route' => 'recursos_aceitos',
  184.                         'parameters' => ['id' => $editalAtivo->getId()],
  185.                     ],
  186.                     [
  187.                         'route' => 'recursos_recusados',
  188.                         'parameters' => ['id' => $editalAtivo->getId()],
  189.                     ],
  190.                 ]);
  191.             }
  192.             if ($this->security->isGranted('ROLE_FUNCIONARIO')) {
  193.                 $menu->getChild('edital' $index)->addChild('relatorios', [
  194.                     'label' => 'Relatórios',
  195.                     'childOptions' => $event->getChildOptions(),
  196.                     'route' => 'relatorios',
  197.                     'routeParameters' => ['id' => $editalAtivo->getId()]
  198.                 ]);
  199.             }
  200.         }
  201.         /**
  202.          * MENU DE CONFIGURAÇÕES GERAIS
  203.          */
  204.         if ($this->security->isGranted('ROLE_FUNCIONARIO')) {
  205.             $menu->addChild('ConfiguracoesGerais', [
  206.                 'label' => 'CONFIGURAÇÕES GERAIS',
  207.                 'childOptions' => $event->getChildOptions()
  208.             ])->setAttribute('class''header');
  209.             // EDITAIS
  210.             $menu->addChild('listarEditais', [
  211.                 'route' => 'editais',
  212.                 'label' => 'Editais cadastrados',
  213.                 'childOptions' => $event->getChildOptions()
  214.             ])->setLabelAttribute('icon''fas fa-list')
  215.                 ->setExtra('routes', [
  216.                 'editais',
  217.                 'new_edital_linha',
  218.                 'edit_edital',
  219.                 'edital_linha_responsaveis',
  220.                 'edital_add_primeira_etapa',
  221.                 'edital_add_segunda_etapa',
  222.                 'edital_periodo_cronograma',
  223.                 'edital_edit_primeira_etapa',
  224.                 'edital_edit_segunda_etapa'
  225.             ]);
  226.             // LINHAS DE PESQUISA
  227.             $menu->addChild('linhasDePesquisa', [
  228.                 'route' => 'linhas',
  229.                 'label' => 'Linhas de Pesquisa',
  230.                 'childOptions' => $event->getChildOptions()
  231.             ])->setLabelAttribute('icon''fas fa-book');
  232.             // BAREMA
  233.             if (!$lite && $this->params->get('barema')) {
  234.                 $menu->addChild('barema', [
  235.                     'route' => 'baremas',
  236.                     'label' => 'Baremas',
  237.                     'childOptions' => $event->getChildOptions()
  238.                 ])->setLabelAttribute('icon''fas fa-graduation-cap');
  239.             }
  240.             // USUÁRIOS
  241.             $menu->addChild('usuarios', [
  242.                 'label' => 'Usuários',
  243.                 'childOptions' => $event->getChildOptions()
  244.             ])->setLabelAttribute('icon''fas fa-users');
  245.             $menu->getChild('usuarios')->addChild('listarCandidatos', [
  246.                 'route' => 'candidatos',
  247.                 'label' => 'Candidatos',
  248.                 'childOptions' => $event->getChildOptions()
  249.             ]);
  250.             if (!$lite) {
  251.                 $menu->getChild('usuarios')->addChild('listarProfessores', [
  252.                     'route' => 'professores',
  253.                     'label' => 'Professores',
  254.                     'childOptions' => $event->getChildOptions()
  255.                 ]);
  256.             }
  257.             $menu->getChild('usuarios')->addChild('listarFuncionarios', [
  258.                 'route' => 'funcionarios',
  259.                 'label' => 'Funcionários',
  260.                 'childOptions' => $event->getChildOptions()
  261.             ]);
  262.             $menu->getChild('usuarios')->addChild('listarAdministradores', [
  263.                 'route' => 'administradores',
  264.                 'label' => 'Administradores',
  265.                 'childOptions' => $event->getChildOptions()
  266.             ]);
  267.             // MOTIVOS
  268.             $menu->addChild('configuracoes', [
  269.                 'label' => 'Configuração',
  270.                 'childOptions' => $event->getChildOptions()
  271.             ])->setLabelAttribute('icon''fas fa-clipboard-list');
  272.             $menu->getChild('configuracoes')->addChild('listarMotivosHomologacao', [
  273.                 'route' => 'motivos_nao_homologacao',
  274.                 'label' => 'Motivos de Não Homologação',
  275.                 'childOptions' => $event->getChildOptions()
  276.             ]);
  277.             if (!$lite) {
  278.                 $menu->getChild('configuracoes')->addChild('listarMotivosDesclassificacao', [
  279.                     'route' => 'motivos_desclassificacao',
  280.                     'label' => 'Motivos de Desclassificação',
  281.                     'childOptions' => $event->getChildOptions()
  282.                 ]);
  283.             }
  284.             $menu->getChild('configuracoes')->addChild('listarMensagens', [
  285.                 'route' => 'mensagens',
  286.                 'label' => 'Mensagens',
  287.                 'childOptions' => $event->getChildOptions()
  288.             ]);
  289.             $menu->getChild('configuracoes')->addChild('listarParametros', [
  290.                 'route' => 'parametros',
  291.                 'label' => 'Parâmetros',
  292.                 'childOptions' => $event->getChildOptions()
  293.             ]);
  294.         }
  295.     }
  296. }