<?php
namespace App\EventSubscriber;
use App\Repository\EditalRepository;
use App\Service\Parametros;
use KevinPapst\AdminLTEBundle\Event\KnpMenuEvent;
use KevinPapst\AdminLTEBundle\Event\ThemeEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Security;
class KnpAdminMenuBuilderSubscriber implements EventSubscriberInterface
{
/** @var \App\Entity\Edital[] */
private array $editaisAtivos;
private Security $security;
private Parametros $params;
public function __construct(EditalRepository $editalRepository, Security $security, Parametros $parametros)
{
if ($security->isGranted('ROLE_PROFESSOR') && !$security->isGranted('ROLE_ADMIN')) {
$this->editaisAtivos = $editalRepository->findEditaisAtivosParaProfessor($security->getUser());
} else {
$this->editaisAtivos = $editalRepository->findEditaisAtivos();
}
$this->security = $security;
$this->params = $parametros;
}
public static function getSubscribedEvents(): array
{
return [
KnpMenuEvent::class => ['onSetupMenu', 100],
];
}
public function onSetupMenu(KnpMenuEvent $event)
{
$menu = $event->getMenu();
$lite = $this->params->get('lite');
$menu->setChildrenAttribute('style', 'white-space: normal;');
/**
* MENU PRINCIPAL
*/
$menu->addChild('dashboard', [
'label' => 'Dashboard',
'route' => 'admin',
'childOptions' => $event->getChildOptions()
])->setLabelAttribute('icon', 'fas fa-home');
/**
* MENU DOS PROCESSOS SELETIVOS ATIVOS
*/
$menu->addChild('ProcessoSeletivo', [
'label' => 'EDITAIS ATIVOS',
'childOptions' => $event->getChildOptions()
])->setAttribute('class', 'header');
foreach ($this->editaisAtivos as $index => $editalAtivo) {
$menu->addChild('edital' . $index, [
'label' => $editalAtivo->getNomeInterno(),
'childOptions' => $event->getChildOptions()
]);
if ($this->security->isGranted('ROLE_FUNCIONARIO')) {
$menu->getChild('edital' . $index)->addChild('listarInscricoes', [
'label' => 'Candidatos',
'childOptions' => $event->getChildOptions(),
'route' => 'edital',
'routeParameters' => ['id' => $editalAtivo->getId()]
]);
$menu->getChild('edital' . $index)->addChild('homologacao', [
'label' => 'Homologar Inscrições',
'childOptions' => $event->getChildOptions(),
'route' => 'edital_homologar',
'routeParameters' => ['id' => $editalAtivo->getId()]
])->setExtra('routes', [
[
'route' => 'edital_homologar',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'edital_homologar_reserva',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'homologar_inscricao',
'parameters' => ['id' => $editalAtivo->getId()],
],
]);
}
foreach ($editalAtivo->getEtapas() as $etapa) {
if ($lite) continue;
if ($etapa->getIsPrimeiraEtapa()) {
$menu->getChild('edital' . $index)->addChild('primeiraEtapa', [
'label' => $etapa->getNome(),
'childOptions' => $event->getChildOptions(),
'route' => 'edital_primeira_etapa',
'routeParameters' => ['id' => $editalAtivo->getId()]
])->setExtra('routes', [
[
'route' => 'edital_primeira_etapa',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'edital_primeira_etapa_reserva',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'inscricao_primeira_etapa',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'desclassificar_primeira_etapa',
'parameters' => ['id' => $editalAtivo->getId()],
],
]);
} else {
$menu->getChild('edital' . $index)->addChild('segundaEtapa', [
'label' => $etapa->getNome(),
'childOptions' => $event->getChildOptions(),
'route' => 'edital_segunda_etapa',
'routeParameters' => ['id' => $editalAtivo->getId()]
])->setExtra('routes', [
[
'route' => 'edital_segunda_etapa',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'edital_segunda_etapa_reserva',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'inscricao_segunda_etapa',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'desclassificar_segunda_etapa',
'parameters' => ['id' => $editalAtivo->getId()],
],
]);
$menu->getChild('edital' . $index)->addChild('cronograma', [
'label' => 'Cronograma de Defesas',
'childOptions' => $event->getChildOptions(),
'route' => 'edital_cronograma',
'routeParameters' => ['id' => $editalAtivo->getId()]
])->setExtra('routes', [
[
'route' => 'edital_cronograma',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'inscricao_cronograma',
'parameters' => ['id' => $editalAtivo->getId()],
],
]);
}
}
if (!$lite && $editalAtivo->getRemanejarCandidatos()) {
$menu->getChild('edital' . $index)->addChild('remanejos', [
'label' => 'Remanejos',
'childOptions' => $event->getChildOptions(),
'route' => 'remanejos',
'routeParameters' => ['id' => $editalAtivo->getId()]
])->setExtra('routes', [
[
'route' => 'remanejos_pendentes',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'remanejos_aceitos',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'remanejos_recusados',
'parameters' => ['id' => $editalAtivo->getId()],
],
]);
}
if (!$lite) {
$menu->getChild('edital' . $index)->addChild('recursos', [
'label' => 'Recursos',
'childOptions' => $event->getChildOptions(),
'route' => 'recursos',
'routeParameters' => ['id' => $editalAtivo->getId()]
])->setExtra('routes', [
[
'route' => 'recursos_pendentes',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'recursos_aceitos',
'parameters' => ['id' => $editalAtivo->getId()],
],
[
'route' => 'recursos_recusados',
'parameters' => ['id' => $editalAtivo->getId()],
],
]);
}
if ($this->security->isGranted('ROLE_FUNCIONARIO')) {
$menu->getChild('edital' . $index)->addChild('relatorios', [
'label' => 'Relatórios',
'childOptions' => $event->getChildOptions(),
'route' => 'relatorios',
'routeParameters' => ['id' => $editalAtivo->getId()]
]);
}
}
/**
* MENU DE CONFIGURAÇÕES GERAIS
*/
if ($this->security->isGranted('ROLE_FUNCIONARIO')) {
$menu->addChild('ConfiguracoesGerais', [
'label' => 'CONFIGURAÇÕES GERAIS',
'childOptions' => $event->getChildOptions()
])->setAttribute('class', 'header');
// EDITAIS
$menu->addChild('listarEditais', [
'route' => 'editais',
'label' => 'Editais cadastrados',
'childOptions' => $event->getChildOptions()
])->setLabelAttribute('icon', 'fas fa-list')
->setExtra('routes', [
'editais',
'new_edital_linha',
'edit_edital',
'edital_linha_responsaveis',
'edital_add_primeira_etapa',
'edital_add_segunda_etapa',
'edital_periodo_cronograma',
'edital_edit_primeira_etapa',
'edital_edit_segunda_etapa'
]);
// LINHAS DE PESQUISA
$menu->addChild('linhasDePesquisa', [
'route' => 'linhas',
'label' => 'Linhas de Pesquisa',
'childOptions' => $event->getChildOptions()
])->setLabelAttribute('icon', 'fas fa-book');
// BAREMA
if (!$lite && $this->params->get('barema')) {
$menu->addChild('barema', [
'route' => 'baremas',
'label' => 'Baremas',
'childOptions' => $event->getChildOptions()
])->setLabelAttribute('icon', 'fas fa-graduation-cap');
}
// USUÁRIOS
$menu->addChild('usuarios', [
'label' => 'Usuários',
'childOptions' => $event->getChildOptions()
])->setLabelAttribute('icon', 'fas fa-users');
$menu->getChild('usuarios')->addChild('listarCandidatos', [
'route' => 'candidatos',
'label' => 'Candidatos',
'childOptions' => $event->getChildOptions()
]);
if (!$lite) {
$menu->getChild('usuarios')->addChild('listarProfessores', [
'route' => 'professores',
'label' => 'Professores',
'childOptions' => $event->getChildOptions()
]);
}
$menu->getChild('usuarios')->addChild('listarFuncionarios', [
'route' => 'funcionarios',
'label' => 'Funcionários',
'childOptions' => $event->getChildOptions()
]);
$menu->getChild('usuarios')->addChild('listarAdministradores', [
'route' => 'administradores',
'label' => 'Administradores',
'childOptions' => $event->getChildOptions()
]);
// MOTIVOS
$menu->addChild('configuracoes', [
'label' => 'Configuração',
'childOptions' => $event->getChildOptions()
])->setLabelAttribute('icon', 'fas fa-clipboard-list');
$menu->getChild('configuracoes')->addChild('listarMotivosHomologacao', [
'route' => 'motivos_nao_homologacao',
'label' => 'Motivos de Não Homologação',
'childOptions' => $event->getChildOptions()
]);
if (!$lite) {
$menu->getChild('configuracoes')->addChild('listarMotivosDesclassificacao', [
'route' => 'motivos_desclassificacao',
'label' => 'Motivos de Desclassificação',
'childOptions' => $event->getChildOptions()
]);
}
$menu->getChild('configuracoes')->addChild('listarMensagens', [
'route' => 'mensagens',
'label' => 'Mensagens',
'childOptions' => $event->getChildOptions()
]);
$menu->getChild('configuracoes')->addChild('listarParametros', [
'route' => 'parametros',
'label' => 'Parâmetros',
'childOptions' => $event->getChildOptions()
]);
}
}
}