From 5e8b49a131544c440992b4585ad8ed5020a56464 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 29 Mar 2021 14:33:46 +0200 Subject: [PATCH] add contact page --- src/Controller/BotController.php | 38 +++++++++ src/Controller/ContactController.php | 32 +++++++- src/Form/ContactType.php | 81 +++++++++++++++++++ templates/base.html.twig | 2 +- .../bot/form_without_javascript.html.twig | 38 +++++++++ templates/contact/index.html.twig | 20 ----- templates/mail/contact.html.twig | 5 ++ templates/page/contact/default.html.twig | 42 +++++++++- 8 files changed, 234 insertions(+), 24 deletions(-) create mode 100644 src/Controller/BotController.php create mode 100644 src/Form/ContactType.php create mode 100644 templates/bot/form_without_javascript.html.twig delete mode 100644 templates/contact/index.html.twig create mode 100644 templates/mail/contact.html.twig diff --git a/src/Controller/BotController.php b/src/Controller/BotController.php new file mode 100644 index 0000000..86802e7 --- /dev/null +++ b/src/Controller/BotController.php @@ -0,0 +1,38 @@ +query->get('page'); + $posted = $request->request->all(); + $datas = []; + + if (empty($action) || empty($posted) || !$request->isMethod('POST')) { + throw $this->createNotFoundException(); + } + + foreach ($posted as $name => $value) { + if (is_array($value)) { + foreach ($value as $k => $v) { + $datas[$name.'['.$k.']'] = $v; + } + } else { + $datas[$name] = $value; + } + } + + return $this->defaultRender('bot/form_without_javascript.html.twig', [ + 'action' => $action, + 'datas' => $datas, + ]); + } +} diff --git a/src/Controller/ContactController.php b/src/Controller/ContactController.php index 9eedf0c..8df16e2 100644 --- a/src/Controller/ContactController.php +++ b/src/Controller/ContactController.php @@ -6,12 +6,42 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use App\Core\Controller\Site\PageController; +use App\Form\ContactType; +use App\Core\Notification\MailNotifier; +use Symfony\Component\HttpFoundation\Request; class ContactController extends PageController { - public function contact(): Response + public function contact(MailNotifier $notifier, Request $request): Response { + $form = $this->createForm(ContactType::class); + $showForm = true; + + if ($request->isMethod('POST')) { + $form->handleRequest($request); + + if ($form->isValid()) { + $showForm = false; + $data = $form->getData(); + + $notifier + ->addRecipient('simon@deblan.fr') + ->setSubject('[Deblan] Nouveau message') + ->setReplyTo($data['email']) + ->notify('mail/contact.html.twig', [ + 'message' => $data, + ], 'text/plain'); + + $this->addFlash( + 'success', + 'Votre message a bien été envoyé.' + ); + } + } + return $this->defaultRender($this->siteRequest->getPage()->getTemplate(), [ + 'form' => $form->createView(), + 'showForm' => $showForm, ]); } } diff --git a/src/Form/ContactType.php b/src/Form/ContactType.php new file mode 100644 index 0000000..2b50a08 --- /dev/null +++ b/src/Form/ContactType.php @@ -0,0 +1,81 @@ +add( + 'name', + TextType::class, + [ + 'label' => 'Nom', + 'required' => true, + 'attr' => [ + ], + 'constraints' => [ + new NotBlank(), + ], + ] + ); + + $builder->add( + 'subject', + TextType::class, + [ + 'label' => 'Sujet', + 'required' => true, + 'attr' => [ + ], + 'constraints' => [ + new NotBlank(), + ], + ] + ); + + $builder->add( + 'email', + EmailType::class, + [ + 'label' => 'E-mail', + 'required' => true, + 'attr' => [ + ], + 'constraints' => [ + new NotBlank(), + new Email(), + ], + ] + ); + + $builder->add( + 'message', + TextareaType::class, + [ + 'label' => 'Message', + 'required' => true, + 'attr' => [ + ], + 'constraints' => [ + new NotBlank(), + ], + ] + ); + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + ]); + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index ffcefbc..be90fd1 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -85,7 +85,7 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX {% set flashes = app.flashes %} {% if flashes|length %} - {% for level, messages in appflashes %} + {% for level, messages in flashes %} {% for message in messages %}
{{- message|nl2br -}} diff --git a/templates/bot/form_without_javascript.html.twig b/templates/bot/form_without_javascript.html.twig new file mode 100644 index 0000000..806d7de --- /dev/null +++ b/templates/bot/form_without_javascript.html.twig @@ -0,0 +1,38 @@ +{% extends "base.html.twig" %} + +{% block page_title %} + {{- 'Validation nécessaire' -}} +{% endblock %} + +{% block page_subtitle %} +{% endblock %} + +{% block metas %} +{% endblock %} + +{% block meta_title %} + {{- 'Validation nécessaire' -}} +{% endblock %} + +{% block body %} +
+
+

+ {% set p %} + Merci de cliquer sur le bouton ci-dessous pour valider + le formulaire : + {% endset %} + + {{- p -}} +

+ +
+ {% for name, value in datas %} + + {% endfor %} + + +
+
+
+{% endblock %} diff --git a/templates/contact/index.html.twig b/templates/contact/index.html.twig deleted file mode 100644 index dc611d1..0000000 --- a/templates/contact/index.html.twig +++ /dev/null @@ -1,20 +0,0 @@ -{% extends 'base.html.twig' %} - -{% block title %}Hello ContactController!{% endblock %} - -{% block body %} - - -
-

Hello {{ controller_name }}! ✅

- - This friendly message is coming from: - -
-{% endblock %} diff --git a/templates/mail/contact.html.twig b/templates/mail/contact.html.twig new file mode 100644 index 0000000..abda176 --- /dev/null +++ b/templates/mail/contact.html.twig @@ -0,0 +1,5 @@ +Auteur : {{ message.name }} +Email : {{ message.email }} +Sujet : {{ message.subject|raw }} + +{{ message.message|raw }} diff --git a/templates/page/contact/default.html.twig b/templates/page/contact/default.html.twig index 53ac3a5..511f7ab 100644 --- a/templates/page/contact/default.html.twig +++ b/templates/page/contact/default.html.twig @@ -15,9 +15,47 @@
{{- _page.content.value|markdown('post') -}} - - CONTACT
+ + {% if showForm %} +
+
+
+
+ {{ form_label(form.name) }} + {{ form_widget(form.name) }} + {{ form_errors(form.name) }} +
+
+ {{ form_label(form.email) }} + {{ form_widget(form.email) }} + {{ form_errors(form.email) }} +
+
+
+
+ {{ form_label(form.subject) }} + {{ form_widget(form.subject) }} + {{ form_errors(form.subject) }} +
+
+
+ {{ form_label(form.message) }} + {{ form_errors(form.message) }} + {{ form_widget(form.message, {attr: {cols: 30, rows: 10}}) }} +
+
+ + +
+
+ +
+ + {{ form_rest(form) }} +
+
+ {% endif %} {% endblock %}