Revision 270dd48d snf-astakos-app/astakos/im/forms.py

b/snf-astakos-app/astakos/im/forms.py
31 31
# interpreted as representing official policies, either expressed
32 32
# or implied, of GRNET S.A.
33 33
from urlparse import urljoin
34
from datetime import datetime
34 35

  
35 36
from django import forms
36 37
from django.utils.translation import ugettext as _
......
40 41
from django.template import Context, loader
41 42
from django.utils.http import int_to_base36
42 43
from django.core.urlresolvers import reverse
44
from django.utils.functional import lazy
43 45

  
44 46
from astakos.im.models import AstakosUser
45 47
from astakos.im.settings import INVITATIONS_PER_LEVEL, DEFAULT_FROM_EMAIL, BASEURL, SITENAME, RECAPTCHA_PRIVATE_KEY, DEFAULT_CONTACT_EMAIL
46
from astakos.im.widgets import DummyWidget, RecaptchaWidget
48
from astakos.im.widgets import DummyWidget, RecaptchaWidget, ApprovalTermsWidget
49

  
50
# since Django 1.4 use django.core.urlresolvers.reverse_lazy instead
51
from astakos.im.util import reverse_lazy
47 52

  
48 53
import logging
49 54
import recaptcha.client.captcha as captcha
......
63 68
    
64 69
    class Meta:
65 70
        model = AstakosUser
66
        fields = ("email", "first_name", "last_name")
71
        fields = ("email", "first_name", "last_name", "has_signed_terms")
72
        widgets = {"has_signed_terms":ApprovalTermsWidget(terms_uri=reverse_lazy('latest_terms'))}
67 73
    
68 74
    def __init__(self, *args, **kwargs):
69 75
        """
......
75 81
        super(LocalUserCreationForm, self).__init__(*args, **kwargs)
76 82
        self.fields.keyOrder = ['email', 'first_name', 'last_name',
77 83
                                'password1', 'password2',
84
                                'has_signed_terms',
78 85
                                'recaptcha_challenge_field',
79
                                'recaptcha_response_field']
86
                                'recaptcha_response_field',]
80 87
    
81 88
    def clean_email(self):
82 89
        email = self.cleaned_data['email']
......
88 95
        except AstakosUser.DoesNotExist:
89 96
            return email
90 97
    
98
    def clean_has_signed_terms(self):
99
        has_signed_terms = self.cleaned_data['has_signed_terms']
100
        if not has_signed_terms:
101
            raise forms.ValidationError(_('You have to agree with the terms'))
102
        return has_signed_terms
103
    
91 104
    def clean_recaptcha_response_field(self):
92 105
        if 'recaptcha_challenge_field' in self.cleaned_data:
93 106
            self.validate_captcha()
......
112 125
        """
113 126
        user = super(LocalUserCreationForm, self).save(commit=False)
114 127
        user.renew_token()
128
        user.date_signed_terms = datetime.now()
115 129
        if commit:
116 130
            user.save()
117 131
        logger.info('Created user %s', user)
......
126 140
    
127 141
    class Meta:
128 142
        model = AstakosUser
129
        fields = ("email", "first_name", "last_name")
143
        fields = ("email", "first_name", "last_name", "has_signed_terms")
144
        widgets = {"has_signed_terms":ApprovalTermsWidget(terms_uri=reverse_lazy('latest_terms'))}
130 145
    
131 146
    def __init__(self, *args, **kwargs):
132 147
        """
......
135 150
        super(InvitedLocalUserCreationForm, self).__init__(*args, **kwargs)
136 151
        self.fields.keyOrder = ['email', 'inviter', 'first_name',
137 152
                                'last_name', 'password1', 'password2',
153
                                'has_signed_terms',
138 154
                                'recaptcha_challenge_field',
139 155
                                'recaptcha_response_field']
140 156
        #set readonly form fields
......
270 286
            from_email = DEFAULT_FROM_EMAIL
271 287
            send_mail(_("Password reset on %s alpha2 testing") % SITENAME,
272 288
                t.render(Context(c)), from_email, [user.email])
289

  
290
class SignApprovalTermsForm(forms.ModelForm):
291
    class Meta:
292
        model = AstakosUser
293
        fields = ("has_signed_terms",)
294
    
295
    def __init__(self, *args, **kwargs):
296
        super(SignApprovalTermsForm, self).__init__(*args, **kwargs)
297
    
298
    def clean_has_signed_terms(self):
299
        has_signed_terms = self.cleaned_data['has_signed_terms']
300
        if not has_signed_terms:
301
            raise forms.ValidationError(_('You have to agree with the terms'))
302
        return has_signed_terms
303
    
304
    def save(self, commit=True):
305
        """
306
        Saves the , after the normal
307
        save behavior is complete.
308
        """
309
        user = super(SignApprovalTermsForm, self).save(commit=False)
310
        user.date_signed_terms = datetime.now()
311
        if commit:
312
            user.save()
313
        return user

Also available in: Unified diff