Revision 3fbf7863

b/snf-astakos-app/astakos/im/forms.py
532 532
            raise forms.ValidationError(_(astakos_messages.EMAIL_USED))
533 533
        return addr
534 534

  
535
    def save(self, email_template_name, request, commit=True):
535
    def save(self, request, email_template_name='registration/email_change_email.txt', commit=True):
536 536
        ec = super(EmailChangeForm, self).save(commit=False)
537 537
        ec.user = request.user
538
        # delete pending email changes
539
        request.user.emailchanges.all().delete()
540

  
538 541
        activation_key = hashlib.sha1(
539 542
            str(random()) + smart_str(ec.new_email_address))
540 543
        ec.activation_key = activation_key.hexdigest()
......
925 928

  
926 929
    password_change_form = None
927 930
    email_change_form = None
931
    password_change = False
928 932
    extra_forms_fields = {
929 933
        'email': ['new_email_address'],
930 934
        'password': ['old_password', 'new_password1', 'new_password2']
......
935 939

  
936 940
    def __init__(self, *args, **kwargs):
937 941
        super(ExtendedProfileForm, self).__init__(*args, **kwargs)
942
        if self.instance.can_change_password():
943
            self.password_change = True
944
        else:
945
            del self.fields['change_password']
946

  
938 947
        self._init_extra_forms()
939 948
        self.save_extra_forms = []
940 949
        self.success_messages = []
941 950

  
942 951
    def _init_extra_form_fields(self):
943 952
        self.fields.update(self.email_change_form.fields)
944
        self.fields.update(self.password_change_form.fields)
945

  
946 953
        self.fields['new_email_address'].required = False
947
        self.fields['old_password'].required = False
948
        self.fields['new_password1'].required = False
949
        self.fields['new_password2'].required = False
954

  
955
        if self.password_change:
956
            self.fields.update(self.password_change_form.fields)
957
            self.fields['old_password'].required = False
958
            self.fields['new_password1'].required = False
959
            self.fields['new_password2'].required = False
950 960

  
951 961
    def _update_extra_form_errors(self):
952 962
        if self.cleaned_data.get('change_password'):
......
963 973
    def is_valid(self):
964 974
        password, email = True, True
965 975
        profile = super(ExtendedProfileForm, self).is_valid()
966
        if profile and self.cleaned_data.get('change_password'):
976
        if profile and self.cleaned_data.get('change_password', None):
967 977
            password = self.password_change_form.is_valid()
978
            self.save_extra_forms.append('password')
968 979
        if profile and self.cleaned_data.get('change_email'):
969 980
            email = self.email_change_form.is_valid()
981
            self.save_extra_forms.append('email')
970 982

  
971 983
        if not password or not email:
972 984
            self._update_extra_form_errors()
973 985

  
974 986
        return all([profile, password, email])
975 987

  
976
    def save(self, *args, **kwargs):
988
    def save(self, request, *args, **kwargs):
977 989
        if 'email' in self.save_extra_forms:
978
            self.email_change_email.save(*args, **kwargs)
990
            self.email_change_form.save(request, *args, **kwargs)
979 991
        if 'password' in self.save_extra_forms:
980 992
            self.password_change_form.save(*args, **kwargs)
981 993
        return super(ExtendedProfileForm, self).save(*args, **kwargs)
b/snf-astakos-app/astakos/im/views.py
376 376
        if form.is_valid():
377 377
            try:
378 378
                prev_token = request.user.auth_token
379
                user = form.save()
380
                form = ProfileForm(
381
                    instance=user,
382
                    session_key=request.session.session_key
383
                )
379
                user = form.save(request=request)
384 380
                next = restrict_next(
385 381
                    request.POST.get('next'),
386 382
                    domain=COOKIE_DOMAIN

Also available in: Unified diff