mixins.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from django import forms
  2. from django.utils import timezone
  3. from django.utils.translation import ungettext_laxy, ugettext_lazy as _
  4. from misago.utils.strings import slugify
  5. class FloodProtectionMixin(object):
  6. def clean(self):
  7. cleaned_data = super(FloodProtectionMixin, self).clean()
  8. diff = timezone.now() - self.request.user.last_post
  9. diff = diff.seconds + (diff.days * 86400)
  10. flood_limit = 35
  11. wait_for = flood - diff
  12. if wait_for > 0:
  13. if wait_for < 5:
  14. raise forms.ValidationError(_("You can't post one message so quickly after another. Please wait a moment and try again."))
  15. else:
  16. raise forms.ValidationError(ungettext(
  17. "You can't post one message so quickly after another. Please wait %(seconds)d second and try again.",
  18. "You can't post one message so quickly after another. Please wait %(seconds)d seconds and try again.",
  19. wait_for) % {
  20. 'seconds': wait_for,
  21. })
  22. return cleaned_data
  23. class ValidateThreadNameMixin(object):
  24. def clean_thread_name(self):
  25. data = self.cleaned_data['thread_name']
  26. slug = slugify(data)
  27. if len(slug) < self.request.settings['thread_name_min']:
  28. raise forms.ValidationError(ungettext_laxy(
  29. "Thread name must contain at least one alpha-numeric character.",
  30. "Thread name must contain at least %(count)d alpha-numeric characters.",
  31. self.request.settings['thread_name_min']
  32. ) % {'count': self.request.settings['thread_name_min']})
  33. if len(data) > self.request.settings['thread_name_max']:
  34. raise forms.ValidationError(ungettext_laxy(
  35. "Thread name cannot be longer than %(count)d character.",
  36. "Thread name cannot be longer than %(count)d characters.",
  37. self.request.settings['thread_name_max']
  38. ) % {'count': self.request.settings['thread_name_max']})
  39. return data
  40. class ValidatePostLengthMixin(object):
  41. def clean_post(self):
  42. data = self.cleaned_data['post']
  43. if len(data) < self.request.settings['post_length_min']:
  44. raise forms.ValidationError(ungettext_laxy(
  45. "Post content cannot be empty.",
  46. "Post content cannot be shorter than %(count)d characters.",
  47. self.request.settings['post_length_min']
  48. ) % {'count': self.request.settings['post_length_min']})
  49. return data