src/Renderer/Entry/AffiliateRenderer.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\Renderer\Entry;
  3. use App\Entity\AffiliateRequest;
  4. use App\Form\AffiliateRequestType;
  5. use App\Repository\AffiliateRequestRepository;
  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 AffiliateRenderer 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 AffiliateRequestRepository $affiliateRequestRepository,
  25.     ) {
  26.     }
  27.     public function getName(): string
  28.     {
  29.         return 'affiliate';
  30.     }
  31.     public function render(EntryInterface|ComponentInterface $content, array $context = []): string
  32.     {
  33.         $request $this->requestStack->getCurrentRequest();
  34.         $affiliateRequest = new AffiliateRequest();
  35.         $form $this->formFactory->create(AffiliateRequestType::class, $affiliateRequest);
  36.         $form->handleRequest($request);
  37.         if ($form->isSubmitted() && $form->isValid()) {
  38.             $this->affiliateRequestRepository->add($affiliateRequesttrue);
  39.             $this->sendEmail($affiliateRequest);
  40.             return new RedirectResponse($this->router->generate('affiliate', ['completed' => true]));
  41.         }
  42.         return $this->environment->render('entry/affiliate.html.twig', [
  43.             'entry' => $content,
  44.             'form' => $form->createView(),
  45.         ]);
  46.     }
  47.     public function sendEmail(AffiliateRequest $affiliateRequest): void
  48.     {
  49.         $email = (new TemplatedEmail())
  50.             ->from('contact@solidpool.com')
  51.             ->to('s.gauthier@solidpool.com')
  52.             ->subject('Solidpool.fr : demande d\'affiliation')
  53.             ->htmlTemplate('mail/affiliate.html.twig')
  54.             ->textTemplate('mail/affiliate.txt.twig')
  55.             ->context([
  56.                 'lastname' => $affiliateRequest->getLastname(),
  57.                 'firstname' => $affiliateRequest->getFirstname(),
  58.                 'mail' => $affiliateRequest->getEmail(),
  59.                 'phone' => $affiliateRequest->getPhone(),
  60.                 'city' => $affiliateRequest->getCity(),
  61.                 'message' => $affiliateRequest->getMessage(),
  62.             ]);
  63.         $this->mailer->send($email);
  64.     }
  65. }