member settings

This commit is contained in:
Tom Irgang 2023-06-18 09:01:14 +02:00
parent ab0fb93409
commit 10a4faa2e0
6 changed files with 84 additions and 1 deletions

View file

@ -129,3 +129,14 @@ class UpdateDeviceForm(forms.ModelForm):
fields = ['question'] fields = ['question']
question = forms.CharField(widget=CKEditorWidget( question = forms.CharField(widget=CKEditorWidget(
attrs={'style': 'width:100%;'}), label="Frage") 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
)

View file

@ -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'),
),
]

View file

@ -19,6 +19,8 @@ class CustomUser(AbstractUser):
Custom user object with unique email. Custom user object with unique email.
""" """
email = models.EmailField(unique=True, verbose_name=_("eMail Adresse")) email = models.EmailField(unique=True, verbose_name=_("eMail Adresse"))
notifications = models.BooleanField(
verbose_name=_("Benachrichtigungen"), default=True)
class Meta: class Meta:
verbose_name = _('Benutzer') verbose_name = _('Benutzer')

View file

@ -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 %}
<form action="{% url 'member_settings' %}"
method="post"
enctype="multipart/form-data">
{% csrf_token %}
{{ form|crispy }}
<button type="submit" class="btn btn-primary submit_button">Aktualisieren</button>
</form>
{% endblock content %}

View file

@ -25,6 +25,8 @@ urlpatterns = [
path("onetimelogin/<str:secret>/", path("onetimelogin/<str:secret>/",
views.one_time_login, name="one_time_login"), views.one_time_login, name="one_time_login"),
path("member/", views.member, name="member"), path("member/", views.member, name="member"),
path("member/settings/", views.MemberSettingsFormView.as_view(),
name="member_settings"),
path("logout/", views.user_logout, name="logout"), path("logout/", views.user_logout, name="logout"),
path("orga/select/", views.select_role, name="select_role"), path("orga/select/", views.select_role, name="select_role"),
path("orga/", views.orga, name="orga"), path("orga/", views.orga, name="orga"),

View file

@ -22,7 +22,7 @@ from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.contrib.auth import authenticate, login, logout from django.contrib.auth import authenticate, login, logout
from django.utils.timezone import now 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, from .models import (Cafe, Device, Guest, OneTimeLogin, Question,
CustomUser, Organisator, Reparateur) CustomUser, Organisator, Reparateur)
from . import mail_interface from . import mail_interface
@ -937,3 +937,36 @@ def user_logout(request):
""" """
logout(request) logout(request)
return HttpResponseRedirect(reverse_lazy('index')) 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)