src/Controller/HomeController.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ContactMessage;
  4. use App\Form\ContactType;
  5. use App\Repository\ArticleRepository;
  6. use App\Repository\CategoryRepository;
  7. use App\Service\ContactNotificationService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. class HomeController extends AbstractController
  14. {
  15.     /**
  16.      * @Route("/", name="home")
  17.      */
  18.     public function index(
  19.         ArticleRepository $articleRepo,
  20.         CategoryRepository $categoryRepo
  21.     ): Response {
  22.         $featuredArticles $articleRepo->findFeatured(3);
  23.         $latestArticles $articleRepo->findPublished(10);
  24.         $popularArticles $articleRepo->findMostViewed(57);
  25.         $categories $categoryRepo->findActive();
  26.         return $this->render('home/index.html.twig', [
  27.             'featured_articles' => $featuredArticles,
  28.             'latest_articles' => $latestArticles,
  29.             'popular_articles' => $popularArticles,
  30.             'categories' => $categories,
  31.         ]);
  32.     }
  33.     /**
  34.      * @Route("/about", name="about")
  35.      */
  36.     public function about(): Response
  37.     {
  38.         return $this->render('home/about.html.twig');
  39.     }
  40.     /**
  41.      * @Route("/legal", name="legal")
  42.      */
  43.     public function legal(): Response
  44.     {
  45.         return $this->render('home/legal.html.twig');
  46.     }
  47.     /**
  48.      * @Route("/privacy", name="privacy")
  49.      */
  50.     public function privacy(): Response
  51.     {
  52.         return $this->render('home/privacy.html.twig');
  53.     }
  54.     /**
  55.      * @Route("/contact", name="contact")
  56.      */
  57.     public function contact(Request $requestEntityManagerInterface $em): Response
  58.     {
  59.         $contactMessage = new ContactMessage();
  60.         $form $this->createForm(ContactType::class, $contactMessage);
  61.         
  62.         $form->handleRequest($request);
  63.         
  64.         if ($form->isSubmitted() && $form->isValid()) {
  65.             $contactMessage->setIpAddress($request->getClientIp());
  66.             
  67.             $em->persist($contactMessage);
  68.             $em->flush();
  69.             
  70.             $this->addFlash('success''Votre message a été envoyé avec succès. Nous vous répondrons dans les plus brefs délais.');
  71.             
  72.             return $this->redirectToRoute('contact');
  73.         }
  74.         
  75.         return $this->render('home/contact.html.twig', [
  76.             'form' => $form->createView(),
  77.         ]);
  78.     }
  79.     
  80.     /**
  81.      * @Route("/contact/submit", name="contact_submit", methods={"POST"})
  82.      */
  83.     public function submitContact(
  84.         Request $request
  85.         EntityManagerInterface $em,
  86.         ContactNotificationService $notificationService
  87.     ): Response {
  88.         $name trim($request->request->get('name'));
  89.         $email trim($request->request->get('email'));
  90.         $subject trim($request->request->get('subject'));
  91.         $messageText trim($request->request->get('message'));
  92.         if (empty($name) || empty($email) || empty($messageText)) {
  93.             if ($request->isXmlHttpRequest()) {
  94.                 return $this->json([
  95.                     'success' => false
  96.                     'message' => 'Tous les champs requis doivent être remplis'
  97.                 ], 400);
  98.             }
  99.             $this->addFlash('error''Tous les champs requis doivent être remplis');
  100.             return $this->redirectToRoute('contact');
  101.         }
  102.         if (!filter_var($emailFILTER_VALIDATE_EMAIL)) {
  103.             if ($request->isXmlHttpRequest()) {
  104.                 return $this->json([
  105.                     'success' => false
  106.                     'message' => 'Adresse email invalide'
  107.                 ], 400);
  108.             }
  109.             $this->addFlash('error''Adresse email invalide');
  110.             return $this->redirectToRoute('contact');
  111.         }
  112.         $contactMessage = new ContactMessage();
  113.         $contactMessage->setName($name);
  114.         $contactMessage->setEmail($email);
  115.         $contactMessage->setSubject($subject);
  116.         $contactMessage->setMessage($messageText);
  117.         $contactMessage->setIpAddress($request->getClientIp());
  118.         
  119.         $em->persist($contactMessage);
  120.         $em->flush();
  121.         $notificationService->notifyAdmin($contactMessage);
  122.         $notificationService->sendConfirmation($contactMessage);
  123.         
  124.         if ($request->isXmlHttpRequest()) {
  125.             return $this->json([
  126.                 'success' => true
  127.                 'message' => 'Message envoyé avec succès! Vous recevrez un email de confirmation.'
  128.             ]);
  129.         }
  130.         
  131.         $this->addFlash('success''Votre message a été envoyé avec succès! Vous recevrez un email de confirmation.');
  132.         return $this->redirectToRoute('home');
  133.     }
  134. }