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 |
"""
|