src/Controller/contactController.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTimeImmutable;
  4. use App\Entity\Partner;
  5. use App\Form\PartnerType;
  6. use App\Entity\Doctorants;
  7. use App\Entity\Professeurs;
  8. use App\Entity\ChefsEquipes;
  9. use App\Entity\ChefsProjets;
  10. use App\Form\DoctorantsType;
  11. use App\Form\ProfesseursType;
  12. use App\Form\ChefsEquipesType;
  13. use App\Form\ChefsProjetsType;
  14. use App\Entity\PresentationLabo;
  15. use App\Entity\MaitresConferences;
  16. use App\Form\PresentationLaboType;
  17. use App\Form\MaitresConferencesType;
  18. use App\Entity\DirecteursProfesseurs;
  19. use App\Repository\PartnerRepository;
  20. use App\Form\DirecteursProfesseursType;
  21. use App\Repository\DoctorantsRepository;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use App\Repository\ProfesseursRepository;
  24. use App\Repository\ChefsEquipesRepository;
  25. use App\Repository\ChefsProjetsRepository;
  26. use Knp\Component\Pager\PaginatorInterface;
  27. use Symfony\Component\HttpFoundation\Request;
  28. use App\Repository\PresentationLaboRepository;
  29. use Symfony\Component\HttpFoundation\Response;
  30. use Symfony\Component\Mime\Address;
  31. use Symfony\Component\Routing\Annotation\Route;
  32. use App\Repository\MaitresConferencesRepository;
  33. use App\Repository\DirecteursProfesseursRepository;
  34. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  35. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  36. use Symfony\Component\Mailer\MailerInterface;
  37. use Symfony\Component\Mailer\SentMessage;
  38. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  39. use Symfony\Contracts\HttpClient\HttpClientInterface;
  40. class contactController extends AbstractController
  41. {
  42.    
  43.      /**
  44.      * @Route("/contact", name="contact_show")
  45.      */
  46.     public function showIndex(Request $requestMailerInterface $mailerHttpClientInterface $client): Response
  47.     {
  48.         $siteKey $this->getParameter('GOOGLE_RECAPTCHA_SITE_KEY');
  49.         if (!$siteKey) {
  50.             throw new \Exception('GOOGLE_RECAPTCHA_SITE_KEY is not set');
  51.         }
  52.         if ($request->isMethod('POST')) {
  53.             $recaptchaResponse $request->request->get('g-recaptcha-response');
  54.             if (empty($recaptchaResponse)) {
  55.                 $this->addFlash('error''Please confirm that you are not a robot.');
  56.                 return $this->redirectToRoute('contact_show');
  57.             }
  58.             $secretKey $this->getParameter('GOOGLE_RECAPTCHA_SECRET_KEY');
  59.             $response $client->request('POST''https://www.google.com/recaptcha/api/siteverify', [
  60.                 'body' => [
  61.                     'secret' => $secretKey,
  62.                     'response' => $recaptchaResponse,
  63.                     'remoteip' => $request->getClientIp(),
  64.                 ]
  65.             ]);
  66.             $captchaValidation json_decode($response->getContent(), true);
  67.             if (!$captchaValidation['success']) {
  68.                 $this->addFlash('error''Invalid CAPTCHA, please try again.');
  69.                 return $this->redirectToRoute('contact_show');
  70.             }
  71.             // Email handling
  72.             $name $request->request->get("name");
  73.             $sender_email $request->request->get("email");
  74.             $subject $request->request->get("subject");
  75.             $message $request->request->get("message");
  76.             $email = (new TemplatedEmail())
  77.                 ->from(new Address('ali.wali@regimlab.org''REGIM'))
  78.                 ->replyTo($sender_email)
  79.                 ->to('ali.wali@regimlab.org')
  80.                 ->subject("Contact Form: " $subject)
  81.                 ->htmlTemplate('contact/contact-email.html.twig')
  82.                 ->context([
  83.                     'name' => $name,
  84.                     'emailRequester' => $sender_email,
  85.                     'subject' => $subject,
  86.                     'message' => $message
  87.                 ]);
  88.             $email_confirmation = (new TemplatedEmail())
  89.                 ->from(new Address('ali.wali@regimlab.org''REGIM'))
  90.                 ->to($sender_email)
  91.                 ->subject("Confirmation: " $subject)
  92.                 ->htmlTemplate('contact/confirmation-contact-email.html.twig')
  93.                 ->context([
  94.                     'name' => $name,
  95.                     'emailRequester' => $sender_email,
  96.                     'subject' => $subject,
  97.                     'message' => $message
  98.                 ]);
  99.             try {
  100.                 $mailer->send($email);
  101.                 $mailer->send($email_confirmation);
  102.                 $this->addFlash('success''Your message has been sent successfully!');
  103.             } catch (TransportExceptionInterface $e) {
  104.                 $this->addFlash('error''There was an error sending your message. Please try again later.');
  105.             }
  106.         }
  107.         return $this->render('contact/contact.html.twig', [
  108.             'google_recaptcha_site_key' => $siteKey,
  109.         ]);
  110.     }
  111. }
  112.     
  113.