Revision 678b2236 snf-astakos-app/astakos/im/forms.py

b/snf-astakos-app/astakos/im/forms.py
46 46
from django.utils.safestring import mark_safe
47 47
from django.contrib import messages
48 48
from django.utils.encoding import smart_str
49
from django.forms.models import fields_for_model
49 50

  
50
from astakos.im.models import AstakosUser, Invitation, get_latest_terms, EmailChange
51
from astakos.im.models import (
52
    AstakosUser, Invitation, get_latest_terms,
53
    EmailChange, PendingThirdPartyUser
54
)
51 55
from astakos.im.settings import (INVITATIONS_PER_LEVEL, DEFAULT_FROM_EMAIL,
52 56
    BASEURL, SITENAME, RECAPTCHA_PRIVATE_KEY, DEFAULT_CONTACT_EMAIL,
53 57
    RECAPTCHA_ENABLED, LOGGING_LEVEL, PASSWORD_RESET_EMAIL_SUBJECT,
......
189 193
    )
190 194
    class Meta:
191 195
        model = AstakosUser
192
        fields = ("email", "first_name", "last_name", "third_party_identifier", "has_signed_terms")
196
        fields = ['email', 'third_party_identifier']
193 197

  
194 198
    def __init__(self, *args, **kwargs):
195 199
        """
......
202 206
        latest_terms = get_latest_terms()
203 207
        if latest_terms:
204 208
            self._meta.fields.append('has_signed_terms')
205
                
209
        
206 210
        super(ThirdPartyUserCreationForm, self).__init__(*args, **kwargs)
207 211
        
208 212
        if latest_terms:
......
215 219
                    % (reverse('latest_terms'), _("the terms"))
216 220
            self.fields['has_signed_terms'].label = \
217 221
                    mark_safe("I agree with %s" % terms_link_html)
218

  
222
        
223
        default = fields_for_model(
224
            self._meta.model,
225
            THIRDPARTY_ACC_ADDITIONAL_FIELDS.keys()
226
        )
227
        for fname, field in THIRDPARTY_ACC_ADDITIONAL_FIELDS.iteritems():
228
            if field:
229
                self.fields[fname] = field
230
            self.fields.setdefault(fname, default.get(fname))
231
            self.initial[fname] = getattr(self.instance, fname, None)
232
    
219 233
    def clean_email(self):
220 234
        email = self.cleaned_data['email']
221 235
        if not email:
......
287 301
                raise forms.ValidationError(_("This email is already used"))
288 302
        super(ShibbolethUserCreationForm, self).clean_email()
289 303
        return email
304
    
305
    def save(self, commit=True):
306
        user = super(ShibbolethUserCreationForm, self).save(commit=False)
307
        try:
308
            p = PendingThirdPartyUser.objects.get(
309
                provider=user.provider,
310
                third_party_identifier=user.third_party_identifier
311
            )
312
        except:
313
            pass
314
        else:
315
            p.delete()
316
        return user
290 317

  
291 318
class InvitedShibbolethUserCreationForm(ShibbolethUserCreationForm, InvitedThirdPartyUserCreationForm):
292 319
    pass

Also available in: Unified diff