src/Controller/ContactController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ContactMessage;
  4. use App\Entity\User;
  5. use App\Service\ContactEntityService;
  6. use App\Service\Mailer;
  7. use Bluesquare\ValidatorBundle\Validator;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaV3Type;
  10. use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\IsTrueV3;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  13. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextType;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\Mailer\MailerInterface;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Validator\Constraints\Email;
  20. use Symfony\Component\Validator\Constraints\NotBlank;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. class ContactController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/contact", name="contact.form", methods={"GET", "POST"})
  26.      */
  27.     public function form(
  28.         Request $request,
  29.         Validator $validator,
  30.         EntityManagerInterface $manager,
  31.         ContactEntityService $contactEntityService,
  32.         Mailer $mailer,
  33.         TranslatorInterface $translator,
  34.         MailerInterface $symfonyMailer
  35.     ) {
  36.         $success false;
  37.         $contact = new ContactMessage();
  38.         $builder $this
  39.             ->createFormBuilder($contact)
  40.             ->add('email'EmailType::class, [
  41.                 'constraints' => [
  42.                     new NotBlank(),
  43.                     new Email(),
  44.                 ],
  45.             ])
  46.             ->add('subject'TextType::class, [
  47.                 'constraints' => [
  48.                     new NotBlank(),
  49.                 ],
  50.             ])
  51.             ->add('message'TextareaType::class, [
  52.                 'constraints' => [
  53.                     new NotBlank(),
  54.                 ],
  55.             ])
  56.             ->add('recaptcha'EWZRecaptchaV3Type::class, [
  57.                 'action_name' => 'contact',
  58.                 'constraints' => [
  59.                     new IsTrueV3(),
  60.                 ],
  61.             ])
  62.         ;
  63.         $contactForm $builder->getForm();
  64.         $sender $this->getParameter('mailer_from_address');
  65.         $contactForm->handleRequest($request);
  66.         if ($contactForm->isSubmitted() && $contactForm->isValid()) {
  67.             $contact->setSentAt(new \DateTime());
  68.             $manager->persist($contact);
  69.             $manager->flush();
  70.             $users $manager->getRepository(User::class)->findEntitiesToReceiveContactMessages();
  71.             $subject $translator->trans('contact.reception', [], 'mails');
  72.             $html $contactEntityService->generateHTML($contact);
  73.             foreach ($users as $user) {
  74.                 $mailer->sendEmail($symfonyMailer,
  75.                     $subject,
  76.                     $html,
  77.                     $contact->getEmail(),
  78.                     $user->getEmail(),
  79.                     $sender
  80.                 );
  81.             }
  82.             $success true;
  83.             $this->addFlash('success''message.success');
  84.             return $this->redirectToRoute('contact.form');
  85.         }
  86.         return $this->render('contact/contact.html.twig', [
  87.             'success' => $success,
  88.             'contact_form' => $contactForm->createView(),
  89.             'validator' => $validator,
  90.         ]);
  91.     }
  92.     /**
  93.      * @Route("/contact/demo", name="contact.demo", methods={"GET"})
  94.      */
  95.     public function menu()
  96.     {
  97.         $response = new Response("
  98.         <html>
  99.             <head>
  100.                 <title>Contact</title>
  101.             </head>
  102.             <body>
  103.                 <h1>Contact</h1>
  104.                 <p>
  105.                     <a href='/contact'>Contact</a>
  106.                 </p>
  107.             </body>
  108.         ");
  109.         $response->setSharedMaxAge(3600);
  110.         return $response;
  111.     }
  112. }