2015-02-01 18:55:24 +01:00
|
|
|
"""
|
|
|
|
This module contains the form class for the contact_form app.
|
|
|
|
|
|
|
|
"""
|
|
|
|
from __future__ import absolute_import, unicode_literals
|
|
|
|
|
|
|
|
from django import forms
|
|
|
|
from django.conf import settings
|
|
|
|
from django.core.mail import send_mail
|
|
|
|
from django.template import RequestContext
|
|
|
|
from django.template import loader
|
2018-11-19 23:28:40 +01:00
|
|
|
from django.urls import reverse
|
2015-02-01 20:58:53 +01:00
|
|
|
from django.utils.translation import ugettext_lazy as _
|
2015-02-01 18:55:24 +01:00
|
|
|
|
|
|
|
from django.contrib.sites.models import Site
|
2015-10-13 22:31:20 +02:00
|
|
|
from django.contrib.sites.requests import RequestSite
|
2015-02-01 18:55:24 +01:00
|
|
|
|
|
|
|
from crispy_forms.helper import FormHelper
|
|
|
|
from crispy_forms.layout import Submit
|
|
|
|
|
|
|
|
|
|
|
|
class ContactForm(forms.Form):
|
|
|
|
"""
|
|
|
|
This is the contact form class.
|
|
|
|
|
|
|
|
"""
|
|
|
|
name = forms.CharField(max_length=100, label=_('Your name'))
|
|
|
|
email = forms.EmailField(max_length=200, label=_('Your email address'))
|
|
|
|
body = forms.CharField(widget=forms.Textarea, label=_('Your message'))
|
|
|
|
|
|
|
|
subject_template_name = "contact_form/contact_form_subject.txt"
|
|
|
|
template_name = 'contact_form/contact_form.txt'
|
|
|
|
from_email = settings.DEFAULT_FROM_EMAIL
|
|
|
|
recipient_list = [mail_tuple[1] for mail_tuple in settings.MANAGERS]
|
|
|
|
|
|
|
|
def __init__(self, **kwargs):
|
|
|
|
self.request = kwargs.pop('request')
|
|
|
|
super(ContactForm, self).__init__(**kwargs)
|
|
|
|
self.helper = FormHelper()
|
|
|
|
self.helper.form_action = reverse('contact_form')
|
|
|
|
self.helper.add_input(Submit('submit', _('Send message')))
|
|
|
|
|
|
|
|
def get_context(self):
|
|
|
|
if not self.is_valid():
|
|
|
|
raise ValueError(
|
|
|
|
'Cannot generate context from invalid contact form')
|
|
|
|
if Site._meta.installed:
|
|
|
|
site = Site.objects.get_current()
|
|
|
|
else:
|
|
|
|
site = RequestSite(self.request)
|
|
|
|
return RequestContext(
|
|
|
|
self.request, dict(self.cleaned_data, site=site))
|
|
|
|
|
|
|
|
def message(self):
|
2016-01-09 15:46:04 +01:00
|
|
|
context = self.get_context()
|
|
|
|
template_context = context.flatten()
|
|
|
|
template_context.update({
|
|
|
|
'remote_ip': context.request.META['REMOTE_ADDR']
|
|
|
|
})
|
|
|
|
return loader.render_to_string(self.template_name, template_context)
|
2015-02-01 18:55:24 +01:00
|
|
|
|
|
|
|
def subject(self):
|
2016-01-09 15:46:04 +01:00
|
|
|
context = self.get_context().flatten()
|
|
|
|
subject = loader.render_to_string(self.subject_template_name, context)
|
2015-02-01 18:55:24 +01:00
|
|
|
return ''.join(subject.splitlines())
|
|
|
|
|
|
|
|
def save(self, fail_silently=False):
|
|
|
|
"""
|
|
|
|
Build and send the email.
|
|
|
|
|
|
|
|
"""
|
|
|
|
send_mail(
|
|
|
|
fail_silently=fail_silently,
|
|
|
|
from_email=self.from_email,
|
|
|
|
recipient_list=self.recipient_list,
|
|
|
|
subject=self.subject(),
|
|
|
|
message=self.message()
|
|
|
|
)
|