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
This commit is contained in:
parent
2b0f1f9f89
commit
385838580b
15 changed files with 256 additions and 4 deletions
|
@ -1,6 +1,7 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
* :feature:`-` add contact form
|
||||||
* :feature:`-` add imprint as flatpage
|
* :feature:`-` add imprint as flatpage
|
||||||
* :support:`-` mark active menu item as active via context_processor and
|
* :support:`-` mark active menu item as active via context_processor and
|
||||||
corresponding template markup
|
corresponding template markup
|
||||||
|
|
|
@ -36,6 +36,7 @@ Django app code
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
|
||||||
code/gnuviechadmin
|
code/gnuviechadmin
|
||||||
|
code/contact_form
|
||||||
code/dashboard
|
code/dashboard
|
||||||
code/domains
|
code/domains
|
||||||
code/hostingpackages
|
code/hostingpackages
|
||||||
|
|
24
docs/code/contact_form.rst
Normal file
24
docs/code/contact_form.rst
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
:py:mod:`contact_form` app
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. automodule:: contact_form
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`forms <contact_form.forms>`
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: contact_form.forms
|
||||||
|
:members:
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`urls <contact_form.urls>`
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
.. automodule:: contact_form.urls
|
||||||
|
|
||||||
|
|
||||||
|
:py:mod:`views <contact_form.views>`
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
.. automodule:: contact_form.views
|
||||||
|
:members:
|
|
@ -1,5 +1,5 @@
|
||||||
[run]
|
[run]
|
||||||
source = gnuviechadmin,managemails,osusers,domains,taskresults,gvawebcore,userdbs
|
source = gnuviechadmin,contact_form,dashboard,domains,gvawebcore,managemails,osusers,taskresults,userdbs
|
||||||
|
|
||||||
[report]
|
[report]
|
||||||
omit = */migrations/*,*/tests/*.py,*/tests.py,gnuviechadmin/settings/local.py,gnuviechadmin/settings/production.py
|
omit = */migrations/*,*/tests/*.py,*/tests.py,gnuviechadmin/settings/local.py,gnuviechadmin/settings/production.py
|
||||||
|
|
4
gnuviechadmin/contact_form/__init__.py
Normal file
4
gnuviechadmin/contact_form/__init__.py
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
"""
|
||||||
|
Contact form app.
|
||||||
|
|
||||||
|
"""
|
73
gnuviechadmin/contact_form/forms.py
Normal file
73
gnuviechadmin/contact_form/forms.py
Normal file
|
@ -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()
|
||||||
|
)
|
36
gnuviechadmin/contact_form/locale/de/LC_MESSAGES/django.po
Normal file
36
gnuviechadmin/contact_form/locale/de/LC_MESSAGES/django.po
Normal file
|
@ -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 <EMAIL@ADDRESS>, 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 <jan@dittberner.info>\n"
|
||||||
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\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"
|
19
gnuviechadmin/contact_form/urls.py
Normal file
19
gnuviechadmin/contact_form/urls.py
Normal file
|
@ -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'),
|
||||||
|
)
|
50
gnuviechadmin/contact_form/views.py
Normal file
50
gnuviechadmin/contact_form/views.py
Normal file
|
@ -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'
|
|
@ -7,8 +7,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: gnuviechadmin\n"
|
"Project-Id-Version: gnuviechadmin\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-02-01 16:31+0100\n"
|
"POT-Creation-Date: 2015-02-01 19:04+0100\n"
|
||||||
"PO-Revision-Date: 2015-02-01 16:31+0100\n"
|
"PO-Revision-Date: 2015-02-01 19:04+0100\n"
|
||||||
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
"Last-Translator: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
"Language-Team: Jan Dittberner <jan@dittberner.info>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
|
@ -477,7 +477,10 @@ msgstr "phpPgAdmin"
|
||||||
msgid "Imprint"
|
msgid "Imprint"
|
||||||
msgstr "Impressum"
|
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"
|
msgid "Contact"
|
||||||
msgstr "Kontakt"
|
msgstr "Kontakt"
|
||||||
|
|
||||||
|
@ -514,6 +517,10 @@ msgstr ""
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr "Schließen"
|
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
|
#: templates/dashboard/index.html:3
|
||||||
msgid "Welcome"
|
msgid "Welcome"
|
||||||
msgstr "Willkommen"
|
msgstr "Willkommen"
|
||||||
|
|
1
gnuviechadmin/templates/contact_form/base.html
Normal file
1
gnuviechadmin/templates/contact_form/base.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{% extends "base.html" %}
|
21
gnuviechadmin/templates/contact_form/contact_form.html
Normal file
21
gnuviechadmin/templates/contact_form/contact_form.html
Normal file
|
@ -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 %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
if ($('input[type=text]').first().val() != '') {
|
||||||
|
$('textarea').first().focus();
|
||||||
|
} else {
|
||||||
|
$('input[type=text]').first().focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
{% endblock extra_js %}
|
5
gnuviechadmin/templates/contact_form/contact_form.txt
Normal file
5
gnuviechadmin/templates/contact_form/contact_form.txt
Normal file
|
@ -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 }}
|
|
@ -0,0 +1 @@
|
||||||
|
[{{ site.name }}] message from {{ name }} via contact form
|
|
@ -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 %}
|
||||||
|
<p class="text-success">{% trans "Your message has been sent successfully." %}</p>
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue