<?php
namespace App\Controller\Admin;
use App\Entity\User;
use App\Service\NotificationManager;
use DateTimeInterface;
use Doctrine\ORM\Mapping\Id;
use App\Entity\Sessionsformation;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\InscriptionSessionFormation;
use Knp\Component\Pager\PaginatorInterface;
use App\Form\InscriptionSessionFormationType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Field\Field;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Field\IdField;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
use EasyCorp\Bundle\EasyAdminBundle\Field\DateTimeField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
use App\Controller\Admin\InscriptionSessionFormationCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
class SessionsformationCrudController extends AbstractCrudController
{
private AdminUrlGenerator $adminUrlGenerator;
public function __construct(
AdminUrlGenerator $adminUrlGenerator,
) {
$this->adminUrlGenerator = $adminUrlGenerator;
}
public static function getEntityFqcn(): string
{
return Sessionsformation::class;
}
public function configureFields(string $pageName): iterable
{
return [
IdField::new('id')->hideOnForm(),
NumberField::new('numsession', 'N° session')->setColumns('col-sm-12 col-md-12 col-lg-12 col-xxl-12')->setFormTypeOptions(["attr" => ['min' => '0','pattern'=>'[0-9]+', 'oninput'=>"this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"]])->setRequired(true),
TextField::new('titre', 'Titre')->setColumns('col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
DateField::new('date_debut', 'Date Début')->setColumns('col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
DateField::new('date_fin', 'Date Fin')->setColumns('col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
TextField::new('formateur', 'Formateur')->setColumns('col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
TextField::new('adresse', 'Adresse')->setColumns('col-sm-12 col-md-12 col-lg-12 col-xxl-12'),
TextareaField::new('description', 'description')->formatValue(function ($value) {
return $value ;
})->setColumns('col-sm-12 col-md-12 coil-lg-12 col-xxl-12')
->setTemplatePath('admin/fields/details.html.twig')->setRequired($pageName !== Crud::PAGE_EDIT)->hideOnIndex(),
ImageField::new('photo', 'Photo')->setUploadDir('public/imagees/galery')->setBasePath('imagees/galery')->setUploadedFileNamePattern('[randomhash].[extension]')->setRequired($pageName !== Crud::PAGE_EDIT)
->setFormTypeOptions(["attr" => ['accept' => 'image/*']])->setRequired($pageName !== Crud::PAGE_EDIT),
ImageField::new('document_prog', 'Programme de formation')->setUploadDir('/public/upload/galerie/images')->setBasePath('upload/galerie/images')->setUploadedFileNamePattern('[randomhash].[extension]')
->setFormTypeOptions(["attr" => ['accept' => 'image/*, application/pdf, application/vnd.ms-excel']])->hideOnIndex()
->setTemplatePath('admin/fields/vich_uploader_pdf.html.twig')->setRequired($pageName !== Crud::PAGE_EDIT),
];
}
public function configureCrud(Crud $crud): Crud
{
return $crud ->setPageTitle('index', 'Liste des Sessions de formation')
->setPageTitle('detail', 'Détails des Sessions de formation')
->setPageTitle('new', 'Créer une Session de formation')
->setPageTitle('edit', 'Modifier une Session de formation');
}
public function configureActions(Actions $actions): Actions
{
$inscri = Action::new('ConsulterINSCRI', 'Consulter la liste Inscription à cette session') ->linkToCrudAction('ConsulterINSCRI') ;
$actions->add(Crud::PAGE_INDEX, Action::DETAIL)
->update(Crud::PAGE_NEW, Action::SAVE_AND_RETURN, function (Action $action) {
return $action->setLabel('Enregistrer');
})
->update(Crud::PAGE_INDEX, Action::NEW, function (Action $action) {
return $action->setIcon('fa fa-plus')->setLabel('Créer une Session de formation');
})
->add(Crud::PAGE_INDEX, $inscri)
;
return $actions;
}
public function ConsulterINSCRI(AdminContext $context)
{
$entityInstance = $context->getEntity()->getInstance();
$url =
$this->adminUrlGenerator
->setController(InscriptionSessionFormationCrudController::class)
->setAction(Action::INDEX)
->unset('entityId')
->set('sessionFormation', $entityInstance->getId())
->generateUrl();
return $this->redirect($url);
}
#[Route('/show/formation/detail/{id}', name: 'show_formation_detail')]
public function showByFormationDetail(Sessionsformation $sessionformation, Request $request, EntityManagerInterface $entityManager): Response
{
$isInscri = false;
if ($this->getUser() !== null) {
foreach ($this->getUser()->getInscriptionSessionFormations() as $inscriptionSession) {
if ($inscriptionSession->getSessionFormation() === $sessionformation) {
$isInscri = true;
}
}
}
return $this->render('sessionformation/detail.html.twig', [
'formation'=>$sessionformation,
'isInscri'=> $isInscri,
]);
}
#[Route('/inscritSessionFormation/{id}', name: 'app_inscrit_session')]
public function inscritSessionFormation(Sessionsformation $sessionformation, Request $request,
EntityManagerInterface $entityManager,
NotificationManager $notificationManager
): Response
{
$inscriptionSessionFormation = new InscriptionSessionFormation();
$form = $this->createForm(InscriptionSessionFormationType::class, $inscriptionSessionFormation);
if ($request->getMethod() == 'POST') {
$inscriptionSessionFormation->setMail($request->request->all()['inscription_session_formation']['mail']);
$inscriptionSessionFormation->setTel($request->request->all()['inscription_session_formation']['tel']);
if($request->request->all()['inscription_session_formation']['autres'] != null){
$inscriptionSessionFormation->setFonction($request->request->all()['inscription_session_formation']['autres']);
}else{
$inscriptionSessionFormation->setFonction($request->request->all()['inscription_session_formation']['fonction']);
}
$inscriptionSessionFormation->setUser($this->getUser());
$inscriptionSessionFormation->setSessionformation($sessionformation);
$entityManager->persist($inscriptionSessionFormation);
$entityManager->flush();
$this->addFlash('success', 'inscription effectuée avec succès!');
// Send Comment
$edit_demande_url = $this->adminUrlGenerator
->setController(SessionsformationCrudController::class)
->setAction('ConsulterINSCRI')
->setEntityId($inscriptionSessionFormation->getSessionFormation()->getId())
->generateUrl();
$notification_message = 'Inscription session effectuée! ';
$admins = $entityManager->getRepository(User::class)->findByRole('ROLE_ADMIN');
foreach($admins as $admin){
$notificationManager->pushMessage('Inscription session effectuée ! ', $notification_message, $admin, $edit_demande_url);
}
// End send comment
return $this->redirectToRoute('app_listInscri');
}
return $this->render('sessionformation/inscritSessionFormation.html.twig', [
'formation'=>$sessionformation,
'form' => $form->createView()
]);
}
#[Route('/listInscriptionSession', name: 'app_listInscri')]
public function ListeInscriptionSession(EntityManagerInterface $entityManager): Response
{
$InscriptionSession = $entityManager->getRepository(InscriptionSessionFormation::class)->findBy(['user' => $this->getUser()]);
return $this->render('sessionformation/list.html.twig', [
"InscriptionSession" => $InscriptionSession,
]);
}
#[Route('/deleteInscriSessionFormation/{id}', name: 'inscriSessionFormation_delete')]
public function deleteAction($id, EntityManagerInterface $entityManager)
{
$inscriSessionFormation = $entityManager->getRepository(InscriptionSessionFormation::class);
$inscriSessionFormation = $inscriSessionFormation->find($id);
if (!$inscriSessionFormation) {
throw $this->createNotFoundException(
'Il n\'y a aucun inscriSessionFormation avec l\'identifiant suivant : ' . $id
);
}
$entityManager->remove($inscriSessionFormation);
$entityManager->flush();
$this->addFlash('success', 'suppression effectuée avec succès');
return $this->redirect($this->generateUrl('app_listInscri'));
}
#[Route('/list/formation/index/', name: 'index_formation')]
public function listFormations(Request $request, EntityManagerInterface $entityManager, PaginatorInterface $paginator): Response
{
$donnees = $entityManager->getRepository(Sessionsformation::class)->getAllFormations();
$formations = $paginator->paginate(
$donnees,
$request->query->getInt('page', 1),
12
);
return $this->render('sessionformation/index.html.twig', [
'formations'=>$formations,
]);
}
}