src/Controller/PageController.php line 30

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Offre;
  4. use App\Entity\Contact;
  5. use App\Form\ContactType;
  6. use App\Form\OffresSearchType;
  7. use App\Form\SearchOffresPoType;
  8. use Symfony\Component\Mime\Email;
  9. use App\Repository\OffreRepository;
  10. use Symfony\Component\Mime\Address;
  11. use App\Repository\ProgramRepository;
  12. use App\Repository\SecteurRepository;
  13. use App\Repository\SettingRepository;
  14. use App\Repository\EntrepriseRepository;
  15. use App\Repository\PrescripteurRepository;
  16. use App\Service\CallApiService;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Knp\Component\Pager\PaginatorInterface;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\Mailer\MailerInterface;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  24. class PageController extends AbstractController
  25. {
  26.     #[Route('/'name'app_home')]
  27.     public function index(
  28.         SettingRepository $settingRepository,
  29.         EntrepriseRepository $entrepriseRepository,
  30.         PrescripteurRepository $prescripteurRepository
  31.     ): Response
  32.     {
  33.         return $this->render('pages/home.html.twig', [
  34.             'settings' => $settingRepository->findAll(),
  35.             'entreprises' => $entrepriseRepository->findBy(['isEnabled' => true], ['sortOrder' => 'ASC']),
  36.             // 'entreprises' => $entrepriseRepository->findAll(),
  37.             'prescripteurs' => $prescripteurRepository->findAll(),
  38.             'pageTitle' => 'Home'
  39.         ]);
  40.     }
  41.     #[Route('/programme'name'app_programme')]
  42.     public function programme(
  43.         SettingRepository $settingRepository,
  44.         ProgramRepository $programRepository,
  45.         PrescripteurRepository $prescripteurRepository
  46.     ): Response
  47.     {
  48.         return $this->render('pages/programme.html.twig', [
  49.             'settings' => $settingRepository->findAll(),
  50.             'programs' => $programRepository->findBy(['isEnabled' => true], ['orderBy' => 'ASC']),
  51.             'prescripteurs' => $prescripteurRepository->findAll(),
  52.             'pageTitle' => 'Programme'
  53.         ]);
  54.     }
  55.     #[Route('/entreprises'name'app_entreprises')]
  56.     public function entreprises(
  57.         SettingRepository $settingRepository,
  58.         EntrepriseRepository $entrepriseRepository,
  59.         PrescripteurRepository $prescripteurRepository
  60.     ): Response
  61.     {
  62.         return $this->render('pages/entreprises.html.twig', [
  63.             'settings' => $settingRepository->findAll(),
  64.             'entreprises' => $entrepriseRepository->findBy(['isEnabled' => true], ['title' => 'ASC']),
  65.             'prescripteurs' => $prescripteurRepository->findAll(),
  66.             'pageTitle' => 'Entreprises'
  67.         ]);
  68.     }
  69.     #[Route('/contact'name'app_contact')]
  70.     public function contact(
  71.         SettingRepository $settingRepository,
  72.         PrescripteurRepository $prescripteurRepository,
  73.         Request $request,
  74.         MailerInterface $mailer,
  75.         EntityManagerInterface $em
  76.     ): Response
  77.     {
  78.         // form
  79.         $form $this->createForm(ContactType::class);
  80.         $form->handleRequest($request);
  81.         // On recherche l'email et le nom du site dans Setting
  82.         $dataMail $settingRepository->findAll();
  83.         $siteEmail $dataMail[0]->getSiteEmail();
  84.         $siteName $dataMail[0]->getSiteName();
  85.         if ($form->isSubmitted() && $form->isValid()) {
  86.             $contactFormData $form->getData();
  87.             $email = (new Email())
  88.                 ->from($contactFormData['email'])
  89.                 ->to(new Address($siteEmail$siteName))
  90.                 ->subject('Message depuis '$siteName .' : ' $contactFormData['objet'])
  91.                 ->html(
  92.                     '<h4 style="color: #1758a0; font-weight: bold;">Message envoyé depuis le site ' $siteName '</h4>' .
  93.                     '<span style="color: #1758a0; font-weight: bold;">De :</span> ' $contactFormData['prenom'] . ' ' $contactFormData['nom'] . '<br>' .
  94.                     '<span style="color: #1758a0; font-weight: bold;">E-mail :</span> ' $contactFormData['email'] . '<br>' .
  95.                     '<span style="color: #1758a0; font-weight: bold;">Objet : </span> ' $contactFormData['objet'] .
  96.                     '<p><span style="color: #1758a0; font-weight: bold;">Message</span> : <br>' trim(nl2br($contactFormData['message'])) . '</p>',
  97.                     'text/plain'
  98.                 );
  99.             ;
  100.             $mailer->send($email);
  101.             // On enregistre le message de contact en BDD
  102.             $contact = new Contact();
  103.             $contact->setPrenom($contactFormData['prenom']);
  104.             $contact->setNom($contactFormData['nom']);
  105.             $contact->setEmail($contactFormData['email']);
  106.             $contact->setTelephone($contactFormData['telephone']);
  107.             $contact->setObjet($contactFormData['objet']);
  108.             $contact->setMessage($contactFormData['message']);
  109.             $contact->setCreatedAt(new \DateTime());
  110.             $em->persist($contact);
  111.             $em->flush();
  112.             $this->addFlash('success''Le message a bien été envoyé !');
  113.             // return $this->redirect('/contact');
  114.             return $this->redirect($this->generateUrl('app_contact') . '#message-success');
  115.         }
  116.         return $this->render('pages/contact.html.twig', [
  117.             'settings' => $settingRepository->findAll(),
  118.             'prescripteurs' => $prescripteurRepository->findAll(),
  119.             'form' => $form->createView(),
  120.             'pageTitle' => 'Contact'
  121.         ]);
  122.     }
  123.     #[Route('/offres'name'app_offres')]
  124.     public function offres(
  125.         SettingRepository $settingRepository,
  126.         SecteurRepository $secteurRepository,
  127.         OffreRepository $offreRepository,
  128.         PrescripteurRepository $prescripteurRepository,
  129.         PaginatorInterface $paginator,
  130.         Request $request,
  131.         CallApiService $callApi
  132.     ): Response
  133.     {
  134.         $keyword $request->query->get('keyword');
  135.         $page $request->query->get('page');
  136.         $apiResponse null;
  137.         if ($keyword != null) {
  138.             $apiResponse $callApi->searchKeyword($request->query->get('keyword'),$page);
  139.         }
  140.         else {
  141.             $apiResponse $callApi->callApi($page);
  142.         }
  143.         // // Recherche multicriteres d'offres
  144.         // $secteurs = $secteurRepository->findAll();
  145.         // $lieux = $offreRepository->findDistinctLocations();
  146.         // $formSearch = $this->createForm(OffresSearchType::class, null, [
  147.         //     'method' => 'GET', // Pour garder les critères de recherche
  148.         //     'action' => $this->generateUrl('app_offres'), // Pour remettre à la page 1 à chaque nouvelle recherche
  149.         //     'secteurs' => $secteurs,
  150.         //     'lieux' => $lieux
  151.         // ]);
  152.         // $formSearch->handleRequest($request);
  153.         // if ($formSearch->isSubmitted() && $formSearch->isValid()) {
  154.         //     $data = $formSearch->getData();
  155.         //     $criteria = [];
  156.         //     if ($data['title']) {
  157.         //         $criteria['title'] = $data['title'];
  158.         //     }
  159.         //     if ($data['secteur']) {
  160.         //         $criteria['secteur'] = $data['secteur'];
  161.         //     }
  162.         //     if ($data['lieu']) {
  163.         //         $criteria['lieu'] = $data['lieu'];
  164.         //     }
  165.         //     $query = $offreRepository->findBySearchCriteria($criteria);
  166.         // } else {
  167.         //     $query = $offreRepository->findBySearchCriteria([]);
  168.         // }
  169.         // $offresPaginated = $paginator->paginate(
  170.         //     $query,
  171.         //     $request->query->getInt('page', 1),
  172.         //     6 // Nb d'offres par page
  173.         // );
  174.         $form $this->createForm(SearchOffresPoType::class);
  175.         $form->handleRequest($request);
  176.         if ($form->isSubmitted() && $form->isValid()) {
  177.             $keyword $form->getData()['keyword'];
  178.             $keyword str_replace(' ''+'$keyword);
  179.             return $this->redirectToRoute('app_offres', [
  180.                 'keyword' => $keyword,
  181.                 'page' => 1
  182.             ]);
  183.         }
  184.         return $this->render('pages/offres.html.twig', [
  185.             'settings' => $settingRepository->findAll(),
  186.             'prescripteurs' => $prescripteurRepository->findAll(),
  187.             // 'formSearch' => $formSearch,
  188.             // 'offres' => $offresPaginated,
  189.             'api' => $apiResponse,
  190.             'form' => $form->createView(),
  191.             'pageTitle' => 'Offres',
  192.             'page' => $page,
  193.             'keyword' => $keyword
  194.         ]);
  195.     }
  196.     #[Route('/offres/{slug}'name'app_offre_show'methods: ['GET''POST'])]
  197.     public function show(
  198.         Offre $offre,
  199.         SettingRepository $settingRepository,
  200.         OffreRepository $offreRepository,
  201.         PrescripteurRepository $prescripteurRepository,
  202.         Request $request,
  203.         EntityManagerInterface $em
  204.     ): Response {
  205.         // $form = $this->createForm(OffresEmailType::class);
  206.         // $form->handleRequest($request);
  207.         // if ($form->isSubmitted() && $form->isValid()) {
  208.         //     $abonneFormData = $form->getData();
  209.         //     $abonnement = new Abonne();
  210.         //     // $abonnement->setEmail($abonneFormData->getEmail());
  211.         //     $abonnement->setEmail($abonneFormData['email']);
  212.         //     $em->persist($abonnement);
  213.         //     $em->flush();
  214.         //     $this->addFlash('success', 'Votre adresse e-mail a bien été enregistrée.');
  215.         //     return $this->redirect($this->generateUrl('app_offres') . '#abonne-success');
  216.         // }
  217.         return $this->render('pages/offre-show.html.twig', [
  218.             'offre' => $offre,
  219.             'settings' => $settingRepository->findAll(),
  220.             'prescripteurs' => $prescripteurRepository->findAll(),
  221.             'offres' => $offreRepository->findAll(),
  222.             'pageTitle' => 'Offre-detail',
  223.             //'form' => $form->createView(),
  224.         ]);
  225.     }
  226.     //Mentions Légales
  227.     #[Route('/mentions-legales'name'app_mentions_legales')]
  228.     public function mentionsLegales(
  229.         SettingRepository $settingRepository,
  230.         PrescripteurRepository $prescripteurRepository
  231.     ): Response
  232.     {
  233.         return $this->render('pages/mentions-legales.html.twig', [
  234.             'settings' => $settingRepository->findAll(),
  235.             'prescripteurs' => $prescripteurRepository->findAll(),
  236.             'pageTitle' => 'Mentions-Legales'
  237.         ]);
  238.     }
  239.     #[Route('/sitemap.xml'name'app_sitemap'defaults: ['_format''xml'])]
  240.     public function sitemap(
  241.         Request $request,
  242.         SettingRepository $settingRepository,
  243.         OffreRepository $offreRepository
  244.     ): Response
  245.     {
  246.         $hostname $request->getSchemeAndHttpHost();
  247.         $lastmod date('d/m/Y');
  248.         $urls = [];
  249.         $urls[] = ['loc' => $this->generateUrl('app_home'), 'lastmod' => $lastmod];
  250.         $urls[] = ['loc' => $this->generateUrl('app_offres'), 'lastmod' => $lastmod];
  251.         // $urls[] = ['loc' => $this->generateUrl('app_offres_postuler'), 'lastmod' => $lastmod];
  252.         // Boucles sur les offres
  253.         foreach ($offreRepository->findAll() as $offre) {
  254.             $urls[] = ['loc' => $this->generateUrl('app_offre_show', ['slug' => $offre->getSlug()]), 'lastmod' => $lastmod];
  255.         }
  256.         $urls[] = ['loc' => $this->generateUrl('app_entreprises'), 'lastmod' => $lastmod];
  257.         $urls[] = ['loc' => $this->generateUrl('app_programme'), 'lastmod' => $lastmod];
  258.         $urls[] = ['loc' => $this->generateUrl('app_contact'), 'lastmod' => $lastmod];
  259.         // Create the XML response
  260.         $response = new Response(
  261.             $this->renderView('sitemap/index.html.twig', [
  262.                 'urls' => $urls,
  263.                 'hostname' => $hostname,
  264.                 'settings' => $settingRepository->findAll()
  265.             ]),
  266.             200
  267.         );
  268.         // Add headers
  269.         $response->headers->set('Content-Type''text/xml');
  270.         // Send the response
  271.         return $response;
  272.     }
  273. }