src/Controller/PageController.php line 76
<?phpnamespace App\Controller;use App\Entity\Offre;use App\Entity\Contact;use App\Form\ContactType;use App\Form\OffresSearchType;use App\Form\SearchOffresPoType;use Symfony\Component\Mime\Email;use App\Repository\OffreRepository;use Symfony\Component\Mime\Address;use App\Repository\ProgramRepository;use App\Repository\SecteurRepository;use App\Repository\SettingRepository;use App\Repository\EntrepriseRepository;use App\Repository\PrescripteurRepository;use App\Service\CallApiService;use Doctrine\ORM\EntityManagerInterface;use Knp\Component\Pager\PaginatorInterface;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;class PageController extends AbstractController{#[Route('/', name: 'app_home')]public function index(SettingRepository $settingRepository,EntrepriseRepository $entrepriseRepository,PrescripteurRepository $prescripteurRepository): Response{return $this->render('pages/home.html.twig', ['settings' => $settingRepository->findAll(),'entreprises' => $entrepriseRepository->findBy(['isEnabled' => true], ['sortOrder' => 'ASC']),// 'entreprises' => $entrepriseRepository->findAll(),'prescripteurs' => $prescripteurRepository->findAll(),'pageTitle' => 'Home']);}#[Route('/programme', name: 'app_programme')]public function programme(SettingRepository $settingRepository,ProgramRepository $programRepository,PrescripteurRepository $prescripteurRepository): Response{return $this->render('pages/programme.html.twig', ['settings' => $settingRepository->findAll(),'programs' => $programRepository->findBy(['isEnabled' => true], ['orderBy' => 'ASC']),'prescripteurs' => $prescripteurRepository->findAll(),'pageTitle' => 'Programme']);}#[Route('/entreprises', name: 'app_entreprises')]public function entreprises(SettingRepository $settingRepository,EntrepriseRepository $entrepriseRepository,PrescripteurRepository $prescripteurRepository): Response{return $this->render('pages/entreprises.html.twig', ['settings' => $settingRepository->findAll(),'entreprises' => $entrepriseRepository->findBy(['isEnabled' => true], ['title' => 'ASC']),'prescripteurs' => $prescripteurRepository->findAll(),'pageTitle' => 'Entreprises']);}#[Route('/contact', name: 'app_contact')]public function contact(SettingRepository $settingRepository,PrescripteurRepository $prescripteurRepository,Request $request,MailerInterface $mailer,EntityManagerInterface $em): Response{// form$form = $this->createForm(ContactType::class);$form->handleRequest($request);// On recherche l'email et le nom du site dans Setting$dataMail = $settingRepository->findAll();$siteEmail = $dataMail[0]->getSiteEmail();$siteName = $dataMail[0]->getSiteName();if ($form->isSubmitted() && $form->isValid()) {$contactFormData = $form->getData();$email = (new Email())->from($contactFormData['email'])->to(new Address($siteEmail, $siteName))->subject('Message depuis '. $siteName .' : ' . $contactFormData['objet'])->html('<h4 style="color: #1758a0; font-weight: bold;">Message envoyé depuis le site ' . $siteName . '</h4>' .'<span style="color: #1758a0; font-weight: bold;">De :</span> ' . $contactFormData['prenom'] . ' ' . $contactFormData['nom'] . '<br>' .'<span style="color: #1758a0; font-weight: bold;">E-mail :</span> ' . $contactFormData['email'] . '<br>' .'<span style="color: #1758a0; font-weight: bold;">Objet : </span> ' . $contactFormData['objet'] .'<p><span style="color: #1758a0; font-weight: bold;">Message</span> : <br>' . trim(nl2br($contactFormData['message'])) . '</p>','text/plain');;$mailer->send($email);// On enregistre le message de contact en BDD$contact = new Contact();$contact->setPrenom($contactFormData['prenom']);$contact->setNom($contactFormData['nom']);$contact->setEmail($contactFormData['email']);$contact->setTelephone($contactFormData['telephone']);$contact->setObjet($contactFormData['objet']);$contact->setMessage($contactFormData['message']);$contact->setCreatedAt(new \DateTime());$em->persist($contact);$em->flush();$this->addFlash('success', 'Le message a bien été envoyé !');// return $this->redirect('/contact');return $this->redirect($this->generateUrl('app_contact') . '#message-success');}return $this->render('pages/contact.html.twig', ['settings' => $settingRepository->findAll(),'prescripteurs' => $prescripteurRepository->findAll(),'form' => $form->createView(),'pageTitle' => 'Contact']);}#[Route('/offres', name: 'app_offres')]public function offres(SettingRepository $settingRepository,SecteurRepository $secteurRepository,OffreRepository $offreRepository,PrescripteurRepository $prescripteurRepository,PaginatorInterface $paginator,Request $request,CallApiService $callApi): Response{$keyword = $request->query->get('keyword');$page = $request->query->get('page');$apiResponse = null;if ($keyword != null) {$apiResponse = $callApi->searchKeyword($request->query->get('keyword'),$page);}else {$apiResponse = $callApi->callApi($page);}// // Recherche multicriteres d'offres// $secteurs = $secteurRepository->findAll();// $lieux = $offreRepository->findDistinctLocations();// $formSearch = $this->createForm(OffresSearchType::class, null, [// 'method' => 'GET', // Pour garder les critères de recherche// 'action' => $this->generateUrl('app_offres'), // Pour remettre à la page 1 à chaque nouvelle recherche// 'secteurs' => $secteurs,// 'lieux' => $lieux// ]);// $formSearch->handleRequest($request);// if ($formSearch->isSubmitted() && $formSearch->isValid()) {// $data = $formSearch->getData();// $criteria = [];// if ($data['title']) {// $criteria['title'] = $data['title'];// }// if ($data['secteur']) {// $criteria['secteur'] = $data['secteur'];// }// if ($data['lieu']) {// $criteria['lieu'] = $data['lieu'];// }// $query = $offreRepository->findBySearchCriteria($criteria);// } else {// $query = $offreRepository->findBySearchCriteria([]);// }// $offresPaginated = $paginator->paginate(// $query,// $request->query->getInt('page', 1),// 6 // Nb d'offres par page// );$form = $this->createForm(SearchOffresPoType::class);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$keyword = $form->getData()['keyword'];$keyword = str_replace(' ', '+', $keyword);return $this->redirectToRoute('app_offres', ['keyword' => $keyword,'page' => 1]);}return $this->render('pages/offres.html.twig', ['settings' => $settingRepository->findAll(),'prescripteurs' => $prescripteurRepository->findAll(),// 'formSearch' => $formSearch,// 'offres' => $offresPaginated,'api' => $apiResponse,'form' => $form->createView(),'pageTitle' => 'Offres','page' => $page,'keyword' => $keyword]);}#[Route('/offres/{slug}', name: 'app_offre_show', methods: ['GET', 'POST'])]public function show(Offre $offre,SettingRepository $settingRepository,OffreRepository $offreRepository,PrescripteurRepository $prescripteurRepository,Request $request,EntityManagerInterface $em): Response {// $form = $this->createForm(OffresEmailType::class);// $form->handleRequest($request);// if ($form->isSubmitted() && $form->isValid()) {// $abonneFormData = $form->getData();// $abonnement = new Abonne();// // $abonnement->setEmail($abonneFormData->getEmail());// $abonnement->setEmail($abonneFormData['email']);// $em->persist($abonnement);// $em->flush();// $this->addFlash('success', 'Votre adresse e-mail a bien été enregistrée.');// return $this->redirect($this->generateUrl('app_offres') . '#abonne-success');// }return $this->render('pages/offre-show.html.twig', ['offre' => $offre,'settings' => $settingRepository->findAll(),'prescripteurs' => $prescripteurRepository->findAll(),'offres' => $offreRepository->findAll(),'pageTitle' => 'Offre-detail',//'form' => $form->createView(),]);}//Mentions Légales#[Route('/mentions-legales', name: 'app_mentions_legales')]public function mentionsLegales(SettingRepository $settingRepository,PrescripteurRepository $prescripteurRepository): Response{return $this->render('pages/mentions-legales.html.twig', ['settings' => $settingRepository->findAll(),'prescripteurs' => $prescripteurRepository->findAll(),'pageTitle' => 'Mentions-Legales']);}#[Route('/sitemap.xml', name: 'app_sitemap', defaults: ['_format', 'xml'])]public function sitemap(Request $request,SettingRepository $settingRepository,OffreRepository $offreRepository): Response{$hostname = $request->getSchemeAndHttpHost();$lastmod = date('d/m/Y');$urls = [];$urls[] = ['loc' => $this->generateUrl('app_home'), 'lastmod' => $lastmod];$urls[] = ['loc' => $this->generateUrl('app_offres'), 'lastmod' => $lastmod];// $urls[] = ['loc' => $this->generateUrl('app_offres_postuler'), 'lastmod' => $lastmod];// Boucles sur les offresforeach ($offreRepository->findAll() as $offre) {$urls[] = ['loc' => $this->generateUrl('app_offre_show', ['slug' => $offre->getSlug()]), 'lastmod' => $lastmod];}$urls[] = ['loc' => $this->generateUrl('app_entreprises'), 'lastmod' => $lastmod];$urls[] = ['loc' => $this->generateUrl('app_programme'), 'lastmod' => $lastmod];$urls[] = ['loc' => $this->generateUrl('app_contact'), 'lastmod' => $lastmod];// Create the XML response$response = new Response($this->renderView('sitemap/index.html.twig', ['urls' => $urls,'hostname' => $hostname,'settings' => $settingRepository->findAll()]),200);// Add headers$response->headers->set('Content-Type', 'text/xml');// Send the responsereturn $response;}}