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