From 385838580b6034fddb17c56f518300e664b2d107 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Sun, 1 Feb 2015 18:55:24 +0100 Subject: [PATCH] implement contact form - implement contact_form.forms.ContactForm - implement contact_form.views.ContactFormView and contact_form.views.ContactSuccessView - add new URL patterns 'contact_form' and 'contact_success' in contact_form.urls - add contact_form templates base.html, contact_form.html, contact_form.txt, contact_form_subject.txt and contact_success.html - add german translation for new strings - add contact_form to .coveragerc - add generated code documentation for contact_form app - add changelog entry --- docs/changelog.rst | 1 + docs/code.rst | 1 + docs/code/contact_form.rst | 24 ++++++ gnuviechadmin/.coveragerc | 2 +- gnuviechadmin/contact_form/__init__.py | 4 + gnuviechadmin/contact_form/forms.py | 73 +++++++++++++++++++ .../locale/de/LC_MESSAGES/django.po | 36 +++++++++ gnuviechadmin/contact_form/urls.py | 19 +++++ gnuviechadmin/contact_form/views.py | 50 +++++++++++++ gnuviechadmin/locale/de/LC_MESSAGES/django.po | 13 +++- .../templates/contact_form/base.html | 1 + .../templates/contact_form/contact_form.html | 21 ++++++ .../templates/contact_form/contact_form.txt | 5 ++ .../contact_form/contact_form_subject.txt | 1 + .../contact_form/contact_success.html | 9 +++ 15 files changed, 256 insertions(+), 4 deletions(-) create mode 100644 docs/code/contact_form.rst create mode 100644 gnuviechadmin/contact_form/__init__.py create mode 100644 gnuviechadmin/contact_form/forms.py create mode 100644 gnuviechadmin/contact_form/locale/de/LC_MESSAGES/django.po create mode 100644 gnuviechadmin/contact_form/urls.py create mode 100644 gnuviechadmin/contact_form/views.py create mode 100644 gnuviechadmin/templates/contact_form/base.html create mode 100644 gnuviechadmin/templates/contact_form/contact_form.html create mode 100644 gnuviechadmin/templates/contact_form/contact_form.txt create mode 100644 gnuviechadmin/templates/contact_form/contact_form_subject.txt create mode 100644 gnuviechadmin/templates/contact_form/contact_success.html diff --git a/docs/changelog.rst b/docs/changelog.rst index f173cd5..3b7672d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -1,6 +1,7 @@ Changelog ========= +* :feature:`-` add contact form * :feature:`-` add imprint as flatpage * :support:`-` mark active menu item as active via context_processor and corresponding template markup diff --git a/docs/code.rst b/docs/code.rst index bee201c..569e629 100644 --- a/docs/code.rst +++ b/docs/code.rst @@ -36,6 +36,7 @@ Django app code .. toctree:: code/gnuviechadmin + code/contact_form code/dashboard code/domains code/hostingpackages diff --git a/docs/code/contact_form.rst b/docs/code/contact_form.rst new file mode 100644 index 0000000..89b9cb8 --- /dev/null +++ b/docs/code/contact_form.rst @@ -0,0 +1,24 @@ +:py:mod:`contact_form` app +========================== + +.. automodule:: contact_form + + +:py:mod:`forms ` +------------------------------------ + +.. automodule:: contact_form.forms + :members: + + +:py:mod:`urls ` +---------------------------------- + +.. automodule:: contact_form.urls + + +:py:mod:`views ` +------------------------------------ + +.. automodule:: contact_form.views + :members: diff --git a/gnuviechadmin/.coveragerc b/gnuviechadmin/.coveragerc index 2ca7e1c..a787368 100644 --- a/gnuviechadmin/.coveragerc +++ b/gnuviechadmin/.coveragerc @@ -1,5 +1,5 @@ [run] -source = gnuviechadmin,managemails,osusers,domains,taskresults,gvawebcore,userdbs +source = gnuviechadmin,contact_form,dashboard,domains,gvawebcore,managemails,osusers,taskresults,userdbs [report] omit = */migrations/*,*/tests/*.py,*/tests.py,gnuviechadmin/settings/local.py,gnuviechadmin/settings/production.py diff --git a/gnuviechadmin/contact_form/__init__.py b/gnuviechadmin/contact_form/__init__.py new file mode 100644 index 0000000..27942c5 --- /dev/null +++ b/gnuviechadmin/contact_form/__init__.py @@ -0,0 +1,4 @@ +""" +Contact form app. + +""" diff --git a/gnuviechadmin/contact_form/forms.py b/gnuviechadmin/contact_form/forms.py new file mode 100644 index 0000000..96de08e --- /dev/null +++ b/gnuviechadmin/contact_form/forms.py @@ -0,0 +1,73 @@ +""" +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.core.urlresolvers import reverse +from django.template import RequestContext +from django.template import loader +from django.utils.translation import ugettext as _ + +from django.contrib.sites.models import RequestSite +from django.contrib.sites.models import Site + +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): + return loader.render_to_string(self.template_name, self.get_context()) + + def subject(self): + subject = loader.render_to_string( + self.subject_template_name, self.get_context()) + 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() + ) diff --git a/gnuviechadmin/contact_form/locale/de/LC_MESSAGES/django.po b/gnuviechadmin/contact_form/locale/de/LC_MESSAGES/django.po new file mode 100644 index 0000000..f559bc8 --- /dev/null +++ b/gnuviechadmin/contact_form/locale/de/LC_MESSAGES/django.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: contact_form\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-02-01 19:02+0100\n" +"PO-Revision-Date: 2015-02-01 19:03+0100\n" +"Last-Translator: Jan Dittberner \n" +"Language-Team: Jan Dittberner \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.6.10\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#: forms.py:27 +msgid "Your name" +msgstr "Ihr Name" + +#: forms.py:28 +msgid "Your email address" +msgstr "Ihre E-Mailadresse" + +#: forms.py:29 +msgid "Your message" +msgstr "Ihre Nachricht" + +#: forms.py:41 +msgid "Send message" +msgstr "Nachricht senden" diff --git a/gnuviechadmin/contact_form/urls.py b/gnuviechadmin/contact_form/urls.py new file mode 100644 index 0000000..6963969 --- /dev/null +++ b/gnuviechadmin/contact_form/urls.py @@ -0,0 +1,19 @@ +""" +URL patterns for the contact_form views. + +""" +from __future__ import absolute_import, unicode_literals + +from django.conf.urls import patterns, url + +from .views import ( + ContactFormView, + ContactSuccessView, +) + + +urlpatterns = patterns( + '', + url(r'^$', ContactFormView.as_view(), name='contact_form'), + url(r'^success/$', ContactSuccessView.as_view(), name='contact_success'), +) diff --git a/gnuviechadmin/contact_form/views.py b/gnuviechadmin/contact_form/views.py new file mode 100644 index 0000000..0e27417 --- /dev/null +++ b/gnuviechadmin/contact_form/views.py @@ -0,0 +1,50 @@ +""" +This module defines the views of the contact_form app. + +""" +from __future__ import absolute_import, unicode_literals + +from django.shortcuts import redirect +from django.core.urlresolvers import reverse_lazy +from django.views.generic import ( + FormView, + TemplateView, +) + +from .forms import ContactForm + + +class ContactFormView(FormView): + """ + This is the contact form view. + + """ + form_class = ContactForm + template_name = 'contact_form/contact_form.html' + success_url = reverse_lazy('contact_success') + + def get_form_kwargs(self, **kwargs): + kwargs = super(ContactFormView, self).get_form_kwargs(**kwargs) + kwargs['request'] = self.request + return kwargs + + def get_initial(self): + initial = super(ContactFormView, self).get_initial() + currentuser = self.request.user + if currentuser.is_authenticated(): + initial['name'] = ( + currentuser.get_full_name() or currentuser.username) + initial['email'] = currentuser.email + return initial + + def form_valid(self, form): + form.save(False) + return redirect(self.get_success_url()) + + +class ContactSuccessView(TemplateView): + """ + This view is shown after successful contact form sending. + + """ + template_name = 'contact_form/contact_success.html' diff --git a/gnuviechadmin/locale/de/LC_MESSAGES/django.po b/gnuviechadmin/locale/de/LC_MESSAGES/django.po index 0210942..d141bce 100644 --- a/gnuviechadmin/locale/de/LC_MESSAGES/django.po +++ b/gnuviechadmin/locale/de/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: gnuviechadmin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-01 16:31+0100\n" -"PO-Revision-Date: 2015-02-01 16:31+0100\n" +"POT-Creation-Date: 2015-02-01 19:04+0100\n" +"PO-Revision-Date: 2015-02-01 19:04+0100\n" "Last-Translator: Jan Dittberner \n" "Language-Team: Jan Dittberner \n" "Language: de\n" @@ -477,7 +477,10 @@ msgstr "phpPgAdmin" msgid "Imprint" msgstr "Impressum" -#: templates/base.html:68 +#: templates/base.html:68 templates/contact_form/contact_form.html:4 +#: templates/contact_form/contact_form.html:5 +#: templates/contact_form/contact_success.html:4 +#: templates/contact_form/contact_success.html:5 msgid "Contact" msgstr "Kontakt" @@ -514,6 +517,10 @@ msgstr "" msgid "Close" msgstr "Schließen" +#: templates/contact_form/contact_success.html:8 +msgid "Your message has been sent successfully." +msgstr "Ihre Nachricht wurde erfolgreich übermittelt." + #: templates/dashboard/index.html:3 msgid "Welcome" msgstr "Willkommen" diff --git a/gnuviechadmin/templates/contact_form/base.html b/gnuviechadmin/templates/contact_form/base.html new file mode 100644 index 0000000..94d9808 --- /dev/null +++ b/gnuviechadmin/templates/contact_form/base.html @@ -0,0 +1 @@ +{% extends "base.html" %} diff --git a/gnuviechadmin/templates/contact_form/contact_form.html b/gnuviechadmin/templates/contact_form/contact_form.html new file mode 100644 index 0000000..9416c41 --- /dev/null +++ b/gnuviechadmin/templates/contact_form/contact_form.html @@ -0,0 +1,21 @@ +{% extends "contact_form/base.html" %} +{% load i18n crispy_forms_tags %} + +{% block title %}{{ block.super }} - {% trans "Contact" %}{% endblock title %} +{% block page_title %}{% trans "Contact" %}{% endblock page_title %} + +{% block content %} +{% crispy form %} +{% endblock %} + +{% block extra_js %} + +{% endblock extra_js %} diff --git a/gnuviechadmin/templates/contact_form/contact_form.txt b/gnuviechadmin/templates/contact_form/contact_form.txt new file mode 100644 index 0000000..6adab33 --- /dev/null +++ b/gnuviechadmin/templates/contact_form/contact_form.txt @@ -0,0 +1,5 @@ +User {{ name }} <{{ email }}> from IP address {{ request.META.REMOTE_ADDR }} +sent the following message via the contact form at +{{ site }}{% url 'contact_form' %}: + +{{ body }} diff --git a/gnuviechadmin/templates/contact_form/contact_form_subject.txt b/gnuviechadmin/templates/contact_form/contact_form_subject.txt new file mode 100644 index 0000000..5a0bd59 --- /dev/null +++ b/gnuviechadmin/templates/contact_form/contact_form_subject.txt @@ -0,0 +1 @@ +[{{ site.name }}] message from {{ name }} via contact form diff --git a/gnuviechadmin/templates/contact_form/contact_success.html b/gnuviechadmin/templates/contact_form/contact_success.html new file mode 100644 index 0000000..6539087 --- /dev/null +++ b/gnuviechadmin/templates/contact_form/contact_success.html @@ -0,0 +1,9 @@ +{% extends "contact_form/base.html" %} +{% load i18n %} + +{% block title %}{{ block.super }} - {% trans "Contact" %}{% endblock title %} +{% block page_title %}{% trans "Contact" %}{% endblock page_title %} + +{% block content %} +

{% trans "Your message has been sent successfully." %}

+{% endblock %}