<?php
namespace App\Controller;
use App\Entity\ContactMessage;
use App\Form\ContactType;
use App\Repository\ArticleRepository;
use App\Repository\CategoryRepository;
use App\Service\ContactNotificationService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function index(
ArticleRepository $articleRepo,
CategoryRepository $categoryRepo
): Response {
$featuredArticles = $articleRepo->findFeatured(3);
$latestArticles = $articleRepo->findPublished(10);
$popularArticles = $articleRepo->findMostViewed(5, 7);
$categories = $categoryRepo->findActive();
return $this->render('home/index.html.twig', [
'featured_articles' => $featuredArticles,
'latest_articles' => $latestArticles,
'popular_articles' => $popularArticles,
'categories' => $categories,
]);
}
/**
* @Route("/about", name="about")
*/
public function about(): Response
{
return $this->render('home/about.html.twig');
}
/**
* @Route("/legal", name="legal")
*/
public function legal(): Response
{
return $this->render('home/legal.html.twig');
}
/**
* @Route("/privacy", name="privacy")
*/
public function privacy(): Response
{
return $this->render('home/privacy.html.twig');
}
/**
* @Route("/contact", name="contact")
*/
public function contact(Request $request, EntityManagerInterface $em): Response
{
$contactMessage = new ContactMessage();
$form = $this->createForm(ContactType::class, $contactMessage);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$contactMessage->setIpAddress($request->getClientIp());
$em->persist($contactMessage);
$em->flush();
$this->addFlash('success', 'Votre message a été envoyé avec succès. Nous vous répondrons dans les plus brefs délais.');
return $this->redirectToRoute('contact');
}
return $this->render('home/contact.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/contact/submit", name="contact_submit", methods={"POST"})
*/
public function submitContact(
Request $request,
EntityManagerInterface $em,
ContactNotificationService $notificationService
): Response {
$name = trim($request->request->get('name'));
$email = trim($request->request->get('email'));
$subject = trim($request->request->get('subject'));
$messageText = trim($request->request->get('message'));
if (empty($name) || empty($email) || empty($messageText)) {
if ($request->isXmlHttpRequest()) {
return $this->json([
'success' => false,
'message' => 'Tous les champs requis doivent être remplis'
], 400);
}
$this->addFlash('error', 'Tous les champs requis doivent être remplis');
return $this->redirectToRoute('contact');
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
if ($request->isXmlHttpRequest()) {
return $this->json([
'success' => false,
'message' => 'Adresse email invalide'
], 400);
}
$this->addFlash('error', 'Adresse email invalide');
return $this->redirectToRoute('contact');
}
$contactMessage = new ContactMessage();
$contactMessage->setName($name);
$contactMessage->setEmail($email);
$contactMessage->setSubject($subject);
$contactMessage->setMessage($messageText);
$contactMessage->setIpAddress($request->getClientIp());
$em->persist($contactMessage);
$em->flush();
$notificationService->notifyAdmin($contactMessage);
$notificationService->sendConfirmation($contactMessage);
if ($request->isXmlHttpRequest()) {
return $this->json([
'success' => true,
'message' => 'Message envoyé avec succès! Vous recevrez un email de confirmation.'
]);
}
$this->addFlash('success', 'Votre message a été envoyé avec succès! Vous recevrez un email de confirmation.');
return $this->redirectToRoute('home');
}
}