<?php
namespace App\Controller\Admin;
use App\Controller\Admin\Project\RequestLabeledProjectCrudController;
use App\Controller\Admin\Project\RequestPublishedProjectCrudController;
use App\Entity\Page;
use App\Entity\User;
use App\Entity\Theme;
use App\Entity\Statut;
use App\Entity\Project;
use App\Entity\University;
use App\Entity\FeatureAccess;
use App\Entity\FeatureAccessAudit;
use App\Entity\ReportTemplate;
use App\Entity\SecurityAuditLog;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use App\Controller\Admin\User\UserCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use App\Controller\Admin\Project\ProjectCrudController;
use App\Controller\Admin\User\InactiveUserCrudController;
use App\Controller\Admin\AdminUser\AdminUserCrudController;
use App\Controller\Admin\Project\ArchivedProjectCrudController;
use App\Controller\Admin\Project\InactiveProjectCrudController;
use App\Controller\Admin\AdminUser\ScientificAdminUserCrudController;
use App\Controller\Admin\User\DisabledUserCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
/**
* Class DashboardController
* @package App\Controller\Admin
*/
class DashboardController extends AbstractDashboardController
{
#[Route(path: '/admin', name: 'admin')]
public function index(): Response
{
return $this->render('admin/dashboard.html.twig');
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('LaboMega');
}
public function configureMenuItems(): iterable
{
return [
MenuItem::linkToDashboard('admin.dashboard', 'fa fa-home'),
MenuItem::section('admin.section.admins')->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('admin.label.admins', 'fa fa-asterisk', User::class)->setController(AdminUserCrudController::class)->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('admin.label.scientific_admins', 'fa fa-asterisk', User::class)->setController(ScientificAdminUserCrudController::class)->setPermission('ROLE_ADMIN'),
MenuItem::section('admin.section.users'),
MenuItem::linkToCrud('admin.label.users', 'fa fa-user', User::class)->setController(UserCrudController::class),
MenuItem::linkToCrud('admin.label.inactive_users', 'fa fa-bookmark', User::class)->setController(InactiveUserCrudController::class),
MenuItem::linkToCrud('admin.label.disable_user', 'fa fa-door-open', User::class)->setController(DisabledUserCrudController::class),
MenuItem::section('admin.section.projects'),
MenuItem::linkToCrud('admin.label.projects', 'fa fa-archive', Project::class)->setController(ProjectCrudController::class),
MenuItem::linkToCrud('admin.label.inactive_projects', 'fa fa-bookmark', Project::class)->setController(InactiveProjectCrudController::class),
MenuItem::linkToCrud('admin.label.request_labeled_projects', 'fa fa-archive', Project::class)->setController(RequestLabeledProjectCrudController::class),
MenuItem::linkToCrud('admin.label.request_published_projects', 'fa fa-archive', Project::class)->setController(RequestPublishedProjectCrudController::class),
MenuItem::linkToCrud('admin.label.archived_projects', 'fa fa-box', Project::class)->setController(ArchivedProjectCrudController::class),
MenuItem::section('admin.section.organizations'),
MenuItem::linkToCrud('admin.label.organizations', 'fa fa-archive', Project::class)->setController(OrganizationCrudController::class),
MenuItem::section('IA — Templates', 'fa fa-robot')->setPermission('ROLE_ADMIN'),
// "Templates de prompts d'évaluation" retiré (mai 2026) — plugin
// "Rapport d'évaluation" désactivé via FeatureAccess `plugin.evaluation`.
// L'entité `EvaluationPromptTemplate` et son CRUD restent en code
// (pas de breaking change DB) ; on retire juste le lien du menu.
MenuItem::linkToCrud('Trames de rapport (plugin Rapports)', 'fa fa-file-alt', ReportTemplate::class)
->setController(ReportTemplateCrudController::class)
->setPermission('ROLE_ADMIN'),
MenuItem::section('Euro-Office — Accès', 'fa fa-key')->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('Plugins & menus par utilisateur/rôle', 'fa fa-key', FeatureAccess::class)
->setController(FeatureAccessCrudController::class)
->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('Audit log (modifs accès)', 'fa fa-history', FeatureAccessAudit::class)
->setController(FeatureAccessAuditCrudController::class)
->setPermission('ROLE_ADMIN'),
MenuItem::section('Monitoring', 'fa fa-chart-line')->setPermission('ROLE_ADMIN'),
MenuItem::linkToRoute('Dashboard temps réel', 'fa fa-chart-line', 'admin_monitoring_dashboard')
->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('Audit log — Sécurité IA', 'fa fa-shield-alt', SecurityAuditLog::class)
->setController(SecurityAuditLogCrudController::class)
->setPermission('ROLE_ADMIN'),
MenuItem::section('admin.section.others')->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('admin.label.cms_pages', 'fa fa-pager', Page::class)->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('admin.label.themes', 'fa fa-certificate', Theme::class)->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('admin.label.works', 'fa fa-check', Statut::class)->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('admin.label.universities', 'fa fa-university', University::class)->setPermission('ROLE_ADMIN'),
MenuItem::linkToCrud('admin.label.mail', 'fa fa-envelope-square', Letter::class)->setController(LetterCrudController::class),
MenuItem::linkToRoute('admin.label.translation', 'fa fa-flag', 'lexik_translation_grid')->setPermission('ROLE_ADMIN'),
];
}
public function configureCrud(): Crud
{
return Crud::new()
->setPageTitle('new', 'admin.title.new')
->setPageTitle('edit', 'admin.title.edit')
->setPageTitle('detail', 'admin.title.detail');
}
}