src/Controller/EnquiryDefaultController.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Enquiry;
  4. use App\Entity\EnquiryCV;
  5. use App\Form\EnquiryType;
  6. use App\Form\EnquiryCVType;
  7. use App\Annotation\CmsComponent;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. class EnquiryDefaultController extends AbstractController
  14. {
  15.     public function __construct(
  16.         private EntityManagerInterface $em,
  17.         private \Swift_Mailer $mailer,
  18.         private string $email_noreply,
  19.         private string $email_primary
  20.     ) { }
  21.     /**
  22.      * @CmsComponent("Embed Enquiry Form", active=true, routeName="embed_enquiry")
  23.      */
  24.     #[Route(path'/cms-enquiry'name'embed_enquiry')]
  25.     public function embedEnquiry(Request $request, ): Response
  26.     {
  27.         $enquiry = new Enquiry();
  28.         $enquiry->setSubject('New Website Enquiry');
  29.         $form $this->createForm(EnquiryType::class, $enquiry);
  30.         $form->handleRequest($request);
  31.         $error false;
  32.         $success false;
  33.         $errorMessage '';
  34.         if ($form->isSubmitted()) {
  35.             if ($this->captchaIsValid($request)) {
  36.                 if ($form->isValid()) {
  37.                     $this->em->persist($enquiry);
  38.                     $this->em->flush();
  39.                     $success true;
  40.                     $this->sendEmail($enquiry);
  41.                 } else {
  42.                     $error true;
  43.                     $errorMessage 'Error - Check the form for errors';
  44.                 }
  45.             } else {
  46.                 $error true;
  47.                 $errorMessage 'Error - Captcha Invalid';
  48.             }
  49.         }
  50.         return $this->render('@theme/enquiry/enquiry.html.twig', [
  51.             'enquiry' => $enquiry,
  52.             'error' => $error,
  53.             'success' => $success,
  54.             'errorMessage' => $errorMessage,
  55.             'form' => $form->createView(),
  56.         ]);
  57.     }
  58.     /**
  59.      * @CmsComponent("Embed Enquiry Form & Map", active=true, routeName="embed_enquiry_map")
  60.      */
  61.     #[Route(path'/cms-enquiry-map'name'embed_enquiry_map')]
  62.     public function embedEnquiryMap(Request $request, ): Response
  63.     {
  64.         $enquiry = new Enquiry();
  65.         $enquiry->setSubject('New Website Enquiry');
  66.         $form $this->createForm(EnquiryType::class, $enquiry);
  67.         $form->handleRequest($request);
  68.         $error false;
  69.         $success false;
  70.         $errorMessage '';
  71.         if ($form->isSubmitted()) {
  72.             if ($this->captchaIsValid($request)) {
  73.                 if ($form->isValid()) {
  74.                     $this->em->persist($enquiry);
  75.                     $this->em->flush();
  76.                     $success true;
  77.                     $this->sendEmail($enquiry);
  78.                 } else {
  79.                     $error true;
  80.                     $errorMessage 'Error - Check the form for errors';
  81.                 }
  82.             } else {
  83.                 $error true;
  84.                 $errorMessage 'Error - Captcha Invalid';
  85.             }
  86.         }
  87.         return $this->render('@theme/enquiry/enquiry_map.html.twig', [
  88.             'enquiry' => $enquiry,
  89.             'error' => $error,
  90.             'success' => $success,
  91.             'errorMessage' => $errorMessage,
  92.             'form' => $form->createView(),
  93.         ]);
  94.     }
  95.     /**
  96.      * @CmsComponent("Embed CV form", active=true, routeName="embed_enquiry_cv")
  97.      */
  98.     #[Route(path'/cms-enquiry-cv'name'embed_enquiry_cv')]
  99.     public function embedEnquiryCv(Request $request): Response
  100.     {
  101.         $enquiry = new EnquiryCV();
  102.         $form $this->createForm(EnquiryCVType::class, $enquiry);
  103.         $form->handleRequest($request);
  104.         $error false;
  105.         $success false;
  106.         $errorMessage '';
  107.         if ($form->isSubmitted()) {
  108.             if ($this->captchaIsValid($request)) {
  109.                 if ($form->isValid()) {
  110.                     $enquiry->uploadFile();
  111.                     $this->em->persist($enquiry);
  112.                     $this->em->flush();
  113.                     $success true;
  114.                     $this->sendCVEmail($enquiry);
  115.                 } else {
  116.                     $error true;
  117.                     $errorMessage 'Error - Check the form for errors';
  118.                 }
  119.             } else {
  120.                 $error true;
  121.                 $errorMessage 'Error - Captcha Invalid';
  122.             }
  123.         }
  124.         return $this->render('@theme/enquiry/enquiry_cv.html.twig', [
  125.             'enquiry' => $enquiry,
  126.             'error' => $error,
  127.             'success' => $success,
  128.             'errorMessage' => $errorMessage,
  129.             'form' => $form->createView(),
  130.         ]);
  131.     }
  132.     #[Route(path'/email-test'name'email_test')]
  133.     public function emailTest(): Response
  134.     {
  135.         return $this->render('@theme/emails/enquiry-confirmed.html.twig');
  136.     }
  137.     private function captchaIsValid(Request $request): bool
  138.     {
  139.         $posted $request->request->All();
  140.         $secretKey $this->getParameter('recaptcha_secret');
  141.         $recaptcha $posted['g-recaptcha-response'];
  142.         $verify file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$recaptcha.'&remoteip='.$_SERVER['REMOTE_ADDR']);
  143.         $verify_json json_decode($verifyfalse512JSON_THROW_ON_ERROR);
  144.         return $verify_json->success;
  145.     }
  146.     private function sendEmail(Enquiry $enquiry): void
  147.     {
  148.         $message_to_client = (new \Swift_Message())
  149.             ->setSubject('Enquiry Received via '.$this->getParameter('sitename').' website')
  150.             ->setFrom($this->email_noreply)
  151.             ->setTo($this->email_primary)
  152.             ->setBody(
  153.                 $this->renderView('@theme/emails/enquiry-to-client.html.twig', ['enquiry' => $enquiry]),
  154.                 'text/html'
  155.             )
  156.         ;
  157.         try {
  158.             $this->mailer->send($message_to_client);
  159.         } catch (\Throwable $th) {
  160.             // ignore
  161.         }
  162.         $this->sendConfirmationEmail($enquiry);
  163.     }
  164.     private function sendCVEmail(EnquiryCV $enquiry): void
  165.     {
  166.         $message_to_client = (new \Swift_Message())
  167.             ->setSubject('Enquiry Received via '.$this->getParameter('sitename').' website')
  168.             ->setFrom($this->email_noreply)
  169.             ->setTo($this->email_primary)
  170.             ->setBody(
  171.                 $this->renderView('@theme/emails/enquiry-to-client-cv.html.twig', ['enquiry' => $enquiry]),
  172.                 'text/html'
  173.             )
  174.         ;
  175.         try {
  176.             $this->mailer->send($message_to_client);
  177.         } catch (\Throwable $th) {
  178.             // ignore
  179.         }
  180.         $this->sendConfirmationEmail($enquiry);
  181.     }
  182.     private function sendConfirmationEmail($enquiry): void
  183.     {
  184.         dump($enquiry);
  185.         $message_to_user = (new \Swift_Message())
  186.             ->setSubject('Enquiry sent to '.$this->getParameter('sitename').' confirmed')
  187.             ->setFrom($this->email_noreply)
  188.             ->setTo($enquiry->getEmail())
  189.             ->setBody(
  190.                 $this->renderView(
  191.                     '@theme/emails/enquiry-confirmed.html.twig',
  192.                     ['enquiry' => $enquiry]
  193.                 ),
  194.                 'text/html'
  195.             )
  196.         ;
  197.         // try {
  198.             $this->mailer->send($message_to_user);
  199.         // } catch (\Throwable $th) {
  200.             // ignore
  201.         // }
  202.     }
  203. }