diff --git a/users/forms.py b/users/forms.py index 1d39fad0..33504c99 100644 --- a/users/forms.py +++ b/users/forms.py @@ -24,11 +24,14 @@ from django import forms +from django.forms import ModelForm, Form from django.contrib.auth.forms import ReadOnlyPasswordHashField from django.core.validators import MinLengthValidator +from preferences.models import OptionalUser from django.utils import timezone +from .models import User, ServiceUser, Right, School, ListRight, Whitelist, Ban, Request -from .models import User, ServiceUser, get_admin_right +from .models import get_admin_right class PassForm(forms.Form): passwd1 = forms.CharField(label=u'Nouveau mot de passe', max_length=255, validators=[MinLengthValidator(8)], widget=forms.PasswordInput) @@ -148,3 +151,173 @@ class MassArchiveForm(forms.Form): if date: if date>timezone.now(): raise forms.ValidationError("Impossible d'archiver des utilisateurs dont la fin d'accès se situe dans le futur !") + +class BaseInfoForm(ModelForm): + def __init__(self, *args, **kwargs): + super(BaseInfoForm, self).__init__(*args, **kwargs) + self.fields['name'].label = 'Prénom' + self.fields['surname'].label = 'Nom' + self.fields['school'].label = 'Établissement' + self.fields['comment'].label = 'Commentaire' + self.fields['room'].label = 'Chambre' + self.fields['room'].empty_label = "Pas de chambre" + self.fields['school'].empty_label = "Séléctionner un établissement" + + class Meta: + model = User + fields = [ + 'name', + 'surname', + 'pseudo', + 'email', + 'school', + 'comment', + 'room', + 'telephone', + ] + + def clean_telephone(self): + telephone = self.cleaned_data['telephone'] + preferences, created = OptionalUser.objects.get_or_create() + if not telephone and preferences.is_tel_mandatory: + raise forms.ValidationError("Un numéro de téléphone valide est requis") + return telephone + +class EditInfoForm(BaseInfoForm): + class Meta(BaseInfoForm.Meta): + fields = [ + 'name', + 'surname', + 'pseudo', + 'email', + 'school', + 'comment', + 'room', + 'shell', + 'telephone', + ] + +class InfoForm(EditInfoForm): + force = forms.BooleanField(label="Forcer le déménagement ?", initial=False, required=False) + + def clean_force(self): + if self.cleaned_data.get('force', False): + remove_user_room(self.cleaned_data.get('room')) + return + +class UserForm(InfoForm): + class Meta(InfoForm.Meta): + fields = '__all__' + +class PasswordForm(ModelForm): + class Meta: + model = User + fields = ['password', 'pwd_ntlm'] + +class ServiceUserForm(ModelForm): + password = forms.CharField(label=u'Nouveau mot de passe', max_length=255, validators=[MinLengthValidator(8)], widget=forms.PasswordInput, required=False) + + class Meta: + model = ServiceUser + fields = ('pseudo','access_group') + +class EditServiceUserForm(ServiceUserForm): + class Meta(ServiceUserForm.Meta): + fields = ['access_group','comment'] + +class StateForm(ModelForm): + class Meta: + model = User + fields = ['state'] + + +class SchoolForm(ModelForm): + class Meta: + model = School + fields = ['name'] + + def __init__(self, *args, **kwargs): + super(SchoolForm, self).__init__(*args, **kwargs) + self.fields['name'].label = 'Établissement' + +class ListRightForm(ModelForm): + class Meta: + model = ListRight + fields = ['listright', 'details'] + + def __init__(self, *args, **kwargs): + super(ListRightForm, self).__init__(*args, **kwargs) + self.fields['listright'].label = 'Nom du droit/groupe' + +class NewListRightForm(ListRightForm): + class Meta(ListRightForm.Meta): + fields = '__all__' + + def __init__(self, *args, **kwargs): + super(NewListRightForm, self).__init__(*args, **kwargs) + self.fields['gid'].label = 'Gid, attention, cet attribut ne doit pas être modifié après création' + +class DelListRightForm(ModelForm): + listrights = forms.ModelMultipleChoiceField(queryset=ListRight.objects.all().select_related('user'), label="Droits actuels", widget=forms.CheckboxSelectMultiple) + + class Meta: + exclude = ['listright','gid'] + model = ListRight + +class DelSchoolForm(ModelForm): + schools = forms.ModelMultipleChoiceField(queryset=School.objects.all(), label="Etablissements actuels", widget=forms.CheckboxSelectMultiple) + + class Meta: + exclude = ['name'] + model = School + + +class RightForm(ModelForm): + def __init__(self, *args, **kwargs): + super(RightForm, self).__init__(*args, **kwargs) + self.fields['right'].label = 'Droit' + self.fields['right'].empty_label = "Choisir un nouveau droit" + + class Meta: + model = Right + fields = ['right'] + + +class DelRightForm(ModelForm): + rights = forms.ModelMultipleChoiceField(queryset=Right.objects.all(), label="Droits actuels", widget=forms.CheckboxSelectMultiple) + + class Meta: + model = Right + exclude = ['user', 'right'] + + +class BanForm(ModelForm): + def __init__(self, *args, **kwargs): + super(BanForm, self).__init__(*args, **kwargs) + self.fields['date_end'].label = 'Date de fin' + + class Meta: + model = Ban + exclude = ['user'] + + def clean_date_end(self): + date_end = self.cleaned_data['date_end'] + if date_end < timezone.now(): + raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps") + return date_end + + +class WhitelistForm(ModelForm): + def __init__(self, *args, **kwargs): + super(WhitelistForm, self).__init__(*args, **kwargs) + self.fields['date_end'].label = 'Date de fin' + + class Meta: + model = Whitelist + exclude = ['user'] + + def clean_date_end(self): + date_end = self.cleaned_data['date_end'] + if date_end < timezone.now(): + raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps") + return date_end diff --git a/users/models.py b/users/models.py index 0235ef5b..0caa21ff 100644 --- a/users/models.py +++ b/users/models.py @@ -22,7 +22,6 @@ from django.db import models from django.db.models import Q -from django.forms import ModelForm, Form from django import forms from django.db.models.signals import post_save, post_delete from django.dispatch import receiver @@ -686,172 +685,3 @@ class LdapServiceUserGroup(ldapdb.models.Model): def __str__(self): return self.name -class BaseInfoForm(ModelForm): - def __init__(self, *args, **kwargs): - super(BaseInfoForm, self).__init__(*args, **kwargs) - self.fields['name'].label = 'Prénom' - self.fields['surname'].label = 'Nom' - self.fields['school'].label = 'Établissement' - self.fields['comment'].label = 'Commentaire' - self.fields['room'].label = 'Chambre' - self.fields['room'].empty_label = "Pas de chambre" - self.fields['school'].empty_label = "Séléctionner un établissement" - - class Meta: - model = User - fields = [ - 'name', - 'surname', - 'pseudo', - 'email', - 'school', - 'comment', - 'room', - 'telephone', - ] - - def clean_telephone(self): - telephone = self.cleaned_data['telephone'] - preferences, created = OptionalUser.objects.get_or_create() - if not telephone and preferences.is_tel_mandatory: - raise forms.ValidationError("Un numéro de téléphone valide est requis") - return telephone - -class EditInfoForm(BaseInfoForm): - class Meta(BaseInfoForm.Meta): - fields = [ - 'name', - 'surname', - 'pseudo', - 'email', - 'school', - 'comment', - 'room', - 'shell', - 'telephone', - ] - -class InfoForm(EditInfoForm): - force = forms.BooleanField(label="Forcer le déménagement ?", initial=False, required=False) - - def clean_force(self): - if self.cleaned_data.get('force', False): - remove_user_room(self.cleaned_data.get('room')) - return - -class UserForm(InfoForm): - class Meta(InfoForm.Meta): - fields = '__all__' - -class PasswordForm(ModelForm): - class Meta: - model = User - fields = ['password', 'pwd_ntlm'] - -class ServiceUserForm(ModelForm): - password = forms.CharField(label=u'Nouveau mot de passe', max_length=255, validators=[MinLengthValidator(8)], widget=forms.PasswordInput, required=False) - - class Meta: - model = ServiceUser - fields = ('pseudo','access_group') - -class EditServiceUserForm(ServiceUserForm): - class Meta(ServiceUserForm.Meta): - fields = ['access_group','comment'] - -class StateForm(ModelForm): - class Meta: - model = User - fields = ['state'] - - -class SchoolForm(ModelForm): - class Meta: - model = School - fields = ['name'] - - def __init__(self, *args, **kwargs): - super(SchoolForm, self).__init__(*args, **kwargs) - self.fields['name'].label = 'Établissement' - -class ListRightForm(ModelForm): - class Meta: - model = ListRight - fields = ['listright', 'details'] - - def __init__(self, *args, **kwargs): - super(ListRightForm, self).__init__(*args, **kwargs) - self.fields['listright'].label = 'Nom du droit/groupe' - -class NewListRightForm(ListRightForm): - class Meta(ListRightForm.Meta): - fields = '__all__' - - def __init__(self, *args, **kwargs): - super(NewListRightForm, self).__init__(*args, **kwargs) - self.fields['gid'].label = 'Gid, attention, cet attribut ne doit pas être modifié après création' - -class DelListRightForm(ModelForm): - listrights = forms.ModelMultipleChoiceField(queryset=ListRight.objects.all().select_related('user'), label="Droits actuels", widget=forms.CheckboxSelectMultiple) - - class Meta: - exclude = ['listright','gid'] - model = ListRight - -class DelSchoolForm(ModelForm): - schools = forms.ModelMultipleChoiceField(queryset=School.objects.all(), label="Etablissements actuels", widget=forms.CheckboxSelectMultiple) - - class Meta: - exclude = ['name'] - model = School - - -class RightForm(ModelForm): - def __init__(self, *args, **kwargs): - super(RightForm, self).__init__(*args, **kwargs) - self.fields['right'].label = 'Droit' - self.fields['right'].empty_label = "Choisir un nouveau droit" - - class Meta: - model = Right - fields = ['right'] - - -class DelRightForm(ModelForm): - rights = forms.ModelMultipleChoiceField(queryset=Right.objects.all(), label="Droits actuels", widget=forms.CheckboxSelectMultiple) - - class Meta: - model = Right - exclude = ['user', 'right'] - - -class BanForm(ModelForm): - def __init__(self, *args, **kwargs): - super(BanForm, self).__init__(*args, **kwargs) - self.fields['date_end'].label = 'Date de fin' - - class Meta: - model = Ban - exclude = ['user'] - - def clean_date_end(self): - date_end = self.cleaned_data['date_end'] - if date_end < timezone.now(): - raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps") - return date_end - - -class WhitelistForm(ModelForm): - def __init__(self, *args, **kwargs): - super(WhitelistForm, self).__init__(*args, **kwargs) - self.fields['date_end'].label = 'Date de fin' - - class Meta: - model = Whitelist - exclude = ['user'] - - def clean_date_end(self): - date_end = self.cleaned_data['date_end'] - if date_end < timezone.now(): - raise forms.ValidationError("Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps") - return date_end diff --git a/users/views.py b/users/views.py index a5e22f65..18f2241f 100644 --- a/users/views.py +++ b/users/views.py @@ -39,8 +39,8 @@ from django.db import transaction from reversion.models import Version from reversion import revisions as reversion from users.models import User, Right, Ban, Whitelist, School, ListRight, Request, ServiceUser -from users.models import DelRightForm, BanForm, WhitelistForm, DelSchoolForm, DelListRightForm, NewListRightForm -from users.models import EditInfoForm, InfoForm, BaseInfoForm, StateForm, RightForm, SchoolForm, EditServiceUserForm, ServiceUserForm, ListRightForm +from users.forms import DelRightForm, BanForm, WhitelistForm, DelSchoolForm, DelListRightForm, NewListRightForm +from users.forms import EditInfoForm, InfoForm, BaseInfoForm, StateForm, RightForm, SchoolForm, EditServiceUserForm, ServiceUserForm, ListRightForm from cotisations.models import Facture from machines.models import Machine, Interface from users.forms import MassArchiveForm, PassForm, ResetPasswordForm @@ -85,7 +85,7 @@ def password_change_action(u_form, user, request, req=False): def reset_passwd_mail(req, request): """ Prend en argument un request, envoie un mail de réinitialisation de mot de pass """ t = loader.get_template('users/email_passwd_request') - c = Context({ + c = { 'name': str(req.user.name) + ' ' + str(req.user.surname), 'asso': ASSO_NAME, 'asso_mail': ASSO_EMAIL, @@ -93,7 +93,7 @@ def reset_passwd_mail(req, request): 'url': request.build_absolute_uri( reverse('users:process', kwargs={'token': req.token})), 'expire_in': REQ_EXPIRE_STR, - }) + } send_mail('Changement de mot de passe', t.render(c), EMAIL_FROM, [req.user.email], fail_silently=False) return