src/Controller/Front/FormationController.php line 36

  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\Actualite;
  4. use App\Entity\Contrats;
  5. use App\Entity\Diplomes;
  6. use App\Entity\Domaines;
  7. use App\Entity\Pole;
  8. use App\Repository\ContratsRepository;
  9. use App\Repository\DiplomesRepository;
  10. use App\Repository\DomainesRepository;
  11. use App\Repository\FormationRepository;
  12. use App\Repository\PoleRepository;
  13. use App\Repository\PositionBlocsFormationRepository;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Ttskch\PaginatorBundle\Context;
  20. use Ttskch\PaginatorBundle\Doctrine\Counter;
  21. use Ttskch\PaginatorBundle\Doctrine\Slicer;
  22. use Ttskch\PaginatorBundle\Entity\Criteria;
  23. class FormationController extends AbstractController
  24. {
  25.     public function __construct(
  26.         private EntityManagerInterface $entityManager,
  27.         private FormationRepository $formationRepository,
  28.         private PositionBlocsFormationRepository $positionBlocsFormationRepository
  29.     ) {
  30.     }
  31.     #[Route('/formations'name'app_formation_list')]
  32.     public function index(Request $requestFormationRepository $formationRepositoryContext $context): Response
  33.     {
  34.         $poles $this->entityManager->getRepository(Pole::class)->findAll();
  35.         $domaines $this->entityManager->getRepository(Domaines::class)->findAll();
  36.         $diplomes $this->entityManager->getRepository(Diplomes::class)->findAll();
  37.         $contrats $this->entityManager->getRepository(Contrats::class)->findAll();
  38.         $pole $request->get('pole');
  39.         $domaine $request->get('domaine');
  40.         $diplome $request->get('diplome');
  41.         $contrat $request->get('contrat');
  42.         if (null === $domaine && null === $diplome && null === $contrat && null === $pole) {
  43.             // $formations = $this->formationRepository->findAll();
  44.             $qb $formationRepository->createQueryBuilder('P')
  45.                 ->where('P.visible = true');
  46.             $context->initialize('id', new Slicer($qb), new Counter($qb));
  47.         } else {
  48.             $formations $this->formationRepository->findBySearch($domaine$diplome$contrat$pole);
  49.             $array = (array) $formations;
  50.             $context->initialize(
  51.                 'id',
  52.                 function (Criteria $criteria) use ($array) {
  53.                     return \array_slice($array$criteria->limit * ($criteria->page 1), $criteria->limit);
  54.                 },
  55.                 function () use ($array) {
  56.                     return \count($array);
  57.                 }
  58.             );
  59.         }
  60.         //  dd($qb);
  61.         $nbFormation $context->count;
  62.         $actualites $this->entityManager->getRepository(Actualite::class)->findAll();
  63.         return $this->render('front/formation/index.html.twig', [
  64.             'poles' => $poles,
  65.             'domaines' => $domaines,
  66.             'diplomes' => $diplomes,
  67.             'contrats' => $contrats,
  68.             'poleSearch' => $pole,
  69.             'domaineSearch' => $domaine,
  70.             'diplomeSearch' => $diplome,
  71.             'contratSearch' => $contrat,
  72.             'formations' => $context->slice,
  73.             'nbFormation' => $nbFormation,
  74.             'actualites' => $actualites,
  75.         ]);
  76.     }
  77.     #[Route('/formation/change-select-ajax'name'change-select-ajax')]
  78.     public function changeSelectAjax(
  79.         Request $request,
  80.         PoleRepository $poleRepository,
  81.         DomainesRepository $domainesRepository,
  82.         DiplomesRepository $diplomesRepository,
  83.         ContratsRepository $contratsRepository
  84.     ) {
  85.         $pole $request->get('pole');
  86.         $poles = [];
  87.         $domaines = [];
  88.         $diplomes = [];
  89.         $contrats = [];
  90.         $poles $poleRepository->findAll();
  91.         $poleName $poleRepository->findBy(['name' => $pole]);
  92.         $formations $this->formationRepository->findBy(['poleId' => $poleName]);
  93.         if (null !== $formations) {
  94.             foreach ($formations as $formation) {
  95.                 if ($formation->getDomaineId()) {
  96.                     $domaineFormation $domainesRepository->find($formation->getDomaineId()->getId());
  97.                     if (!\in_array($domaineFormation$domainestrue)) {
  98.                         $domaines[] = $domaineFormation;
  99.                     }
  100.                 }
  101.                 if ($formation->getDiplomeId()) {
  102.                     $diplomeFormation $diplomesRepository->find($formation->getDiplomeId()->getId());
  103.                     if (!\in_array($diplomeFormation$diplomestrue)) {
  104.                         $diplomes[] = $diplomeFormation;
  105.                     }
  106.                 }
  107.                 if ($formation->getContratId()) {
  108.                     $contratFormation $contratsRepository->find($formation->getContratId()->getId());
  109.                     if (!\in_array($contratFormation$contratstrue)) {
  110.                         $contrats[] = $contratFormation;
  111.                     }
  112.                 }
  113.             }
  114.         }
  115.         // dd($domaines);
  116.         // dd($diplomes);
  117.         /* fonctionne mais avec tomselect cassĂ© */
  118.         return $this->render('front/formation/include/_recherche.html.twig', [
  119.             'poles' => $poles,
  120.             'domaines' => $domaines,
  121.             'diplomes' => $diplomes,
  122.             'contrats' => $contrats,
  123.             'selectedPole' => $poleRepository->findOneBy(['name' => $pole]),
  124.             'formations' => $formations,
  125.         ]);
  126.     }
  127.     #[
  128.         Route('/formation/{formation<[0-9]\d*>}'name'app_formation_detail'),
  129.         Route('/formation/{slug}'name'app_formation_detail_slug')
  130.     ]
  131.     public function detail(
  132.         ?int $formation,
  133.         ?string $slug
  134.     ): Response {
  135.         if (!$slug) {
  136.             $formation $this->formationRepository->findOneBy(['id' => $formation]);
  137.         } else {
  138.             $formation $this->formationRepository->findOneBy(['slug' => $slug]);
  139.         }
  140.         if (null === $formation || (!$this->isGranted('ROLE_ADMIN') && false === $formation->isVisible())) {
  141.             throw $this->createNotFoundException('Page not found');
  142.         }
  143.         if ($this->isGranted('ROLE_ADMIN') && false === $formation->isVisible()) {
  144.             $this->addFlash('success''Cette page est visible car vous ĂȘte administrateur');
  145.         }
  146.         $formations $this->formationRepository->findOther($formation);
  147.         $tbBlocFormation $this->positionBlocsFormationRepository->findBy(
  148.             ['formation' => $formation],
  149.             ['position' => 'ASC']
  150.         );
  151.         return $this->render('front/formation/detail.html.twig', [
  152.             'blocFormation' => $tbBlocFormation,
  153.             'formation' => $formation,
  154.             'formations' => $formations,
  155.         ]);
  156.     }
  157. }