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