src/Controller/Admin/SessionCrudController.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Cour;
  4. use App\Entity\Session;
  5. use App\Entity\Sport;
  6. use App\Filter\Event\EventFilteredEntityFilter;
  7. use App\Form\ImportExcelType;
  8. use App\Services\SessionImportService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Doctrine\ORM\EntityRepository;
  11. use Doctrine\ORM\QueryBuilder;
  12. use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
  13. use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
  14. use EasyCorp\Bundle\EasyAdminBundle\Config\Filters;
  15. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
  16. use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  17. use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
  18. use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
  19. use EasyCorp\Bundle\EasyAdminBundle\Field\DateField;
  20. use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
  21. use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
  22. use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
  23. use EasyCorp\Bundle\EasyAdminBundle\Field\TimeField;
  24. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  25. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  26. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  27. use EasyCorp\Bundle\EasyAdminBundle\Filter\DateTimeFilter;
  28. use EasyCorp\Bundle\EasyAdminBundle\Filter\TextFilter;
  29. use Symfony\Component\HttpFoundation\JsonResponse;
  30. use Symfony\Component\HttpFoundation\Request;
  31. use Symfony\Component\HttpFoundation\Response;
  32. use Symfony\Component\Routing\Annotation\Route;
  33. class SessionCrudController extends AbstractCrudController
  34. {
  35.     /**
  36.      * @Route("/get-session-data", name="get_session_data", methods={"GET"})
  37.      */
  38.     public function getSessionData(Request $requestEntityManagerInterface $em): JsonResponse
  39.     {
  40.         $sessionId $request->query->get('sessionId');
  41.         $session $em->getRepository(Session::class)->find($sessionId);
  42.         if (!$session) {
  43.             return new JsonResponse(['error' => 'Session not found'], 404);
  44.         }
  45.         return new JsonResponse([
  46.             'date' => $session->getDate()->format('d/m/Y'), // assuming the date is a DateTime object
  47.             'designationSession' => $session->getDesignationSession(),
  48.         ]);
  49.     }
  50.     public function configureCrud(Crud $crud): Crud
  51.     {
  52.         return $crud
  53.             ->setPaginatorPageSize(10000)
  54.             ->setPageTitle('index''Matchs')
  55.             ->setPageTitle('new''Create Match')
  56.             ->setEntityLabelInSingular('Match');
  57.     }
  58.     public function createIndexQueryBuilder(SearchDto $searchDtoEntityDto $entityDtoFieldCollection $fieldsFilterCollection $filters): QueryBuilder
  59.     {
  60.         $qb parent::createIndexQueryBuilder($searchDto$entityDto$fields$filters);
  61.         // get the 'event_id' from cookies
  62.         $request $this->get('request_stack')->getCurrentRequest();
  63.         $eventId $request->cookies->get('current_event_id');
  64.         if ($eventId) {
  65.             $qb->andWhere('entity.event = :eventId')
  66.                 ->setParameter('eventId'$eventId);
  67.         }
  68.         return $qb;
  69.     }
  70.     public function configureActions(Actions $actions): Actions
  71.     {
  72.         $importAction Action::new('import''Import')
  73.             ->linkToCrudAction('import'// pointe vers la méthode import() dans ce controller
  74.             ->addCssClass('btn btn-success')
  75.             ->createAsGlobalAction(); // ceci rendra l'action visible pour toutes les pages du CRUD
  76.         return $actions
  77.             // ...
  78.             ->update(Crud::PAGE_INDEXAction::NEW, function (Action $action) {
  79.                 return $action->setIcon('fa fa-file-new')->setLabel("Add Match");
  80.             })->add(Crud::PAGE_INDEX$importAction);
  81.     }
  82.     // cette méthode sera invoquée lorsque vous cliquez sur le bouton 'Import'
  83.     public function import(Request $requestSessionImportService $sessionImportService): Response
  84.     {
  85.         $form $this->createForm(ImportExcelType::class);
  86.         $form->handleRequest($request);
  87.         if ($form->isSubmitted() && $form->isValid()) {
  88.             // Handle form submission, call the service to do the importing.
  89.             $file $form->get('file')->getData();
  90.             $filePath $this->getParameter('kernel.project_dir').'/public/uploads/'.$file->getClientOriginalName();
  91.             $file->move(
  92.                 $this->getParameter('kernel.project_dir').'/public/uploads',
  93.                 $file->getClientOriginalName()
  94.             );
  95.             $request $this->get('request_stack')->getCurrentRequest();
  96.             $eventId $request->cookies->get('current_event_id');
  97.             $sessionImportService->importFromFile($filePath$eventId);
  98.         }
  99.         return $this->render('admin/Session/import.html.twig', [
  100.             'form' => $form->createView(),
  101.         ]);
  102.     }
  103.     public function configureFilters(Filters $filters): Filters
  104.     {
  105.         $request $this->get('request_stack')->getCurrentRequest();
  106.         $eventId $request->cookies->get('current_event_id');
  107.         return $filters
  108.             ->add(EventFilteredEntityFilter::new('design'Sport::class, $eventId'Sport'))
  109.             ->add(EventFilteredEntityFilter::new('cour'Cour::class, $eventId'Stade'))
  110.             ->add(DateTimeFilter::new('date''Date'))
  111.             ->add(TextFilter::new('codeSession''Code liste'));
  112.     }
  113.     public static function getEntityFqcn(): string
  114.     {
  115.         return Session::class;
  116.     }
  117.     public function configureFields(string $pageName): iterable
  118.     {
  119.         $request $this->get('request_stack')->getCurrentRequest();
  120.         $eventId $request->cookies->get('current_event_id');
  121.         yield AssociationField::new('design''Sport')->setFormTypeOptions([
  122.             'query_builder' => function (EntityRepository $er) use ($eventId) {
  123.                 return $er->createQueryBuilder('a')
  124.                     ->where('a.event = :currentEventId')
  125.                     ->setParameter('currentEventId'$eventId);
  126.             },
  127.         ]);
  128.         if ($pageName == Crud::PAGE_INDEX) {
  129.             yield TextField::new('localizedDate''Date');
  130.         } else {
  131.             yield AssociationField::new('cour''Stade')->setFormTypeOptions([
  132.                 'query_builder' => function (EntityRepository $er) use ($eventId) {
  133.                     return $er->createQueryBuilder('a')
  134.                         ->where('a.event = :currentEventId')
  135.                         ->setParameter('currentEventId'$eventId);
  136.                 },
  137.             ]);
  138.             yield DateField::new('date''Date');
  139.         }
  140.         yield TimeField::new('heure_start')->setColumns('col-md-3');
  141.         yield TimeField::new('heure_end')->setColumns('col-md-3');
  142.         yield TextareaField::new('description')->setColumns('col-md-12');
  143.         yield TextField::new('designation_session');
  144.         yield TextField::new('code_session');
  145.         yield TextField::new('type_session');
  146.         yield NumberField::new('cat_a');
  147.         yield NumberField::new('cat_b');
  148.         yield NumberField::new('cat_c');
  149.         yield NumberField::new('cat_d');
  150.     }
  151. }