<?php
namespace App\Controller;
use DateTimeImmutable;
use App\Entity\Partner;
use App\Form\PartnerType;
use App\Entity\Doctorants;
use App\Entity\Professeurs;
use App\Entity\ChefsEquipes;
use App\Entity\ChefsProjets;
use App\Form\DoctorantsType;
use App\Form\ProfesseursType;
use App\Form\ChefsEquipesType;
use App\Form\ChefsProjetsType;
use App\Entity\PresentationLabo;
use App\Entity\MaitresConferences;
use App\Form\PresentationLaboType;
use App\Form\MaitresConferencesType;
use App\Entity\DirecteursProfesseurs;
use App\Repository\PartnerRepository;
use App\Form\DirecteursProfesseursType;
use App\Repository\DoctorantsRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\ProfesseursRepository;
use App\Repository\ChefsEquipesRepository;
use App\Repository\ChefsProjetsRepository;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Repository\PresentationLaboRepository;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\MaitresConferencesRepository;
use App\Repository\DirecteursProfesseursRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mailer\SentMessage;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Contracts\HttpClient\HttpClientInterface;
class contactController extends AbstractController
{
/**
* @Route("/contact", name="contact_show")
*/
public function showIndex(Request $request, MailerInterface $mailer, HttpClientInterface $client): Response
{
$siteKey = $this->getParameter('GOOGLE_RECAPTCHA_SITE_KEY');
if (!$siteKey) {
throw new \Exception('GOOGLE_RECAPTCHA_SITE_KEY is not set');
}
if ($request->isMethod('POST')) {
$recaptchaResponse = $request->request->get('g-recaptcha-response');
if (empty($recaptchaResponse)) {
$this->addFlash('error', 'Please confirm that you are not a robot.');
return $this->redirectToRoute('contact_show');
}
$secretKey = $this->getParameter('GOOGLE_RECAPTCHA_SECRET_KEY');
$response = $client->request('POST', 'https://www.google.com/recaptcha/api/siteverify', [
'body' => [
'secret' => $secretKey,
'response' => $recaptchaResponse,
'remoteip' => $request->getClientIp(),
]
]);
$captchaValidation = json_decode($response->getContent(), true);
if (!$captchaValidation['success']) {
$this->addFlash('error', 'Invalid CAPTCHA, please try again.');
return $this->redirectToRoute('contact_show');
}
// Email handling
$name = $request->request->get("name");
$sender_email = $request->request->get("email");
$subject = $request->request->get("subject");
$message = $request->request->get("message");
$email = (new TemplatedEmail())
->from(new Address('ali.wali@regimlab.org', 'REGIM'))
->replyTo($sender_email)
->to('ali.wali@regimlab.org')
->subject("Contact Form: " . $subject)
->htmlTemplate('contact/contact-email.html.twig')
->context([
'name' => $name,
'emailRequester' => $sender_email,
'subject' => $subject,
'message' => $message
]);
$email_confirmation = (new TemplatedEmail())
->from(new Address('ali.wali@regimlab.org', 'REGIM'))
->to($sender_email)
->subject("Confirmation: " . $subject)
->htmlTemplate('contact/confirmation-contact-email.html.twig')
->context([
'name' => $name,
'emailRequester' => $sender_email,
'subject' => $subject,
'message' => $message
]);
try {
$mailer->send($email);
$mailer->send($email_confirmation);
$this->addFlash('success', 'Your message has been sent successfully!');
} catch (TransportExceptionInterface $e) {
$this->addFlash('error', 'There was an error sending your message. Please try again later.');
}
}
return $this->render('contact/contact.html.twig', [
'google_recaptcha_site_key' => $siteKey,
]);
}
}