forms.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django import forms
  2. from django.utils.translation import ungettext, ugettext_lazy as _
  3. from misago.forms import Form
  4. from misago.utils import slugify
  5. class PostForm(Form):
  6. thread_name = forms.CharField(max_length=255)
  7. post = forms.CharField(widget=forms.Textarea)
  8. def __init__(self, data=None, file=None, request=None, mode=None, *args, **kwargs):
  9. self.mode = mode
  10. super(PostForm, self).__init__(data, file, request=request, *args, **kwargs)
  11. def finalize_form(self):
  12. self.layout = [
  13. [
  14. None,
  15. [
  16. ('thread_name', {'label': _("Thread Name")}),
  17. ('post', {'label': _("Post Content")}),
  18. ],
  19. ],
  20. ]
  21. if self.mode not in ['edit_thread', 'new_thread']:
  22. del self.fields['thread_name']
  23. del self.layout[0][1][0]
  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(
  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. return data
  34. def clean_post(self):
  35. data = self.cleaned_data['post']
  36. if len(data) < self.request.settings['post_length_min']:
  37. raise forms.ValidationError(ungettext(
  38. "Post content cannot be empty.",
  39. "Post content cannot be shorter than %(count)d characters.",
  40. self.request.settings['post_length_min']
  41. ) % {'count': self.request.settings['post_length_min']})
  42. return data
  43. class QuickReplyForm(Form):
  44. post = forms.CharField(widget=forms.Textarea)