members: add option to request echo from members
parent
91d69cbdef
commit
0a83174148
@ -1,47 +1,13 @@
|
||||
{% extends "general/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>
|
||||
Ludwigsburg Alpin Terminverwaltung
|
||||
</title>
|
||||
<link rel="shortcut icon" href="{% static "ludwigsburgalpin/img/favicon.ico" %}" type="image/x-icon">
|
||||
<link rel="stylesheet" href="{% static "ludwigsburgalpin/base.css" %}">
|
||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
||||
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||
<script>
|
||||
$( function() {
|
||||
$( ".datepicker" ).datepicker({
|
||||
dateFormat: "dd.mm.yy"
|
||||
});
|
||||
} );
|
||||
</script>
|
||||
</head>
|
||||
{% block title %}
|
||||
Ludwigsburg Alpin Terminverwaltung
|
||||
{% endblock %}
|
||||
|
||||
<body>
|
||||
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="http://www.alpenverein-ludwigsburg.de">
|
||||
<img class="navbar-logo" src="{% static "ludwigsburgalpin/img/logo_dav.png" %}">
|
||||
</a>
|
||||
<ul class="navbar">
|
||||
|
||||
<li><a href="/">Jugendgruppen</a></li>
|
||||
<li class="current"><a href="{% url "ludwigsburgalpin:index" %}">Ludwigsburg Alpin</a></li>
|
||||
<li><a href="/kompass">Kompass</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id=content>
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
{% block navbar %}
|
||||
<li><a href="/">Jugendgruppen</a></li>
|
||||
<li class="current"><a href="{% url "ludwigsburgalpin:index" %}">Ludwigsburg Alpin</a></li>
|
||||
<li><a href="/kompass">Kompass</a></li>
|
||||
{% endblock %}
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
{% extends "general/base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
{% block navbar %}
|
||||
<li><a href="/">Jugendgruppen</a></li>
|
||||
<li class="current"><a href="" %}">Mitglied</a></li>
|
||||
{% endblock %}
|
||||
@ -0,0 +1,30 @@
|
||||
{% extends "members/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}
|
||||
{% trans "Echo" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<link rel="stylesheet" href="{% static "ludwigsburgalpin/termine.css" static %}">
|
||||
|
||||
<h1>{% trans "Echo" %}</h1>
|
||||
|
||||
<p>{% trans "Thanks for echoing back. Here is your current data:" %}</p>
|
||||
|
||||
{% if error_message %}
|
||||
<p><b>{{ error_message }}</b></p>
|
||||
{% endif %}
|
||||
|
||||
<form action="" method="post">
|
||||
<table class="termine">
|
||||
{% csrf_token %}
|
||||
{{form}}
|
||||
</table>
|
||||
<input type="hidden" name="key" value="{{ key }}">
|
||||
<p><input type="submit" value="{% trans "submit" %}"/></p>
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
@ -0,0 +1,17 @@
|
||||
{% extends "members/base.html" %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
|
||||
{% block title %}
|
||||
{% trans "Echo failed" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1>{% trans "Echo" %}</h1>
|
||||
|
||||
<p><b>{% trans "Something went wrong. The key you supplied is" %} {{ reason }}.</b></p>
|
||||
|
||||
<p>{% trans "If you think this is a mistake, please" %} <a href="mailto:jugendreferent@jdav-ludwigsburg.de">{% trans "contact us." %}</a></p>
|
||||
|
||||
{% endblock %}
|
||||
@ -0,0 +1,14 @@
|
||||
{% extends "members/base.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}
|
||||
{% trans "Echo successful" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<h1>{% trans "Echo" %}</h1>
|
||||
|
||||
<p>{% trans "Thank you" %} {{name}}. {% trans "Your data was successfully updated." %}</p>
|
||||
|
||||
{% endblock %}
|
||||
@ -0,0 +1,8 @@
|
||||
from django.urls import re_path
|
||||
|
||||
from . import views
|
||||
|
||||
app_name = "mailer"
|
||||
urlpatterns = [
|
||||
re_path(r'^echo', views.echo , name='echo'),
|
||||
]
|
||||
@ -1,3 +1,67 @@
|
||||
from django.shortcuts import render
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.forms import ModelForm, TextInput, DateInput
|
||||
from members.models import Member
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
# Create your views here.
|
||||
|
||||
class MemberForm(ModelForm):
|
||||
class Meta:
|
||||
model = Member
|
||||
fields = ['prename', 'lastname', 'street', 'plz', 'town', 'phone_number',
|
||||
'phone_number_parents', 'birth_date']
|
||||
widgets = {
|
||||
'birth_date': DateInput(format='%d.%m.%Y', attrs={'class': 'datepicker'})
|
||||
}
|
||||
|
||||
|
||||
def render_echo_failed(request, reason=""):
|
||||
context = {}
|
||||
if reason:
|
||||
context['reason'] = reason
|
||||
return render(request, 'members/echo_failed.html', context)
|
||||
|
||||
|
||||
def render_echo(request, key, form):
|
||||
return render(request, 'members/echo.html', {'form': form.as_table(),
|
||||
'key' : key})
|
||||
|
||||
|
||||
def render_echo_success(request, name):
|
||||
return render(request, 'members/echo_success.html', {'name': name})
|
||||
|
||||
|
||||
def echo(request):
|
||||
if request.method == 'GET' and 'key' in request.GET:
|
||||
try:
|
||||
key = request.GET['key']
|
||||
member = Member.objects.get(echo_key=key)
|
||||
if not member.may_echo(key):
|
||||
raise KeyError
|
||||
form = MemberForm(instance=member)
|
||||
return render_echo(request, key, form)
|
||||
except Member.DoesNotExist:
|
||||
return render_echo_failed(request, _("invalid"))
|
||||
except KeyError:
|
||||
return render_echo_failed(request, _("expired"))
|
||||
elif request.method == 'POST':
|
||||
try:
|
||||
key = request.POST['key']
|
||||
member = Member.objects.get(echo_key=key)
|
||||
if not member.may_echo(key):
|
||||
raise KeyError
|
||||
form = MemberForm(request.POST, instance=member)
|
||||
try:
|
||||
form.save()
|
||||
member.echo_key, member.echo_expire = "", timezone.now()
|
||||
member.echoed = True
|
||||
member.save()
|
||||
return render_echo_success(request, member.prename)
|
||||
except ValueError:
|
||||
# when input is invalid
|
||||
form = MemberForm(request.POST)
|
||||
return render_echo(request, key, form)
|
||||
except (Member.DoesNotExist, KeyError):
|
||||
return render_echo_failed(request, _("invalid"))
|
||||
|
||||
|
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 894 B |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@ -0,0 +1,43 @@
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>
|
||||
{% block title %}
|
||||
{% endblock %}
|
||||
</title>
|
||||
<link rel="shortcut icon" href="{% static "general/img/favicon.ico" %}" type="image/x-icon">
|
||||
<link rel="stylesheet" href="{% static "general/base.css" %}">
|
||||
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
|
||||
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
|
||||
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||
<script>
|
||||
$( function() {
|
||||
$( ".datepicker" ).datepicker({
|
||||
dateFormat: "dd.mm.yy"
|
||||
});
|
||||
} );
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand" href="http://www.alpenverein-ludwigsburg.de">
|
||||
<img class="navbar-logo" src="{% static "general/img/logo_dav.png" %}">
|
||||
</a>
|
||||
<ul class="navbar">
|
||||
{% block navbar %}
|
||||
{% endblock %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id=content>
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Loading…
Reference in New Issue