diff --git a/djangocms_forms/cms_plugins.py b/djangocms_forms/cms_plugins.py index 966f09f..59cf3b1 100644 --- a/djangocms_forms/cms_plugins.py +++ b/djangocms_forms/cms_plugins.py @@ -31,8 +31,8 @@ class FormFieldInline(admin.StackedInline): def get_fieldsets(self, request, obj=None): fields = ( ('label', 'field_type', 'required'), - 'initial', 'placeholder_text', 'help_text', - 'choice_values', 'position', + 'initial', 'placeholder_text', 'help_text', + 'choice_values', 'position', ) if settings.DJANGOCMS_FORMS_ALLOW_CUSTOM_FIELD_NAME: @@ -101,7 +101,7 @@ def get_fieldsets(self, request, obj=None): 'Choose storage options to capture form data. You can enter ' 'an email address to have the form submissions emailed to you or ' 'log all the form submissions to the database.', - 'fields': ('email_to', 'email_from', 'email_subject', + 'fields': ('email_to', 'email_from', 'email_reply_to', 'email_subject', 'email_uploaded_files', 'save_data', 'spam_protection', ), }), ) diff --git a/djangocms_forms/forms.py b/djangocms_forms/forms.py index 1f514e4..73a5841 100644 --- a/djangocms_forms/forms.py +++ b/djangocms_forms/forms.py @@ -341,6 +341,7 @@ def save_to_db(self, form_data, request, referrer): def email_submission(self, form_data, request, referrer): mail_to = re.compile('\s*[,;]+\s*').split(self.form_definition.email_to) mail_from = self.form_definition.email_from or None + mail_reply_to = self.form_definition.email_reply_to or None mail_subject = self.form_definition.email_subject or \ 'Form Submission - %s' % self.form_definition.name context = { @@ -352,10 +353,22 @@ def email_submission(self, form_data, request, referrer): 'recipients': mail_to, } + for field in form_data: + if mail_reply_to: + mail_reply_to = mail_reply_to.replace('{{{0}}}'.format(field['label']), + str(field['value'])) + + mail_subject = mail_subject.replace('{{{0}}}'.format(field['label']), + str(field['value'])) + + if mail_reply_to: + mail_reply_to = (mail_reply_to,) + message = render_to_string('djangocms_forms/email_template/email.txt', context) message_html = render_to_string('djangocms_forms/email_template/email.html', context) - email = EmailMultiAlternatives(mail_subject, message, mail_from, mail_to) + email = EmailMultiAlternatives(mail_subject, message, mail_from, mail_to, + reply_to=mail_reply_to) email.attach_alternative(message_html, 'text/html') if self.form_definition.email_uploaded_files: diff --git a/djangocms_forms/migrations/0006_formfield_email_reply_to.py b/djangocms_forms/migrations/0006_formfield_email_reply_to.py new file mode 100644 index 0000000..71ed3a0 --- /dev/null +++ b/djangocms_forms/migrations/0006_formfield_email_reply_to.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.12 on 2018-05-01 09:46 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('djangocms_forms', '0005_formfield_field_name'), + ] + + operations = [ + migrations.AddField( + model_name='formdefinition', + name='email_reply_to', + field=models.CharField(blank=True, help_text='Reply to e-mail header. Use form field values by inserting placeholders of field names, e.g. "{my name field} <{my email field}>"', max_length=255, verbose_name='Reply to'), + ), + migrations.AlterField( + model_name='formdefinition', + name='email_subject', + field=models.CharField(blank=True, help_text='Use form field values by inserting placeholders of field names, e.g. "{my subject}"', max_length=255, verbose_name='Email Subject'), + ), + ] diff --git a/djangocms_forms/models.py b/djangocms_forms/models.py index d56bc3b..e337b64 100644 --- a/djangocms_forms/models.py +++ b/djangocms_forms/models.py @@ -70,7 +70,12 @@ class FormDefinition(CMSPlugin): _('Send form data to e-mail address'), max_length=255, blank=True, help_text=_('Separate several addresses with a comma.')) email_from = models.EmailField(_('Sender Email Address'), max_length=255, blank=True) - email_subject = models.CharField(_('Email Subject'), max_length=255, blank=True) + email_reply_to = models.CharField(_('Reply to'), max_length=255, blank=True, + help_text=_('Reply to e-mail header. Use form field values by inserting placeholders of ' + 'field names, e.g. "{my name field} <{my email field}>"')) + email_subject = models.CharField(_('Email Subject'), max_length=255, blank=True, + help_text=_('Use form field values by inserting placeholders of ' + 'field names, e.g. "{my subject}"')) email_uploaded_files = models.BooleanField( _('Send uploaded files as email attachments'), default=True) diff --git a/djangocms_forms/static/js/djangocms_forms/jquery.djangocms-forms.js b/djangocms_forms/static/js/djangocms_forms/jquery.djangocms-forms.js index 636a673..e0dd9b9 100644 --- a/djangocms_forms/static/js/djangocms_forms/jquery.djangocms-forms.js +++ b/djangocms_forms/static/js/djangocms_forms/jquery.djangocms-forms.js @@ -46,7 +46,7 @@ $(this).ajaxSubmit(ajaxOptions); }); - if (typeof(grecaptcha) == 'undefined') { + if (typeof(grecaptcha) == 'undefined') || typeof(grecaptcha.render) =='undefined') { window.reCapctchaOnloadCallback = function() { this.renderReCaptcha(); }.bind(this); diff --git a/djangocms_forms/templates/djangocms_forms/email_template/email.html b/djangocms_forms/templates/djangocms_forms/email_template/email.html index 6965263..324ad04 100755 --- a/djangocms_forms/templates/djangocms_forms/email_template/email.html +++ b/djangocms_forms/templates/djangocms_forms/email_template/email.html @@ -11,7 +11,7 @@
{% if item.label %}{{ item.label }}{% else %}{{ item.name }}{% endif %}:
- {{ item.value|friendly|default_if_none:'—' }}
+ {{ item.value|friendly|default_if_none:'—'|linebreaksbr }}