From 9722dd68c524e3a11fdd8b7cccd94633c8da9bd2 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Mon, 3 Oct 2022 15:10:43 +0200 Subject: [PATCH] members: add registration pages --- jdav_web/members/models.py | 9 ++++ .../members/templates/members/register.html | 30 +++++++++++ .../templates/members/register_password.html | 24 +++++++++ .../templates/members/register_success.html | 15 ++++++ .../members/register_wrong_password.html | 15 ++++++ jdav_web/members/views.py | 51 +++++++++++++++++++ 6 files changed, 144 insertions(+) create mode 100644 jdav_web/members/templates/members/register.html create mode 100644 jdav_web/members/templates/members/register_password.html create mode 100644 jdav_web/members/templates/members/register_success.html create mode 100644 jdav_web/members/templates/members/register_wrong_password.html diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 54099d7..15bd508 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -405,6 +405,15 @@ class KlettertreffAttendee(models.Model): verbose_name_plural = _('Members') +class RegistrationPassword(models.Model): + group = models.ForeignKey(Group, on_delete=models.CASCADE) + password = models.CharField(_('Password'), default='', max_length=20, unique=True) + + class Meta: + verbose_name = _('registration password') + verbose_name_plural = _('registration passwords') + + def annotate_activity_score(queryset): one_year_ago = datetime.now() - timedelta(days=365) queryset = queryset.annotate( diff --git a/jdav_web/members/templates/members/register.html b/jdav_web/members/templates/members/register.html new file mode 100644 index 0000000..dfe6b03 --- /dev/null +++ b/jdav_web/members/templates/members/register.html @@ -0,0 +1,30 @@ +{% extends "members/base.html" %} +{% load i18n %} +{% load static %} + +{% block title %} +{% trans "Registration" %} +{% endblock %} + +{% block content %} + + + +

{% trans "Register" %}

+ +

{% trans "Here you can register for group" %} {{groupname}}.

+ +{% if error_message %} +

{{ error_message }}

+{% endif %} + +
+ + {% csrf_token %} + {{form}} +
+ +

+
+ +{% endblock %} diff --git a/jdav_web/members/templates/members/register_password.html b/jdav_web/members/templates/members/register_password.html new file mode 100644 index 0000000..c3413f4 --- /dev/null +++ b/jdav_web/members/templates/members/register_password.html @@ -0,0 +1,24 @@ +{% extends "members/base.html" %} +{% load i18n %} +{% load static %} + +{% block title %} +{% trans "Registration" %} +{% endblock %} + +{% block content %} + +

{% trans "Register" %}

+ +

{% trans "Thanks for your interest in participating. Please enter the registration password, your youth leader gave you." %}

+ +{% if error_message %} +

{{ error_message }}

+{% endif %} + +
+ +

+
+ +{% endblock %} diff --git a/jdav_web/members/templates/members/register_success.html b/jdav_web/members/templates/members/register_success.html new file mode 100644 index 0000000..3e35c47 --- /dev/null +++ b/jdav_web/members/templates/members/register_success.html @@ -0,0 +1,15 @@ +{% extends "members/base.html" %} +{% load i18n %} +{% load static %} + +{% block title %} +{% trans "Registration" %} +{% endblock %} + +{% block content %} + +

{% trans "Register" %}

+ +

{% trans "Your registration succeeded. Please remember to confirm your email address. The coordinating team will process your registration when your email address is confirmed." %}

+ +{% endblock %} diff --git a/jdav_web/members/templates/members/register_wrong_password.html b/jdav_web/members/templates/members/register_wrong_password.html new file mode 100644 index 0000000..3030149 --- /dev/null +++ b/jdav_web/members/templates/members/register_wrong_password.html @@ -0,0 +1,15 @@ +{% extends "members/base.html" %} +{% load i18n %} +{% load static %} + +{% block title %} +{% trans "Registration" %} +{% endblock %} + +{% block content %} + +

{% trans "Register" %}

+ +

{% trans "You entered a wrong password to often. Please ask your youth leader again." %}

+ +{% endblock %} diff --git a/jdav_web/members/views.py b/jdav_web/members/views.py index eb30521..34e9d1f 100644 --- a/jdav_web/members/views.py +++ b/jdav_web/members/views.py @@ -16,6 +16,10 @@ class MemberForm(ModelForm): 'birth_date': DateInput(format='%d.%m.%Y', attrs={'class': 'datepicker'}) } +class MemberFormWithEmail(MemberForm): + class Meta: + fields = ['prename', 'lastname', 'street', 'plz', 'town', 'phone_number', + 'phone_number_parents', 'birth_date', 'email', 'email_parents', 'cc_email_parents'] def render_echo_failed(request, reason=""): context = {} @@ -65,3 +69,50 @@ def echo(request): return render_echo(request, key, form) except (Member.DoesNotExist, KeyError): return render_echo_failed(request, _("invalid")) + + +def render_register_password(request): + return render(request, 'members/register_password.html') + + +def render_register_wrong_password(request): + return render(request, + 'members/register_password.html', + {'error_message': _("The entered password is wrong.")) + + +def render_register_success(request, groupname, membername): + return render(request, + 'members/register_success.html', + {'groupname': groupname, + 'membername': membername}) + + +def render_register(request, groupname, pwd, form=None): + if form is None: + form = MemberFormWithEmail(request.POST) + return render(request, + 'members/register.html', + {'form': form, 'password': pwd, 'groupname': groupname}) + + +def register(request): + if request.method == 'GET' or not "password" in request.POST: + # show password + return render_register_password(request) + # confirm password + try: + pwd = RegistrationPassword.objects.get(password=request.POST['password']) + except Member.DoesNotExist: + return render_register_wrong_password(request) + if "save" in request.POST: + # process registration + form = MemberFormWithEmail(request.POST) + try: + form.save() + return render_register_success(request, pwd.group.name, form.prename) + except ValueError: + # when input is invalid + return render_register(request, pwd, form) + # we are not saving yet + return render_register(request, pwd, form=None)