mixins.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from django import forms
  2. from django.utils import timezone
  3. from django.utils.translation import ungettext, 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. if diff < 35:
  11. raise forms.ValidationError(_("You can't post one message so quickly after another. Please wait a moment and try again."))
  12. return cleaned_data
  13. class ValidateThreadNameMixin(object):
  14. def clean_thread_name(self):
  15. data = self.cleaned_data['thread_name']
  16. slug = slugify(data)
  17. if len(slug) < self.request.settings['thread_name_min']:
  18. raise forms.ValidationError(ungettext(
  19. "Thread name must contain at least one alpha-numeric character.",
  20. "Thread name must contain at least %(count)d alpha-numeric characters.",
  21. self.request.settings['thread_name_min']
  22. ) % {'count': self.request.settings['thread_name_min']})
  23. if len(data) > self.request.settings['thread_name_max']:
  24. raise forms.ValidationError(ungettext(
  25. "Thread name cannot be longer than %(count)d character.",
  26. "Thread name cannot be longer than %(count)d characters.",
  27. self.request.settings['thread_name_max']
  28. ) % {'count': self.request.settings['thread_name_max']})
  29. return data
  30. class ValidatePostLengthMixin(object):
  31. def clean_post(self):
  32. data = self.cleaned_data['post']
  33. if len(data) < self.request.settings['post_length_min']:
  34. raise forms.ValidationError(ungettext(
  35. "Post content cannot be empty.",
  36. "Post content cannot be shorter than %(count)d characters.",
  37. self.request.settings['post_length_min']
  38. ) % {'count': self.request.settings['post_length_min']})
  39. return data