forms.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import floppyforms as forms
  2. from django.core.exceptions import ValidationError
  3. from django.utils.translation import ugettext_lazy as _
  4. from misago.conf import settings
  5. from misago.forms import Form, QACaptchaField, ReCaptchaField
  6. from misago.models import User
  7. from misago.utils.timezones import tzlist
  8. from misago.validators import validate_username, validate_password, validate_email
  9. class UserRegisterForm(Form):
  10. username = forms.CharField(max_length=15)
  11. email = forms.EmailField(max_length=255)
  12. email_rep = forms.EmailField(max_length=255)
  13. password = forms.CharField(max_length=255,widget=forms.PasswordInput)
  14. password_rep = forms.CharField(max_length=255,widget=forms.PasswordInput)
  15. captcha_qa = QACaptchaField()
  16. recaptcha = ReCaptchaField()
  17. accept_tos = forms.BooleanField(required=True,error_messages={'required': _("Acceptation of board ToS is mandatory for membership.")})
  18. validate_repeats = (('email', 'email_rep'), ('password', 'password_rep'))
  19. repeats_errors = [{
  20. 'different': _("Entered addresses do not match."),
  21. },
  22. {
  23. 'different': _("Entered passwords do not match."),
  24. }]
  25. def finalize_form(self):
  26. raise NotImplementedError("TODO: Finish #114 in front-end!")
  27. self.layout = [
  28. (
  29. None,
  30. [('username', {'label': _('Username'), 'help_text': _("Your displayed username. Between %(min)s and %(max)s characters, only letters and digits are allowed.") % {'min': settings.username_length_min, 'max': settings.username_length_max},'attrs': {'placeholder': _("Enter your desired username")}})]
  31. ),
  32. (
  33. None,
  34. [('nested', [('email', {'label': _('E-mail address'), 'help_text': _("Working e-mail inbox is required to maintain control over your forum account."), 'attrs': {'placeholder': _("Enter your e-mail")}, 'width': 50}), ('email_rep', {'attrs': {'placeholder': _("Repeat your e-mail")}, 'width': 50})]),
  35. ('nested', [('password', {'label': _('Password'), 'help_text': _("Password you will be using to sign in to your account. Make sure it's strong."), 'has_value': False, 'attrs': {'placeholder': _("Enter your password")}, 'width': 50}), ('password_rep', {'has_value': False, 'attrs': {'placeholder': _("Repeat your password")}, 'width': 50})])]
  36. ),
  37. (
  38. None,
  39. ['captcha_qa', 'recaptcha']
  40. ),
  41. (
  42. None,
  43. [('accept_tos', {'label': _("Forum Terms of Service"), 'widget': 'forumTos'})]
  44. ),
  45. ]
  46. if not settings.tos_url and not settings.tos_content:
  47. del self.fields['accept_tos']
  48. del self.layout[3]
  49. def clean_username(self):
  50. validate_username(self.cleaned_data['username'])
  51. new_user = User.objects.get_blank_user()
  52. new_user.set_username(self.cleaned_data['username'])
  53. try:
  54. new_user.full_clean()
  55. except ValidationError as e:
  56. new_user.is_username_valid(e)
  57. return self.cleaned_data['username']
  58. def clean_email(self):
  59. new_user = User.objects.get_blank_user()
  60. new_user.set_email(self.cleaned_data['email'])
  61. try:
  62. new_user.full_clean()
  63. except ValidationError as e:
  64. new_user.is_email_valid(e)
  65. return self.cleaned_data['email']
  66. def clean_password(self):
  67. validate_password(self.cleaned_data['password'])
  68. new_user = User.objects.get_blank_user()
  69. new_user.set_password(self.cleaned_data['password'])
  70. try:
  71. new_user.full_clean()
  72. except ValidationError as e:
  73. new_user.is_password_valid(e)
  74. return self.cleaned_data['password']