123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- from django.contrib.auth import get_user_model
- from django.utils.translation import ugettext_lazy as _, ungettext
- from misago.conf import settings
- from misago.core import forms, timezones
- from misago.users.models import AUTO_SUBSCRIBE_CHOICES
- from misago.users.validators import validate_email, validate_password
- class ChangeForumOptionsBaseForm(forms.ModelForm):
- timezone = forms.ChoiceField(
- label=_("Your current timezone"), choices=[],
- help_text=_("If dates and hours displayed by forums are inaccurate, "
- "you can fix it by adjusting timezone setting."))
- is_hiding_presence = forms.YesNoSwitch(
- label=_("Hide my presence"),
- help_text=_("If you hide your presence, only members with permission "
- "to see hidden will see when you are online."))
- subscribe_to_started_threads = forms.TypedChoiceField(
- label=_("Threads I start"), coerce=int, choices=AUTO_SUBSCRIBE_CHOICES)
- subscribe_to_replied_threads = forms.TypedChoiceField(
- label=_("Threads I reply to"), coerce=int,
- choices=AUTO_SUBSCRIBE_CHOICES)
- class Meta:
- model = get_user_model()
- fields = ['timezone', 'is_hiding_presence',
- 'subscribe_to_started_threads',
- 'subscribe_to_replied_threads']
- def ChangeForumOptionsForm(*args, **kwargs):
- timezone = forms.ChoiceField(
- label=_("Your current timezone"), choices=timezones.choices(),
- help_text=_("If dates and hours displayed by forums are inaccurate, "
- "you can fix it by adjusting timezone setting."))
- FinalFormType = type('FinalChangeForumOptionsForm',
- (ChangeForumOptionsBaseForm,),
- {'timezone': timezone})
- return FinalFormType(*args, **kwargs)
- class EditSignatureForm(forms.ModelForm):
- signature = forms.CharField(label=_("Signature"), required=False)
- class Meta:
- model = get_user_model()
- fields = ['signature']
- def clean(self):
- data = super(EditSignatureForm, self).clean()
- length_limit = settings.signature_length_max
- if len(data) > length_limit:
- raise forms.ValidationError(ungettext(
- "Signature can't be longer than %(limit)s character.",
- "Signature can't be longer than %(limit)s characters.",
- length_limit) % {'limit': length_limit})
- return data
- class ChangeEmailPasswordForm(forms.Form):
- current_password = forms.CharField(
- label=_("Current password"),
- max_length=200,
- required=False,
- widget=forms.PasswordInput())
- new_email = forms.CharField(
- label=_("New e-mail"),
- max_length=200,
- required=False)
- new_password = forms.CharField(
- label=_("New password"),
- max_length=200,
- required=False,
- widget=forms.PasswordInput())
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user', None)
- super(ChangeEmailPasswordForm, self).__init__(*args, **kwargs)
- def clean(self):
- data = super(ChangeEmailPasswordForm, self).clean()
- current_password = data.get('current_password')
- new_email = data.get('new_email')
- new_password = data.get('new_password')
- if not data.get('current_password'):
- message = _("You have to enter your current password.")
- raise forms.ValidationError(message)
- if not self.user.check_password(current_password):
- raise forms.ValidationError(_("Entered password is invalid."))
- if not (new_email or new_password):
- message = _("You have to enter new e-mail or password.")
- raise forms.ValidationError(message)
- if new_email:
- if new_email.lower() == self.user.email.lower():
- message = _("New e-mail is same as current one.")
- raise forms.ValidationError(message)
- validate_email(new_email)
- if new_password:
- validate_password(new_password)
- return data
|