Revision 8f5a3a06 snf-astakos-app/astakos/im/forms.py
b/snf-astakos-app/astakos/im/forms.py | ||
---|---|---|
43 | 43 |
from django.core.urlresolvers import reverse |
44 | 44 |
from django.utils.functional import lazy |
45 | 45 |
|
46 |
from astakos.im.models import AstakosUser |
|
46 |
from astakos.im.models import AstakosUser, Invitation
|
|
47 | 47 |
from astakos.im.settings import INVITATIONS_PER_LEVEL, DEFAULT_FROM_EMAIL, BASEURL, SITENAME, RECAPTCHA_PRIVATE_KEY, DEFAULT_CONTACT_EMAIL, RECAPTCHA_ENABLED |
48 | 48 |
from astakos.im.widgets import DummyWidget, RecaptchaWidget, ApprovalTermsWidget |
49 | 49 |
|
... | ... | |
166 | 166 |
user.save() |
167 | 167 |
return user |
168 | 168 |
|
169 |
class ThirdPartyUserCreationForm(UserCreationForm): |
|
170 |
class Meta: |
|
171 |
model = AstakosUser |
|
172 |
fields = ("email", "has_signed_terms") |
|
173 |
widgets = {"has_signed_terms":ApprovalTermsWidget(terms_uri=reverse_lazy('latest_terms'))} |
|
174 |
|
|
175 |
def __init__(self, *args, **kwargs): |
|
176 |
""" |
|
177 |
Changes the order of fields, and removes the username field. |
|
178 |
""" |
|
179 |
if 'ip' in kwargs: |
|
180 |
self.ip = kwargs['ip'] |
|
181 |
kwargs.pop('ip') |
|
182 |
super(ThirdPartyUserCreationForm, self).__init__(*args, **kwargs) |
|
183 |
self.fields.keyOrder = ['email'] |
|
184 |
if get_latest_terms(): |
|
185 |
self.fields.keyOrder.append('has_signed_terms') |
|
186 |
|
|
187 |
def save(self, commit=True): |
|
188 |
user = super(ThirdPartyUserCreationForm, self).save(commit=False) |
|
189 |
user.set_unusable_password() |
|
190 |
if commit: |
|
191 |
user.save() |
|
192 |
logger.info('Created user %s', user) |
|
193 |
return user |
|
194 |
|
|
195 |
class InvitedThirdPartyUserCreationForm(ThirdPartyUserCreationForm): |
|
196 |
def __init__(self, *args, **kwargs): |
|
197 |
super(InvitedThirdPartyUserCreationForm, self).__init__(*args, **kwargs) |
|
198 |
#set readonly form fields |
|
199 |
self.fields['email'].widget.attrs['readonly'] = True |
|
200 |
|
|
169 | 201 |
class LoginForm(AuthenticationForm): |
170 | 202 |
username = forms.EmailField(label=_("Email")) |
171 | 203 |
|
... | ... | |
200 | 232 |
user.save() |
201 | 233 |
return user |
202 | 234 |
|
203 |
class ThirdPartyUserCreationForm(ProfileForm): |
|
204 |
class Meta: |
|
205 |
model = AstakosUser |
|
206 |
fields = ('email', 'last_name', 'first_name', 'affiliation', 'provider', 'third_party_identifier') |
|
207 |
|
|
208 |
def __init__(self, *args, **kwargs): |
|
209 |
if 'ip' in kwargs: |
|
210 |
self.ip = kwargs['ip'] |
|
211 |
kwargs.pop('ip') |
|
212 |
super(ThirdPartyUserCreationForm, self).__init__(*args, **kwargs) |
|
213 |
self.fields.keyOrder = ['email'] |
|
214 |
|
|
215 |
def clean_email(self): |
|
216 |
email = self.cleaned_data['email'] |
|
217 |
if not email: |
|
218 |
raise forms.ValidationError(_("This field is required")) |
|
219 |
try: |
|
220 |
user = AstakosUser.objects.get(email = email) |
|
221 |
raise forms.ValidationError(_("This email is already used")) |
|
222 |
except AstakosUser.DoesNotExist: |
|
223 |
return email |
|
224 |
|
|
225 |
def save(self, commit=True): |
|
226 |
user = super(ThirdPartyUserCreationForm, self).save(commit=False) |
|
227 |
user.verified = False |
|
228 |
user.renew_token() |
|
229 |
if commit: |
|
230 |
user.save() |
|
231 |
logger.info('Created user %s', user) |
|
232 |
return user |
|
233 |
|
|
234 |
class InvitedThirdPartyUserCreationForm(ThirdPartyUserCreationForm): |
|
235 |
def __init__(self, *args, **kwargs): |
|
236 |
super(InvitedThirdPartyUserCreationForm, self).__init__(*args, **kwargs) |
|
237 |
#set readonly form fields |
|
238 |
self.fields['email'].widget.attrs['readonly'] = True |
|
239 |
|
|
240 | 235 |
class FeedbackForm(forms.Form): |
241 | 236 |
""" |
242 | 237 |
Form for writing feedback. |
243 | 238 |
""" |
244 |
feedback_msg = forms.CharField(widget=forms.Textarea(), |
|
245 |
label=u'Message', required=False) |
|
246 |
feedback_data = forms.CharField(widget=forms.HiddenInput(), |
|
247 |
label='', required=False) |
|
239 |
feedback_msg = forms.CharField(widget=forms.TextInput(), label=u'Message') |
|
240 |
feedback_data = forms.CharField(widget=forms.HiddenInput(), label='', |
|
241 |
required=False) |
|
248 | 242 |
|
249 | 243 |
class SendInvitationForm(forms.Form): |
250 | 244 |
""" |
... | ... | |
301 | 295 |
|
302 | 296 |
def save(self, commit=True): |
303 | 297 |
""" |
304 |
Saves the , after the normal |
|
305 |
save behavior is complete. |
|
298 |
Updates date_signed_terms & has_signed_terms fields. |
|
306 | 299 |
""" |
307 | 300 |
user = super(SignApprovalTermsForm, self).save(commit=False) |
308 | 301 |
user.date_signed_terms = datetime.now() |
309 | 302 |
if commit: |
310 | 303 |
user.save() |
311 |
return user |
|
304 |
return user |
|
305 |
|
|
306 |
class InvitationForm(forms.ModelForm): |
|
307 |
username = forms.EmailField(label=_("Email")) |
|
308 |
|
|
309 |
class Meta: |
|
310 |
model = Invitation |
|
311 |
fields = ('username', 'realname') |
|
312 |
|
|
313 |
def clean_username(self): |
|
314 |
username = self.cleaned_data['username'] |
|
315 |
try: |
|
316 |
Invitation.objects.get(username = username) |
|
317 |
raise forms.ValidationError(_('There is already invitation for this email.')) |
|
318 |
except Invitation.DoesNotExist: |
|
319 |
pass |
|
320 |
return username |
Also available in: Unified diff