<?php
namespace App\Controller\Admin;
use App\Entity\Article;
use App\Entity\ArticleCategorie;
use App\Entity\ArticleCritere;
use App\Entity\ArticleCritereValeur;
use App\Entity\ArticleType;
use App\Entity\Formulaire;
use App\Entity\FormulaireChamp;
use App\Entity\FormulaireInput;
use App\Entity\FormulaireRecap;
use App\Entity\Page;
use App\Entity\Projet;
use App\Entity\User;
use App\Entity\Combi;
use App\Entity\UserRole;
use App\Entity\Groupe;
use App\Entity\Objet;
use App\Entity\Section;
use Doctrine\Persistence\ManagerRegistry;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use EasyCorp\Bundle\EasyAdminBundle\Provider\AdminContextProvider;
use Flasher\SweetAlert\Prime\SweetAlertFactory;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
class DashboardController extends AbstractDashboardController
{
private ManagerRegistry $manager;
private $adminContextProvider;
private SweetAlertFactory $flasher;
public function __construct(
ManagerRegistry $manager,
AdminContextProvider $adminContextProvider,
SweetAlertFactory $flasher
) {
$this->manager = $manager;
$this->adminContextProvider = $adminContextProvider;
$this->flasher = $flasher;
}
/**
* @Security("is_granted('ROLE_SUPER_ADMIN') or is_granted('ROLE_UTILISATEUR') ")
* @Route("/admin", name="admin")
*/
public function index(): Response
{
/* return parent::index(); */
$projects = $this->manager->getRepository(Projet::class)->findAll();
return $this->render('admin/index.html.twig', ['projects' => $projects,]);
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('Devil It Applications');
}
public function configureMenuItems(): iterable
{
$article = false;
$page = false;
$formulaire = false;
$objet = false;
$combi = false;
$projet = false;
$param_article = false;
$utilisateur = false;
$import_export = false;
$droits = false;
$p = null;
$bool = false;
$userRoles = $this->getUser()->getUserRoles();
if (!$this->isGranted('ROLE_SUPER_ADMIN')) {
if (count($userRoles) == 0) {
$this->getUser()->setProjet(null);
yield MenuItem::linkToRoute(strtoupper($this->getUser()->getProjet()), 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
} else {
foreach ($userRoles as $r) {
$p = $r->getProjet();
if ($p == $this->getUser()->getProjet()) {
$bool = true;
}
}
if ($bool) {
yield MenuItem::linkToRoute(strtoupper($this->getUser()->getProjet()), 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
} else {
yield MenuItem::linkToRoute('', 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
}
}
} else {
yield MenuItem::linkToRoute(strtoupper($this->getUser()->getProjet()), 'fa fa-check', 'app_admin_change_project')->setCssClass('menu-header mb-3');
}
yield MenuItem::linkToDashboard('Tableau de bord', 'fa fa-dashboard');
if ($this->getUser()->getProjet() != null) {
if ($this->isGranted('ROLE_SUPER_ADMIN')) {
$article = true;
$page = true;
$formulaire = true;
$objet = true;
$combi = true;
$projet = true;
$param_article = true;
$utilisateur = true;
$import_export = true;
$droits = true;
} else {
$user = $this->getUser();
$project = $user->getProjet();
$roles = $this->manager->getRepository(UserRole::class)->findBy(['user' => $user, 'projet' => $project]);
foreach ($roles as $role) {
$r_user = $role->getGroupe();
$label = $r_user->getLabel();
if ($label == 'ROLE_ADMIN') {
$page = true;
$article = true;
$formulaire = true;
$objet = true;
$projet = true;
$combi = true;
$param_article = true;
$utilisateur = true;
$import_export = true;
$droits = true;
}
if ($r_user->getPage()) {
$page = true;
}
if ($r_user->getArticle()) {
$article = true;
}
if ($r_user->getFormulaire()) {
$formulaire = true;
}
if ($r_user->getObjet()) {
$objet = true;
}
if ($r_user->getCombi()) {
$combi = true;
}
if ($r_user->getProjet()) {
$projet = true;
}
if ($r_user->getParamArticle()) {
$param_article = true;
}
if ($r_user->getUtilisateur()) {
$utilisateur = true;
}
if ($r_user->getImportExport()) {
$import_export = true;
}
}
}
/**************** Page************************************************/
if ($page) {
yield MenuItem::section('Redaction', 'fa fa-keyboard');
yield MenuItem::linkToCrud('Page', 'fa fa-map', Page::class);
}
/**************** Article************************************************/
$types = $this->manager->getRepository(ArticleType::class)->findBy(['projet' => $this->getUser()->getProjet()->getId()]);
if ($article) {
if (count($types) > 0) {
foreach ($types as $type) {
if ($type->getIcon() != null && $type->getIcon() != '') {
yield MenuItem::linkToCrud($type->getType(), $type->getIcon(), Article::class)->setQueryParameter('typeid', $type->getId());
} else {
yield MenuItem::linkToCrud($type->getType(), 'fa fa-newspaper', Article::class)->setQueryParameter('typeid', $type->getId());
}
}
}
}
/**************** Paramètrage Article************************************************/
if ($param_article) {
yield MenuItem::section('Paramétrage Article', '');
yield MenuItem::linkToCrud('Type', 'fa fa-columns', ArticleType::class);
if (count($types) > 0) {
foreach ($types as $type) {
if ($type->getIcon() != null && $type->getIcon() != '') {
yield MenuItem::subMenu($type->getType(), $type->getIcon())->setSubItems([
MenuItem::linkToCrud('Categorie', 'fa fa-layer-group', ArticleCategorie::class)->setQueryParameter('typeid', $type->getId()),
MenuItem::linkToCrud('Critère', 'fa fa-paperclip', ArticleCritere::class)->setQueryParameter('typeid', $type->getId()),
MenuItem::linkToCrud('Valeur Critère', 'fa fa-hashtag', ArticleCritereValeur::class)->setQueryParameter('typeid', $type->getId()),
]);
} else {
yield MenuItem::subMenu($type->getType(), 'fa fa-pager')->setSubItems([
MenuItem::linkToCrud('Categorie', 'fa fa-layer-group', ArticleCategorie::class)->setQueryParameter('typeid', $type->getId()),
MenuItem::linkToCrud('Critère', 'fa fa-paperclip', ArticleCritere::class)->setQueryParameter('typeid', $type->getId()),
MenuItem::linkToCrud('Valeur Critère', 'fa fa-hashtag', ArticleCritereValeur::class)->setQueryParameter('typeid', $type->getId()),
]);
}
}
}
}
/**************** Formulaire************************************************/
if ($formulaire) {
yield MenuItem::section('Formulaire', '');
yield MenuItem::linkToCrud('Formulaire', 'fa fa-file-contract', Formulaire::class);
yield MenuItem::linkToCrud('Input', 'fa fa-bars', FormulaireInput::class);
yield MenuItem::linkToCrud('Recap', 'fa fa-id-card', FormulaireRecap::class);
yield MenuItem::linkToCrud('Champs', 'fa fa-clipboard-list', FormulaireChamp::class);
}
/*******************************************/
if (($objet) || ($combi)) {
yield MenuItem::section('Contenu', '');
}
/*******************************************/
/**************** Combi************************************************/
if ($combi) {
yield MenuItem::linkToCrud('Combi', 'fa fa-sitemap', Combi::class);
}
/****************Objet************************************************/
if ($objet) {
// yield MenuItem::linkToDashboard('Objet', 'fa fa-object-ungroup');
yield MenuItem::linkToCrud('Objet', 'fa fa-object-group', Objet::class);
// yield MenuItem::linkToCrud('config Objet', 'fa fa-object-ungroup', Objet::class)->setPermission('ROLE_OBJET');
yield MenuItem::linkToCrud('Code Section', 'fa fa-vector-square', Section::class);
}
/*******************************************/
if (($projet) || ($utilisateur) || ($import_export)) {
yield MenuItem::section('Paramétrage', '');
}
/*******************************************/
/**************** Import--Export ************************************************/
if ($import_export) {
yield MenuItem::linkToRoute('Import / Export', 'fa fa-file-csv', 'app_import_export');
}
/**************** Projet************************************************/
if ($projet) {
yield MenuItem::linkToCrud('Projets', 'fa fa-lightbulb', Projet::class);
}
/**************** Utilisateurs************************************************/
if ($utilisateur) {
yield MenuItem::linkToCrud('Utilisateurs', 'fas fa-users', User::class);
}
}
if ($droits) {
yield MenuItem::section('Droits', '');
yield MenuItem::linkToCrud('Groupe', 'fa fa-users', Groupe::class);
yield MenuItem::linkToCrud('User Role', 'fas fa-id-badge', UserRole::class);
}
yield MenuItem::section('Personnel', '');
yield MenuItem::linkToDashboard('Changer mot de passe', 'fa fa-key');
yield MenuItem::linkToLogout('Déconnecter', 'fa fa-fw fa-sign-out');
}
public function configureAssets(): Assets
{
return parent::configureAssets()
->addCssFile('node_modules/bootstrap-icons/font/bootstrap-icons.css')
->addCssFile('node_modules/datatables.net-dt/css/jquery.dataTables.min.css')
->addCssFile('css/trixcss.css')
->addJsFile('node_modules/jquery/dist/jquery.js')
->addJsFile('node_modules/datatables.net/js/jquery.dataTables.min.js')
->addJsFile('js/trixjs.js')
->addCssFile('css/admin-dashboard.css');
}
public function configureActions(): Actions
{
return parent::configureActions()
->update(Crud::PAGE_NEW, Action::SAVE_AND_ADD_ANOTHER, function (Action $action) {
return $action->addCssClass('btn-success');
})
->update(Crud::PAGE_EDIT, Action::SAVE_AND_CONTINUE, function (Action $action) {
return $action->addCssClass('btn-success');
})
->update(Crud::PAGE_INDEX, Action::EDIT, function (Action $action) {
return $action->setLabel('Modifier');
});
}
}