src/Controller/HomePageController.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\JPO;
  4. use App\Entity\Page;
  5. use App\Entity\Items;
  6. use App\Entity\Ville;
  7. use App\Entity\Actualite;
  8. use App\Entity\VideoOnpc;
  9. use App\Entity\OffreEmploi;
  10. use App\Common\QuoiInterface;
  11. use App\Elasticsearch\Moteur;
  12. use App\Entity\ActualiteOnpc;
  13. use App\Entity\Etablissement;
  14. use App\Entity\ItemsInsertion;
  15. use App\Elasticsearch\Parametres;
  16. use App\Entity\DonneeComplementaire;
  17. use Symfony\Bundle\FrameworkBundle\Console\Application;
  18. use Symfony\Component\Console\Input\ArrayInput;
  19. use Symfony\Component\Console\Output\BufferedOutput;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\HttpKernel\KernelInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\Form\Extension\Core\Type\TextType;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. class HomePageController extends AbstractController
  27. {
  28.     /**
  29.      * @Route("/", name="homepage")
  30.      * @Route("/", name="home_page")
  31.      */
  32.     public function index(Request $requestMoteur $moteur)
  33.     {
  34.         $em $this->getDoctrine()->getManager();
  35.         // Les 3 dernières JPOs
  36.         $jpos $em->getRepository(JPO::class)->getLast();
  37.         // Les 3 dernières actus
  38.         $actus $em->getRepository(Actualite::class)->getLast();
  39.         // Les 3 dernières offres d'emploi
  40.         $emplois $em->getRepository(OffreEmploi::class)->getLast();
  41.         // Ets mis en avant
  42.         $miseEnAvant $em->getRepository(Page::class)->findOneBySlug('home-mise-en-avant')->getTexte();   // x; y; z
  43.         $miseEnAvant = \explode(";"strip_tags($miseEnAvant)); // Le texte est saisie via un tinyMCE qui ajoute un <p>...</p>
  44.         $miseEnAvant = \array_map('trim'$miseEnAvant);
  45.         $miseEnAvant $em->getRepository(Etablissement::class)->findById($miseEnAvant);
  46.         // le résultat a été commenté dans le twig avant long temps, donc ce n'est plus nécessaire, en plus ça génère un SQL très lent !!
  47.         // $itemsInsertions = $this->getDoctrine()->getRepository(ItemsInsertion::class)->getDiplomePlus();
  48.         // Formulaire Quoi/Où
  49.         $etabs null;
  50.         $form $this->createFormBuilder()
  51.             ->setAction($this->generateUrl('annuaire_liste', ['quoi' => 'foo''lieu' => 'bar']))
  52.             ->setMethod('GET')
  53.             ->add('quoi',       TextType::class, ['required'=>false'label' => 'Quoi'])
  54.             ->add('ou',         TextType::class, ['required'=>false'label' => 'Où'  ])
  55.             ->getForm();
  56.         $parametres = new Parametres();
  57.         $parametres->pageActuele 1;
  58.         $parametres->maxParPage 100;
  59.         $form->handleRequest($request);
  60.         if ($form->isSubmitted() && $form->isValid()) {
  61.             $data $form->getData();
  62.             // Créer un objet Quoi
  63.             if (!empty($data['quoi'])) {
  64.                 $quoi = new class ($data['quoi']) implements QuoiInterface {
  65.                     private $ids = [];
  66.                     public function __construct($id) { $this->ids[] = $id; }
  67.                     public function getLibelle(): ?string { return 'Mocked'; }
  68.                     public function getSlug(): ?string { return 'mocked'; }
  69.                     public function getIdsType(): array { return $this->ids; }
  70.                 };
  71.             }
  72.             // Créer un objet Lieu (où)
  73.             if (!empty($data['ou'])) {
  74.                 $villeRepository $this->getDoctrine()->getManager()->getRepository(Ville::class);
  75.                 $lieu $villeRepository->find($data['ou']);
  76.             }
  77.             if (!isset($quoi) && isset($lieu))
  78.                 $parametres->setLieu($lieu);
  79.             else if (!isset($lieu) && isset($quoi))
  80.                 $parametres->setQuoi($quoi);
  81.             else if (isset($quoi) && isset($lieu))
  82.                 $parametres->setQuoiLieu($quoi$lieu);
  83.             if ($parametres) {
  84.                 $etabs $moteur->cherche($parametres);
  85.                 return $this->render('home_page/index.html.twig', [
  86.                     'jpos'  => $jpos,
  87.                     'actus' => $actus,
  88.                     'emplois' => $emplois,
  89.                     'mises_en_avant'=> $miseEnAvant,
  90.                     'form'  => $form->createView(),
  91.                     'isHomepage' => true,
  92.                 ]);
  93.             }
  94.         }
  95.         // Récupère tous les diplômes des établissements
  96.         $itemsInsertions $this->getDoctrine()->getRepository(ItemsInsertion::class)->getDiplomePlus(3*4);
  97.         // Vidéos ONPC
  98.         $videosOnpc $this->getDoctrine()->getRepository(VideoOnpc::class)->findBy([], ['createdAt' => 'DESC'], 3);
  99.         // Actualités ONPC
  100.         $actualitesOnpc $this->getDoctrine()->getRepository(ActualiteOnpc::class)->findBy([], ['createdAt' => 'DESC'], 3);
  101.         return $this->render('home_page/index.html.twig', [
  102.             'jpos'  => $jpos,
  103.             'actus' => $actus,
  104.             'emplois' => $emplois,
  105.             'mises_en_avant'=> $miseEnAvant,
  106.             'form'  => $form->createView(),
  107.             'isHomepage' => true,
  108.             'itemsInsertions' => $itemsInsertions,
  109.             'isForeignCityNear' => false,
  110.             'videosOnpc' => $videosOnpc,
  111.             'actualitesOnpc' => $actualitesOnpc,
  112.         ]);
  113.     }
  114.     /**
  115.      * @Route("/appBackofficeImport/{schema}/{id_demande}", name="app_backoffice_import", methods={"GET"}, requirements={"id_demande"="\d+"})
  116.      */
  117.     public function appBackofficeImport(int $id_demandestring $schemaRequest $requestKernelInterface $kernel): Response
  118.     {
  119.         $allowedSchemas = [
  120.             'aep_ancienneregion',
  121.             'aep_banniere',
  122.             'aep_categorie',
  123.             'aep_categorieorganisme',
  124.             'aep_delegue',
  125.             'aep_departement',
  126.             'aep_etablissement',
  127.             'aep_insertion_item',
  128.             'aep_items',
  129.             'aep_journal',
  130.             'aep_pays',
  131.             'aep_region',
  132.             'aep_responsabletablissement',
  133.             'aep_rubrique',
  134.             'aep_typesetablissements',
  135.             'aep_utilisateur',
  136.             'aep_ville',
  137.             'aep_zonesinternat'
  138.         ];
  139.         if (!in_array($schema$allowedSchemastrue)) {
  140.             return new Response('Invalid schema'Response::HTTP_BAD_REQUEST);
  141.         }
  142.         $application = new Application($kernel);
  143.         $application->setAutoExit(false);
  144.         $input = new ArrayInput([
  145.             'command' => 'app:backoffice:import',
  146.             'schema' => $schema,
  147.             '--id_demande' => (string) $id_demande,
  148.         ]);
  149.         $output = new BufferedOutput();
  150.         $exitCode $application->run($input$output);
  151.         return new Response(
  152.             // sprintf("Exit code: %d\n%s", $exitCode, $output->fetch()),
  153.             sprintf("Exit code: %d"$exitCode),
  154.             Response::HTTP_OK,
  155.             ['Content-Type' => 'text/plain']
  156.         );
  157.     }
  158. }