src/Renderer/Entry/ContactRenderer.php line 42

Open in your IDE?
  1. <?php
  2. namespace App\Renderer\Entry;
  3. use App\Entity\ContactRequest;
  4. use App\Form\ContactRequestType;
  5. use App\Repository\ContactRequestRepository;
  6. use Moka\Cms\Entity\ComponentInterface;
  7. use Moka\Cms\Entity\EntryInterface;
  8. use Moka\Cms\Renderer\RendererInterface;
  9. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  10. use Symfony\Component\Form\FormFactoryInterface;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\Mailer\MailerInterface;
  14. use Symfony\Component\Routing\RouterInterface;
  15. use Twig\Environment;
  16. class ContactRenderer implements RendererInterface
  17. {
  18.     public function __construct(
  19.         private Environment $environment,
  20.         private FormFactoryInterface $formFactory,
  21.         private RequestStack $requestStack,
  22.         private RouterInterface $router,
  23.         private MailerInterface $mailer,
  24.         private readonly ContactRequestRepository $contactRequestRepository,
  25.     ) {
  26.     }
  27.     public function getName(): string
  28.     {
  29.         return 'contact';
  30.     }
  31.     public function render(EntryInterface|ComponentInterface $content, array $context = []): string
  32.     {
  33.         $request $this->requestStack->getCurrentRequest();
  34.         $contactRequest = new ContactRequest();
  35.         $form $this->formFactory->create(ContactRequestType::class, $contactRequest);
  36.         $form->handleRequest($request);
  37.         if ($form->isSubmitted() && $form->isValid()) {
  38.             $this->contactRequestRepository->add($contactRequesttrue);
  39.             $this->sendEmail($contactRequest);
  40.             return new RedirectResponse($this->router->generate('contact', [
  41.                 'completed' => true,
  42.                 'store' => $contactRequest->getStore()?->getSlug(),
  43.             ]));
  44.         }
  45.         return $this->environment->render('entry/contact.html.twig', [
  46.             'entry' => $content,
  47.             'form' => $form->createView(),
  48.         ]);
  49.     }
  50.     public function sendEmail(ContactRequest $contactRequest): void
  51.     {
  52.         $email = (new TemplatedEmail())
  53.             ->from('contact@solidpool.com')
  54.             ->to('contact@solidpool.com')
  55.             ->subject('Solidpool.fr : formulaire de contact')
  56.             ->htmlTemplate('mail/contact.html.twig')
  57.             ->textTemplate('mail/contact.txt.twig')
  58.             ->context([
  59.                 'name' => $contactRequest->getLastname(),
  60.                 'firstname' => $contactRequest->getFirstname(),
  61.                 'postalCode' => $contactRequest->getZipcode(),
  62.                 'city' => $contactRequest->getCity(),
  63.                 'mail' => $contactRequest->getEmail(),
  64.                 'phone' => $contactRequest->getPhone(),
  65.                 'message' => $contactRequest->getMessage(),
  66.                 'store' => $contactRequest->getStore()?->getInternalName(),
  67.             ]);
  68.         $this->mailer->send($email);
  69.     }
  70. }