From 2b82235e877ffbecf32a3ab573e23b88e5e0b580 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 17 Nov 2024 16:14:49 +0100 Subject: [PATCH] members/registration: client side verification of file size and format --- .../members/locale/de/LC_MESSAGES/django.po | 27 +++++++++++-------- .../templates/members/member_form.html | 9 +++++++ jdav_web/members/views.py | 5 ++-- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index 0bad1df..ba1099a 100644 --- a/jdav_web/members/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/members/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-11-17 14:58+0100\n" +"POT-Creation-Date: 2024-11-17 16:11+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -928,6 +928,10 @@ msgstr "" "Ich bin einverstanden, dass meine Daten auf dem Server der JDAV %(sektion)s " "gespeichert und verarbeitet werden." +#: members/templates/members/member_form.html:101 +msgid "This file is bigger than the maximal allowed file size of 5 MiB." +msgstr "Diese Datei ist größer als die maximal erlaubte Dateigröße von 5 MiB." + #: members/templates/members/register.html:13 #: members/templates/members/register_password.html:11 #: members/templates/members/register_success.html:11 @@ -1045,39 +1049,40 @@ msgstr "" "Danke %(prename)s für dein Interesse auf der Warteliste zu bleiben.\n" "Dein Platz wurde bestätigt." -#: members/views.py:35 members/views.py:58 +#: members/views.py:36 members/views.py:59 msgid "Prename of the member." msgstr "Vorname des Teilnehmenden" -#: members/views.py:36 members/views.py:59 +#: members/views.py:37 members/views.py:60 msgid "Lastname of the member." msgstr "Nachname des Teilnehmenden" -#: members/views.py:37 +#: members/views.py:38 msgid "phone number of child or parent" msgstr "Telefonnummer des Teilnehmenden oder einer Kontaktperson" -#: members/views.py:38 +#: members/views.py:39 msgid "email of child if available, otherwise parental email address" -msgstr "Falls verfügbar, E-Mailadresse des Teilnehmenden, sonst einer Kontaktperson" +msgstr "" +"Falls verfügbar, E-Mailadresse des Teilnehmenden, sonst einer Kontaktperson" -#: members/views.py:39 +#: members/views.py:40 msgid "optional additional email address" msgstr "Optionale zusätzliche E-Mailadresse" -#: members/views.py:96 members/views.py:176 +#: members/views.py:97 members/views.py:177 msgid "The entered password is wrong." msgstr "Das eingegebene Passwort ist falsch." -#: members/views.py:130 members/views.py:138 members/views.py:333 +#: members/views.py:131 members/views.py:139 members/views.py:334 msgid "invalid" msgstr "ungültig" -#: members/views.py:141 members/views.py:335 +#: members/views.py:142 members/views.py:336 msgid "expired" msgstr "abgelaufen" -#: members/views.py:150 +#: members/views.py:151 msgid "Invalid emergency contacts" msgstr "Ungültige Notfallkontakte" diff --git a/jdav_web/members/templates/members/member_form.html b/jdav_web/members/templates/members/member_form.html index e0aabbd..f0664d3 100644 --- a/jdav_web/members/templates/members/member_form.html +++ b/jdav_web/members/templates/members/member_form.html @@ -94,4 +94,13 @@ const totalFormsInput = document.getElementById('id_emergencycontact_set-TOTAL_FORMS'); totalFormsInput.value = parseInt(form_count); }); + + const uploadField = document.getElementById("id_registration_form"); + uploadField.onchange = function() { + if(this.files[0].size > 5 * 1024 * 1024) { + alert('{% trans "This file is bigger than the maximal allowed file size of 5 MiB." %}'); + this.value = ""; + } + }; + diff --git a/jdav_web/members/views.py b/jdav_web/members/views.py index 0a3861a..2ee223c 100644 --- a/jdav_web/members/views.py +++ b/jdav_web/members/views.py @@ -2,7 +2,7 @@ from startpage.views import render from django.utils.translation import gettext_lazy as _ from django.http import HttpResponseRedirect from django.forms import ModelForm, TextInput, DateInput, BaseInlineFormSet,\ - inlineformset_factory, HiddenInput + inlineformset_factory, HiddenInput, FileInput from members.models import Member, RegistrationPassword, MemberUnconfirmedProxy, MemberWaitingList, Group,\ confirm_mail_by_key, EmergencyContact from django.urls import reverse @@ -29,7 +29,8 @@ class MemberRegistrationForm(ModelForm): 'phone_number', 'birth_date', 'gender', 'email', 'alternative_email', 'registration_form'] widgets = { - 'birth_date': DateInput(format='%d.%m.%Y', attrs={'type': 'date'}) + 'birth_date': DateInput(format='%d.%m.%Y', attrs={'type': 'date'}), + 'registration_form': FileInput(attrs={'accept': 'application/pdf,image/jpeg,image/png'}), } help_texts = { 'prename': _('Prename of the member.'),