From 46645bde17b4f4c11f0b484178301999e4c4b07e Mon Sep 17 00:00:00 2001 From: mtyton Date: Sat, 14 Oct 2023 00:28:53 +0200 Subject: [PATCH] Modified fiew steps, added possibility to attach files --- artel/dynamic_forms/models.py | 50 +++++++++---------- .../templates/forms/email_form_page.html | 8 +-- .../forms/email_form_page_landing.html | 2 +- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/artel/dynamic_forms/models.py b/artel/dynamic_forms/models.py index 2ef3716..f2a95e4 100644 --- a/artel/dynamic_forms/models.py +++ b/artel/dynamic_forms/models.py @@ -17,7 +17,10 @@ from wagtail.contrib.forms.models import ( AbstractFormSubmission ) -from mailings.models import send_mail +from mailings.models import ( + OutgoingEmail, + Attachment +) from dynamic_forms.forms import DynamicForm @@ -56,34 +59,27 @@ class Form(FormMixin, Page): class EmailFormSubmission(AbstractFormSubmission): - def render_email(self, data): - content = [] - for field_name, value in data.items(): - if isinstance(value, list): - value = ", ".join(value) - - # Format dates and datetime(s) with SHORT_DATE(TIME)_FORMAT - if isinstance(value, datetime.datetime): - value = date_format(value, settings.SHORT_DATETIME_FORMAT) - elif isinstance(value, datetime.date): - value = date_format(value, settings.SHORT_DATE_FORMAT) - - content.append("{}: {}".format(field_name, value)) - - return "\n".join(content) def send_mail(self, data): + # modify this, get proper template to_addresses = data.pop("to_address").split(",") - subject = data.pop("subject") + attachments = [ + Attachment( + file.name, file.file.read(), file.content_type + ) + for file in data.pop("attachments", []) + ] + subject = data.get("subject") from_address = data.pop("from_address", settings.DEFAULT_FROM_EMAIL) - addresses = [x.strip() for x in to_addresses] - send_mail( - addresses, - [], - subject, - self.render_email(data), - from_address - ) + for address in to_addresses: + OutgoingEmail.objects.send( + subject=subject, + template_name="form_mail", + recipient=address, + sender=from_address, + context=data, + attachments=attachments + ) class CustomEmailForm(Form): @@ -106,6 +102,7 @@ class CustomEmailForm(Form): return EmailFormSubmission def process_form_submission(self, form): + attachments = form.cleaned_data.pop("attachments", []) submission = self.get_submission_class().objects.create( form_data=form.cleaned_data, page=self, @@ -114,7 +111,8 @@ class CustomEmailForm(Form): mail_data.update({ "from_address": self.from_address, "to_address": self.to_address, - "subject": self.subject + "subject": self.subject, + "attachments": attachments }) submission.send_mail(data=mail_data) return submission diff --git a/artel/dynamic_forms/templates/forms/email_form_page.html b/artel/dynamic_forms/templates/forms/email_form_page.html index b0a3988..f7f6a71 100644 --- a/artel/dynamic_forms/templates/forms/email_form_page.html +++ b/artel/dynamic_forms/templates/forms/email_form_page.html @@ -8,16 +8,16 @@

{{ page.date }}

{% if form %}
{{ page.intro|richtext }}
-
+ {% csrf_token %} {% for field in form %}
- {{field}} + {{field}} - {{form.help_text}} + {% trans field.help_text %}
diff --git a/artel/dynamic_forms/templates/forms/email_form_page_landing.html b/artel/dynamic_forms/templates/forms/email_form_page_landing.html index a0d4f0e..c534dc8 100644 --- a/artel/dynamic_forms/templates/forms/email_form_page_landing.html +++ b/artel/dynamic_forms/templates/forms/email_form_page_landing.html @@ -18,7 +18,7 @@ {{page.thank_you_text|richtext}} - {% trans "Go to homepage" %} + {% trans "Homepage" %}