From 10a4faa2e0f0029de45084f3eadaf731620b06ce Mon Sep 17 00:00:00 2001 From: Tom Irgang Date: Sun, 18 Jun 2023 09:01:14 +0200 Subject: [PATCH] member settings --- rc_hip/repapp/forms.py | 11 ++++++ .../0010_customuser_notifications.py | 18 ++++++++++ rc_hip/repapp/models.py | 2 ++ .../repapp/member/member_settings.html | 17 +++++++++ rc_hip/repapp/urls.py | 2 ++ rc_hip/repapp/views.py | 35 ++++++++++++++++++- 6 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 rc_hip/repapp/migrations/0010_customuser_notifications.py create mode 100644 rc_hip/repapp/templates/repapp/member/member_settings.html diff --git a/rc_hip/repapp/forms.py b/rc_hip/repapp/forms.py index ec58ed3..64fce9b 100644 --- a/rc_hip/repapp/forms.py +++ b/rc_hip/repapp/forms.py @@ -129,3 +129,14 @@ class UpdateDeviceForm(forms.ModelForm): fields = ['question'] question = forms.CharField(widget=CKEditorWidget( attrs={'style': 'width:100%;'}), label="Frage") + + +class MemberSettings(forms.Form): + """ + Form for editing member settings. + """ + notifications = forms.BooleanField( + label="Benachrichtigungen", + help_text="Kreuzen Sie diese Kästchen an wenn sie Benachrichtigungen erhalten möchten.", + required=False + ) diff --git a/rc_hip/repapp/migrations/0010_customuser_notifications.py b/rc_hip/repapp/migrations/0010_customuser_notifications.py new file mode 100644 index 0000000..d57489b --- /dev/null +++ b/rc_hip/repapp/migrations/0010_customuser_notifications.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2 on 2023-06-05 16:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('repapp', '0009_question_answered'), + ] + + operations = [ + migrations.AddField( + model_name='customuser', + name='notifications', + field=models.BooleanField(default=True, verbose_name='Benachrichtigungen'), + ), + ] diff --git a/rc_hip/repapp/models.py b/rc_hip/repapp/models.py index 327bd13..874c1f7 100644 --- a/rc_hip/repapp/models.py +++ b/rc_hip/repapp/models.py @@ -19,6 +19,8 @@ class CustomUser(AbstractUser): Custom user object with unique email. """ email = models.EmailField(unique=True, verbose_name=_("eMail Adresse")) + notifications = models.BooleanField( + verbose_name=_("Benachrichtigungen"), default=True) class Meta: verbose_name = _('Benutzer') diff --git a/rc_hip/repapp/templates/repapp/member/member_settings.html b/rc_hip/repapp/templates/repapp/member/member_settings.html new file mode 100644 index 0000000..50aece6 --- /dev/null +++ b/rc_hip/repapp/templates/repapp/member/member_settings.html @@ -0,0 +1,17 @@ +{% extends "repapp/base.html" %} +{% load crispy_forms_tags %} +{% block title %} + - Eintellungen +{% endblock title %} +{% block page_title %} + Eintellungen +{% endblock page_title %} +{% block content %} +
+ {% csrf_token %} + {{ form|crispy }} + +
+{% endblock content %} diff --git a/rc_hip/repapp/urls.py b/rc_hip/repapp/urls.py index 85c8219..3a89fa5 100644 --- a/rc_hip/repapp/urls.py +++ b/rc_hip/repapp/urls.py @@ -25,6 +25,8 @@ urlpatterns = [ path("onetimelogin//", views.one_time_login, name="one_time_login"), path("member/", views.member, name="member"), + path("member/settings/", views.MemberSettingsFormView.as_view(), + name="member_settings"), path("logout/", views.user_logout, name="logout"), path("orga/select/", views.select_role, name="select_role"), path("orga/", views.orga, name="orga"), diff --git a/rc_hip/repapp/views.py b/rc_hip/repapp/views.py index 4b76842..0a5de59 100644 --- a/rc_hip/repapp/views.py +++ b/rc_hip/repapp/views.py @@ -22,7 +22,7 @@ from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth import authenticate, login, logout from django.utils.timezone import now -from .forms import RegisterDevice, RegisterGuest, Mail, UpdateDeviceForm +from .forms import RegisterDevice, RegisterGuest, Mail, UpdateDeviceForm, MemberSettings from .models import (Cafe, Device, Guest, OneTimeLogin, Question, CustomUser, Organisator, Reparateur) from . import mail_interface @@ -937,3 +937,36 @@ def user_logout(request): """ logout(request) return HttpResponseRedirect(reverse_lazy('index')) + + +class MemberSettingsFormView(LoginRequiredMixin, UserPassesTestMixin, generic.edit.FormView): + """ + MemberSettingsFormView shows the member settings. + """ + template_name = "repapp/member/member_settings.html" + form_class = MemberSettings + + def form_valid(self, form): + user = self.request.user + if not is_member(user): + raise PermissionDenied('Not a member!') + user = get_object_or_404(CustomUser, email=user.email) + user.notifications = form.cleaned_data['notifications'] + user.save() + + return HttpResponseRedirect(reverse_lazy('member_settings')) + + def get_initial(self): + initial = super(MemberSettingsFormView, self).get_initial() + initial['notifications'] = self.request.user.notifications + return initial + + def get_context_data(self, **kwargs): + context = super(MemberSettingsFormView, self).get_context_data( + **kwargs + ) + context["user"] = self.request.user + return context + + def test_func(self): + return is_member(self.request.user)