Revision 3bf924ec astakos/im/forms.py

b/astakos/im/forms.py
40 40
from astakos.im.models import AstakosUser
41 41
from astakos.im.util import get_or_create_user
42 42

  
43
import logging
44

  
43 45
class UniqueUserEmailField(forms.EmailField):
44 46
    """
45 47
    An EmailField which only is valid if no User has that email.
......
84 86
        """
85 87
        Normal cleanup + username generation.
86 88
        """
87
        cleaned_data = super(UserCreationForm, self).clean(*args, **kwargs)
89
        cleaned_data = super(ExtendedUserCreationForm, self).clean(*args, **kwargs)
88 90
        if cleaned_data.has_key('email'):
89 91
            cleaned_data['username'] = cleaned_data['email']
90 92
        return cleaned_data
......
94 96
        Saves the email, first_name and last_name properties, after the normal
95 97
        save behavior is complete.
96 98
        """
97
        user = super(UserCreationForm, self).save(commit)
99
        user = super(ExtendedUserCreationForm, self).save(commit=False)
100
        user.renew_token()
101
        user.save()
102
        logging.info('Created user %s', user)
98 103
        return user
99 104

  
100
class InvitedExtendedUserCreationForm(ExtendedUserCreationForm):
105
class InvitedExtendedUserCreationForm(UserCreationForm):
101 106
    """
102
    Subclass of ``RegistrationForm`` for registring a invited user. Adds a
103
    readonly field for inviter's name. The email is also readonly since
104
    it will be the invitation username.
107
    Extends the built in UserCreationForm in several ways:
108
    
109
    * Adds an email field, which uses the custom UniqueUserEmailField.
110
    * The username field isn't visible and it is assigned the email value.
111
    * first_name and last_name fields are added.
105 112
    """
106
    inviter = forms.CharField(widget=forms.TextInput(),
107
                                label=_('Inviter Real Name'))
113
    
114
    username = forms.CharField(required = False, max_length = 30)
115
    email = UniqueUserEmailField(required = True, label = 'Email address')
116
    first_name = forms.CharField(required = False, max_length = 30)
117
    last_name = forms.CharField(required = False, max_length = 30)
118
    inviter = forms.CharField(widget=forms.TextInput(), label=_('Inviter Real Name'))
119
    
108 120
    class Meta:
109 121
        model = AstakosUser
110 122
        fields = ("username",)
111 123
    
112 124
    def __init__(self, *args, **kwargs):
125
        """
126
        Changes the order of fields, and removes the username field.
127
        """
113 128
        super(InvitedExtendedUserCreationForm, self).__init__(*args, **kwargs)
114
        
129
        self.fields.keyOrder = ['email', 'inviter', 'first_name', 'last_name',
130
                                'password1', 'password2']
115 131
        #set readonly form fields
116 132
        self.fields['inviter'].widget.attrs['readonly'] = True
117 133
        self.fields['email'].widget.attrs['readonly'] = True
118 134
        self.fields['username'].widget.attrs['readonly'] = True
135
    
136
    def clean(self, *args, **kwargs):
137
        """
138
        Normal cleanup + username generation.
139
        """
140
        cleaned_data = super(UserCreationForm, self).clean(*args, **kwargs)
141
        if cleaned_data.has_key('email'):
142
            cleaned_data['username'] = cleaned_data['email']
143
        return cleaned_data
144
        
145
    def save(self, commit=True):
146
        """
147
        Saves the email, first_name and last_name properties, after the normal
148
        save behavior is complete.
149
        """
150
        user = super(InvitedExtendedUserCreationForm, self).save(commit=False)
151
        user.renew_token()
152
        user.save()
153
        logging.info('Created user %s', user)
154
        return user
119 155

  
120 156
class ProfileForm(forms.ModelForm):
121 157
    """

Also available in: Unified diff