Revision f7400729 snf-astakos-app/astakos/im/forms.py
b/snf-astakos-app/astakos/im/forms.py | ||
---|---|---|
453 | 453 |
return user |
454 | 454 |
|
455 | 455 |
|
456 |
|
|
456 | 457 |
class FeedbackForm(forms.Form): |
457 | 458 |
""" |
458 | 459 |
Form for writing feedback. |
... | ... | |
910 | 911 |
required=True |
911 | 912 |
) |
912 | 913 |
|
914 |
|
|
913 | 915 |
class ProjectSearchForm(forms.Form): |
914 | 916 |
q = forms.CharField(max_length=200, label='Search project', required=False) |
915 | 917 |
|
918 |
|
|
919 |
class ExtendedProfileForm(ProfileForm): |
|
920 |
""" |
|
921 |
Profile form that combines `email change` and `password change` user |
|
922 |
actions by propagating submited data to internal EmailChangeForm |
|
923 |
and ExtendedPasswordChangeForm objects. |
|
924 |
""" |
|
925 |
|
|
926 |
password_change_form = None |
|
927 |
email_change_form = None |
|
928 |
extra_forms_fields = { |
|
929 |
'email': ['new_email_address'], |
|
930 |
'password': ['old_password', 'new_password1', 'new_password2'] |
|
931 |
} |
|
932 |
|
|
933 |
change_password = forms.BooleanField(initial=False, required=False) |
|
934 |
change_email = forms.BooleanField(initial=False, required=False) |
|
935 |
|
|
936 |
def __init__(self, *args, **kwargs): |
|
937 |
super(ExtendedProfileForm, self).__init__(*args, **kwargs) |
|
938 |
self._init_extra_forms() |
|
939 |
self.save_extra_forms = [] |
|
940 |
self.success_messages = [] |
|
941 |
|
|
942 |
def _init_extra_form_fields(self): |
|
943 |
self.fields.update(self.email_change_form.fields) |
|
944 |
self.fields.update(self.password_change_form.fields) |
|
945 |
|
|
946 |
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 |
|
950 |
|
|
951 |
def _update_extra_form_errors(self): |
|
952 |
if self.cleaned_data.get('change_password'): |
|
953 |
self.errors.update(self.password_change_form.errors) |
|
954 |
if self.cleaned_data.get('change_email'): |
|
955 |
self.errors.update(self.email_change_form.errors) |
|
956 |
|
|
957 |
def _init_extra_forms(self): |
|
958 |
self.email_change_form = EmailChangeForm(self.data) |
|
959 |
self.password_change_form = ExtendedPasswordChangeForm(user=self.instance, |
|
960 |
data=self.data) |
|
961 |
self._init_extra_form_fields() |
|
962 |
|
|
963 |
def is_valid(self): |
|
964 |
password, email = True, True |
|
965 |
profile = super(ExtendedProfileForm, self).is_valid() |
|
966 |
if profile and self.cleaned_data.get('change_password'): |
|
967 |
password = self.password_change_form.is_valid() |
|
968 |
if profile and self.cleaned_data.get('change_email'): |
|
969 |
email = self.email_change_form.is_valid() |
|
970 |
|
|
971 |
if not password or not email: |
|
972 |
self._update_extra_form_errors() |
|
973 |
|
|
974 |
return all([profile, password, email]) |
|
975 |
|
|
976 |
def save(self, *args, **kwargs): |
|
977 |
if 'email' in self.save_extra_forms: |
|
978 |
self.email_change_email.save(*args, **kwargs) |
|
979 |
if 'password' in self.save_extra_forms: |
|
980 |
self.password_change_form.save(*args, **kwargs) |
|
981 |
return super(ExtendedProfileForm, self).save(*args, **kwargs) |
|
982 |
|
Also available in: Unified diff