src/Controller/PageController.php line 169

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Offre;
  4. use App\Form\ContactType;
  5. use App\Form\OffresSearchType;
  6. use App\Service\CallApiService;
  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\SecteurRepository;
  12. use App\Repository\SettingRepository;
  13. use App\Repository\PartenaireRepository;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use App\Repository\OrganisateurRepository;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\Mailer\MailerInterface;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. class PageController extends AbstractController
  23. {
  24.     #[Route('/'name'app_home')]
  25.     public function home(
  26.         SettingRepository $settingRepository,
  27.         Request $request,
  28.         MailerInterface $mailer,
  29.     ): Response
  30.     {
  31.         // form
  32.         $form $this->createForm(ContactType::class);
  33.         $form->handleRequest($request);
  34.         // On recherche l'email et le nom du site dans Setting
  35.         $dataMail $settingRepository->findAll();
  36.         $siteEmail $dataMail[0]->getSiteEmail();
  37.         $siteName $dataMail[0]->getSiteName();
  38.         if ($form->isSubmitted() && $form->isValid()) {
  39.             $contactFormData $form->getData();
  40.             $email = (new Email())
  41.                 ->from($contactFormData['email'])
  42.                 ->to(new Address($siteEmail$siteName))
  43.                 ->subject('Message depuis '$siteName .' : ' $contactFormData['objet'])
  44.                 ->html(
  45.                     '<h4 style="color: #1758a0; font-weight: bold;">Message envoyé depuis le site ' $siteName '</h4>' .
  46.                     '<span style="color: #1758a0; font-weight: bold;">De :</span> ' $contactFormData['prenom'] . ' ' $contactFormData['nom'] . '<br>' .
  47.                     '<span style="color: #1758a0; font-weight: bold;">E-mail :</span> ' $contactFormData['email'] . '<br>' .
  48.                     '<span style="color: #1758a0; font-weight: bold;">Objet : </span> ' $contactFormData['objet'] .
  49.                     '<p><span style="color: #1758a0; font-weight: bold;">Message</span> : <br>' trim(nl2br($contactFormData['message'])) . '</p>',
  50.                     'text/plain'
  51.                 );
  52.             ;
  53.             $mailer->send($email);
  54.             $this->addFlash('success''Le message a bien été envoyé !');
  55.             // return $this->redirect('/contact');
  56.             return $this->redirect($this->generateUrl('app_home') . '#message-success');
  57.         }
  58.         return $this->render('pages/home.html.twig', [
  59.             'settings' => $settingRepository->findAll(),
  60.             'form' => $form->createView(),
  61.             'pageTitle' => 'home',
  62.         ]);
  63.     }
  64.     #[Route('/programme'name'app_programme')]
  65.     public function programme(
  66.         SettingRepository $settingRepository,
  67.         OrganisateurRepository $organisateurRepository
  68.     ): Response
  69.     {
  70.         return $this->render('pages/programme.html.twig', [
  71.             'settings' => $settingRepository->findAll(),
  72.             'orga' => $organisateurRepository->findBy(['isEnabled' => true], [], 1),
  73.             'organisateurs' => $organisateurRepository->findBy(['isEnabled' => true], [], 1001),
  74.             'pageTitle' => 'programme',
  75.         ]);
  76.     }
  77.     #[Route('/partenaires'name'app_partenaires')]
  78.     public function partenaires(
  79.         SettingRepository $settingRepository,
  80.         PartenaireRepository $partenaireRepository
  81.     ): Response
  82.     {
  83.         return $this->render('pages/partenaires.html.twig', [
  84.             'settings' => $settingRepository->findAll(),
  85.             'partenairesmajeurs' => $partenaireRepository->findBy(['isMajeur' => true], []),
  86.             'partenairesmajobdating' => $partenaireRepository->findBy(['isJobdating' => true], []),
  87.             'partenaires' => $partenaireRepository->findBy(['isEnabled' => true], ['title' => 'ASC']),
  88.             'pageTitle' => 'partenaires',
  89.         ]);
  90.     }
  91.     #[Route('/offres'name'app_offres')]
  92.     public function offres(
  93.         SettingRepository $settingRepository,
  94.         SecteurRepository $secteurRepository,
  95.         OffreRepository $offreRepository,
  96.         PaginatorInterface $paginator,
  97.         Request $request,
  98.         CallApiService $callApi
  99.     ): Response
  100.     {
  101.         $keyword $request->query->get('keyword');
  102.         $page $request->query->get('page');
  103.         $apiResponse null;
  104.         if ($keyword != null) {
  105.             $apiResponse $callApi->searchKeyword($request->query->get('keyword'),$page);
  106.         }
  107.         else {
  108.             $apiResponse $callApi->callApi($page);
  109.         }
  110.         $form $this->createForm(SearchOffresPoType::class);
  111.         $form->handleRequest($request);
  112.         if ($form->isSubmitted() && $form->isValid()) {
  113.             $keyword $form->getData()['keyword'];
  114.             $keyword str_replace(' ''+'$keyword);
  115.             return $this->redirectToRoute('app_offres', [
  116.                 'keyword' => $keyword,
  117.                 'page' => 1
  118.             ]);
  119.         }
  120.         return $this->render('pages/offres.html.twig', [
  121.             'settings' => $settingRepository->findAll(),
  122.             //'formSearch' => $formSearch,
  123.             //'offres' => $offresPaginated,
  124.             'api' => $apiResponse,
  125.             'form' => $form->createView(),
  126.             'page' => $page,
  127.             'keyword' => $keyword,
  128.             'pageTitle' => 'offres',
  129.         ]);
  130.     }
  131.     #[Route('/offres/{slug}'name'app_offre_show'methods: ['GET''POST'])]
  132.     public function show(
  133.         Offre $offre,
  134.         SettingRepository $settingRepository,
  135.         OffreRepository $offreRepository,
  136.         Request $request,
  137.         EntityManagerInterface $em
  138.     ): Response {
  139.         return $this->render('pages/offre-show.html.twig', [
  140.             'offre' => $offre,
  141.             'settings' => $settingRepository->findAll(),
  142.             'offres' => $offreRepository->findAll(),
  143.             'pageTitle' => 'offre-detail'
  144.         ]);
  145.     }
  146.     #[Route('/contact'name'app_contact')]
  147.     public function contact(
  148.         SettingRepository $settingRepository,
  149.         Request $request,
  150.         MailerInterface $mailer,
  151.         EntityManagerInterface $em
  152.     ): Response
  153.     {
  154.         // form
  155.         $form $this->createForm(ContactType::class);
  156.         $form->handleRequest($request);
  157.         // On recherche l'email et le nom du site dans Setting
  158.         $dataMail $settingRepository->findAll();
  159.         $siteEmail $dataMail[0]->getSiteEmail();
  160.         $siteName $dataMail[0]->getSiteName();
  161.         if ($form->isSubmitted() && $form->isValid()) {
  162.             $contactFormData $form->getData();
  163.             $email = (new Email())
  164.                 ->from($contactFormData['email'])
  165.                 ->to(new Address($siteEmail$siteName))
  166.                 ->subject('Message depuis '$siteName .' : ' $contactFormData['objet'])
  167.                 ->html(
  168.                     '<h4 style="color: #1758a0; font-weight: bold;">Message envoyé depuis le site ' $siteName '</h4>' .
  169.                     '<span style="color: #1758a0; font-weight: bold;">De :</span> ' $contactFormData['prenom'] . ' ' $contactFormData['nom'] . '<br>' .
  170.                     '<span style="color: #1758a0; font-weight: bold;">E-mail :</span> ' $contactFormData['email'] . '<br>' .
  171.                     '<span style="color: #1758a0; font-weight: bold;">Objet : </span> ' $contactFormData['objet'] .
  172.                     '<p><span style="color: #1758a0; font-weight: bold;">Message</span> : <br>' trim(nl2br($contactFormData['message'])) . '</p>',
  173.                     'text/plain'
  174.                 );
  175.             ;
  176.             $mailer->send($email);
  177.             $this->addFlash('success''Le message a bien été envoyé !');
  178.             return $this->redirect($this->generateUrl('app_contact') . '#message-success');
  179.         }
  180.         return $this->render('pages/contact.html.twig', [
  181.             'settings' => $settingRepository->findAll(),
  182.             'form' => $form->createView(),
  183.             'pageTitle' => 'contact',
  184.         ]);
  185.     }
  186.     //Mentions Légales
  187.     #[Route('/mentions-legales'name'app_mentions_legales')]
  188.     public function mentionsLegales(
  189.         SettingRepository $settingRepository,
  190.     ): Response
  191.     {
  192.         return $this->render('pages/mentions-legales.html.twig', [
  193.             'settings' => $settingRepository->findAll(),
  194.             'pageTitle' => 'Mentions-Legales'
  195.         ]);
  196.     }
  197.     #[Route('/sitemap.xml'name'app_sitemap'defaults: ['_format''xml'])]
  198.     public function sitemap(
  199.         Request $request,
  200.         SettingRepository $settingRepository,
  201.         OffreRepository $offreRepository
  202.     ): Response
  203.     {
  204.         $hostname $request->getSchemeAndHttpHost();
  205.         $lastmod date('d/m/Y');
  206.         $urls = [];
  207.         $urls[] = ['loc' => $this->generateUrl('app_home'), 'lastmod' => $lastmod];
  208.         $urls[] = ['loc' => $this->generateUrl('app_offres'), 'lastmod' => $lastmod];
  209.         // Boucles sur les offres
  210.         foreach ($offreRepository->findAll() as $offre) {
  211.             $urls[] = ['loc' => $this->generateUrl('app_offre_show', ['slug' => $offre->getSlug()]), 'lastmod' => $lastmod];
  212.         }
  213.         $urls[] = ['loc' => $this->generateUrl('app_partenaires'), 'lastmod' => $lastmod];
  214.         $urls[] = ['loc' => $this->generateUrl('app_programme'), 'lastmod' => $lastmod];
  215.         $urls[] = ['loc' => $this->generateUrl('app_contact'), 'lastmod' => $lastmod];
  216.         // Create the XML response
  217.         $response = new Response(
  218.             $this->renderView('sitemap/index.html.twig', [
  219.                 'urls' => $urls,
  220.                 'hostname' => $hostname,
  221.                 'settings' => $settingRepository->findAll()
  222.             ]),
  223.             200
  224.         );
  225.         // Add headers
  226.         $response->headers->set('Content-Type''text/xml');
  227.         // Send the response
  228.         return $response;
  229.     }
  230. }