mixins.py 2.1 KB

1234567891011121314151617181920212223242526272829303132
  1. from django import forms
  2. from django.core.urlresolvers import reverse
  3. from django.shortcuts import redirect
  4. from django.utils.translation import ungettext
  5. from misago.utils.strings import slugify
  6. from misago.utils.pagination import make_pagination
  7. class ValidateThreadNameMixin(object):
  8. def clean_thread_name(self):
  9. data = self.cleaned_data['thread_name']
  10. slug = slugify(data)
  11. if len(slug) < self.request.settings['thread_name_min']:
  12. raise forms.ValidationError(ungettext(
  13. "Thread name must contain at least one alpha-numeric character.",
  14. "Thread name must contain at least %(count)d alpha-numeric characters.",
  15. self.request.settings['thread_name_min']
  16. ) % {'count': self.request.settings['thread_name_min']})
  17. if len(data) > self.request.settings['thread_name_max']:
  18. raise forms.ValidationError(ungettext(
  19. "Thread name cannot be longer than %(count)d character.",
  20. "Thread name cannot be longer than %(count)d characters.",
  21. self.request.settings['thread_name_max']
  22. ) % {'count': self.request.settings['thread_name_max']})
  23. return data
  24. class RedirectToPostMixin(object):
  25. def _redirect_to_post(self, link, post):
  26. pagination = make_pagination(0, self.request.acl.threads.filter_posts(self.request, self.thread, self.thread.post_set).filter(id__lte=post.pk).count(), self.request.settings.posts_per_page)
  27. if pagination['total'] > 1:
  28. return redirect(reverse(link, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': pagination['total']}) + ('#post-%s' % post.pk))
  29. return redirect(reverse(link, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % post.pk))