mybuddy/babybuddy/forms.py

106 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
from django import forms
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import PasswordChangeForm, UserCreationForm
from django.contrib.auth.models import Group
from django.utils.translation import gettext_lazy as _
from core.widgets import TimeInput
from .models import Settings, SiteSettings
class SiteSettingsForm(forms.ModelForm):
class Meta:
model = SiteSettings
fields = [
"nap_start_min",
"nap_start_max",
]
widgets = {
"nap_start_min": TimeInput(),
"nap_start_max": TimeInput(),
}
class BabyBuddyUserForm(forms.ModelForm):
is_read_only = forms.BooleanField(
required=False,
label=_("Read only"),
help_text=_("Restricts user to viewing data only."),
)
class Meta:
model = get_user_model()
fields = [
"username",
"first_name",
"last_name",
"email",
"is_staff",
"is_read_only",
"is_active",
]
def __init__(self, *args, **kwargs):
user = kwargs["instance"]
if user:
kwargs["initial"].update(
{
"is_read_only": user.groups.filter(
name=settings.BABY_BUDDY["READ_ONLY_GROUP_NAME"]
).exists()
}
)
super(BabyBuddyUserForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
user = super(BabyBuddyUserForm, self).save(commit=False)
is_read_only = self.cleaned_data["is_read_only"]
if is_read_only:
user.is_superuser = False
else:
user.is_superuser = True
if commit:
user.save()
readonly_group = Group.objects.get(
name=settings.BABY_BUDDY["READ_ONLY_GROUP_NAME"]
)
if is_read_only:
user.groups.add(readonly_group.id)
else:
user.groups.remove(readonly_group.id)
return user
class UserAddForm(BabyBuddyUserForm, UserCreationForm):
pass
class UserUpdateForm(BabyBuddyUserForm):
pass
class UserForm(forms.ModelForm):
class Meta:
model = get_user_model()
fields = ["first_name", "last_name", "email"]
class UserPasswordForm(PasswordChangeForm):
class Meta:
fields = ["old_password", "new_password1", "new_password2"]
class UserSettingsForm(forms.ModelForm):
class Meta:
model = Settings
fields = [
"dashboard_refresh_rate",
"dashboard_hide_empty",
"dashboard_hide_age",
"language",
"timezone",
]