members: add option to request echo from members
parent
91d69cbdef
commit
0a83174148
@ -1,47 +1,13 @@
|
|||||||
|
{% extends "general/base.html" %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load static %}
|
{% load static %}
|
||||||
<html>
|
|
||||||
|
|
||||||
<head>
|
{% block title %}
|
||||||
<title>
|
Ludwigsburg Alpin Terminverwaltung
|
||||||
Ludwigsburg Alpin Terminverwaltung
|
{% endblock %}
|
||||||
</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>
|
|
||||||
|
|
||||||
<body>
|
{% block navbar %}
|
||||||
|
<li><a href="/">Jugendgruppen</a></li>
|
||||||
<div class="navbar-header">
|
<li class="current"><a href="{% url "ludwigsburgalpin:index" %}">Ludwigsburg Alpin</a></li>
|
||||||
<a class="navbar-brand" href="http://www.alpenverein-ludwigsburg.de">
|
<li><a href="/kompass">Kompass</a></li>
|
||||||
<img class="navbar-logo" src="{% static "ludwigsburgalpin/img/logo_dav.png" %}">
|
{% endblock %}
|
||||||
</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>
|
|
||||||
|
|||||||
@ -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.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