forms.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from django import forms
  2. from django.utils import timezone
  3. from django.utils.translation import ungettext_lazy, ugettext_lazy as _
  4. from misago.forms import Form
  5. class QuickSearchForm(Form):
  6. search_query = forms.CharField(max_length=255)
  7. def clean_search_query(self):
  8. data = self.cleaned_data['search_query']
  9. if len(data) < 3:
  10. raise forms.ValidationError(_("Search query should be at least 3 characters long."))
  11. self.mode = None
  12. if data[0:6].lower() == 'forum:':
  13. forum_name = data[6:].strip()
  14. if len(forum_name) < 2:
  15. raise forms.ValidationError(_("In order to jump to forum, You have to enter full forum name or first few characters of it."))
  16. self.mode = 'forum'
  17. self.target = forum_name
  18. if data[0:5].lower() == 'user:':
  19. username = data[5:].strip()
  20. if len(username) < 2:
  21. raise forms.ValidationError(_("In order to jump to user profile, You have to enter full user name or first few characters of it."))
  22. self.mode = 'user'
  23. self.target = username
  24. return data
  25. def clean(self):
  26. cleaned_data = super(QuickSearchForm, self).clean()
  27. if self.request.user.last_search:
  28. diff = timezone.now() - self.request.user.last_search
  29. diff = diff.seconds + (diff.days * 86400)
  30. wait_for = self.request.acl.search.search_cooldown() - diff
  31. if wait_for > 0:
  32. if wait_for < 5:
  33. raise forms.ValidationError(_("You can't perform one search so quickly after another. Please wait a moment and try again."))
  34. else:
  35. raise forms.ValidationError(ungettext(
  36. "You can't perform one search so quickly after another. Please wait %(seconds)d second and try again.",
  37. "You can't perform one search so quickly after another. Please wait %(seconds)d seconds and try again.",
  38. wait_for) % {
  39. 'seconds': wait_for,
  40. })
  41. return cleaned_data