web/ldt/user/forms.py
author ymh <ymh.work@gmail.com>
Tue, 08 Jun 2010 15:10:46 +0200
changeset 3 651f67b66c51
parent 0 ecdfc63274bf
permissions -rw-r--r--
upgrade lucene
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
from django import forms
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from django.contrib.auth.models import User, Permission, Group
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
from django.forms.util import ErrorList
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from django.contrib.auth.forms import UserCreationForm
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from django.utils.translation import gettext as _
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
from models import ldt, IriGroup
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from ldt.management import get_content_type_list
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
class ldtForm(UserCreationForm):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
    class Meta:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
        model = ldt
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
                 initial=None, error_class=ErrorList, label_suffix=':',
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
                 empty_permitted=False, instance=None):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
                 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        if instance:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
            initial = initial or {}           
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        super(ldtForm, self).__init__(data, files, auto_id, prefix, 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
            initial, error_class, label_suffix, empty_permitted, instance)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
            
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        # filtre les permissions necessaires
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        content_type_list = get_content_type_list()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        self.fields['user_permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        if instance:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
            self.fields['password1'].required = False
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
            self.fields['password1'].label = _('New password')
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
            self.fields['password2'].required = False
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
            self.fields['password2'].label = _('New password confirmation')
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        self._password_change = True
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    def clean_username(self):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
        if self.instance:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
            return self.cleaned_data['username']
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        return super(ldtForm, self).clean_username()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
    
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
    def clean_password2(self): 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        if self.instance and self.cleaned_data['password1'] == '' and self.cleaned_data['password2'] == '':
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
            self._password_change = False
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
            return u''
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        return super(ldtForm, self).clean_password2()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
   
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    def save(self, commit=True):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        Super = self._password_change and ldtForm  or UserCreationForm  
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        user = super(Super, self).save(commit=False)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        # if user.pk != None:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
            # self.save_m2m()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        if commit:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
            user.save()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        return user
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
class IriGroupForm(forms.ModelForm):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    class meta:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        model = IriGroup
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
                 initial=None, error_class=ErrorList, label_suffix=':',
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
                 empty_permitted=False, instance=None):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        if instance:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            initial = initial or {}                               
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
        super(IriGroupForm, self).__init__(data, files, auto_id, prefix, 
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
            initial, error_class, label_suffix, empty_permitted, instance)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
            
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        # filtre les permissions necessaires
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        content_type_list = get_content_type_list()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        self.fields['permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
class EmailChangeForm(forms.Form):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    email1 = forms.EmailField(label=_("E-mail"), max_length=75)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    email2 = forms.EmailField(label=_("E-mail"), max_length=75)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    def __init__(self, user=None, *args, **kwargs):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        self.user = user
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        super(EmailChangeForm, self).__init__(*args, **kwargs)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    def clean_email2(self):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
        email1 = self.cleaned_data.get('email1')
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        email2 = self.cleaned_data.get('email2')
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        if email1 and email2:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
            if email1 != email2:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
                raise forms.ValidationError(_("The two emails didn't match."))
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
        return email2
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    def save(self):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        self.user.email=self.cleaned_data['email1']
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        self.user.save()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        return self.user
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98