base.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from django.core.urlresolvers import reverse
  2. from django.http import Http404
  3. from django.shortcuts import redirect
  4. from misago.conf import settings
  5. from misago.models import Forum, Thread, Post
  6. from misago.utils.pagination import page_number
  7. class ViewBase(object):
  8. def __new__(cls, request, **kwargs):
  9. obj = super(ViewBase, cls).__new__(cls)
  10. return obj(request, **kwargs)
  11. def _type_available(self):
  12. try:
  13. if not self.type_available():
  14. raise Http404()
  15. except AttributeError:
  16. pass
  17. def set_forum_context(self):
  18. pass
  19. def set_thread_context(self):
  20. self.thread = Thread.objects.get(pk=self.kwargs.get('thread'))
  21. self.forum = self.thread.forum
  22. self.proxy = Forum.objects.parents_aware_forum(self.forum)
  23. self.request.acl.forums.allow_forum_view(self.forum)
  24. self.request.acl.threads.allow_thread_view(self.request.user, self.thread)
  25. def set_post_contex(self):
  26. pass
  27. def check_forum_type(self):
  28. type_prefix = self.type_prefix
  29. if type_prefix == 'thread':
  30. type_prefix = 'root'
  31. else:
  32. type_prefix = '%ss' % type_prefix
  33. try:
  34. if self.parents[0].parent_id != Forum.objects.special_pk(type_prefix):
  35. raise Http404()
  36. except (AttributeError, IndexError):
  37. if self.forum.special != type_prefix:
  38. raise Http404()
  39. def _check_permissions(self):
  40. try:
  41. self.check_permissions()
  42. except AttributeError:
  43. pass
  44. def redirect_to_post(self, post, type_prefix=None):
  45. type_prefix = type_prefix or self.type_prefix
  46. queryset = self.request.acl.threads.filter_posts(self.request, self.thread, self.thread.post_set)
  47. page = page_number(queryset.filter(id__lte=post.pk).count(), queryset.count(), settings.posts_per_page)
  48. if page > 1:
  49. return redirect(reverse(type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': page}) + ('#post-%s' % post.pk))
  50. return redirect(reverse(type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % post.pk))
  51. def template_vars(self, context):
  52. return context
  53. def retreat_redirect(self):
  54. if self.request.POST.get('retreat'):
  55. return redirect(self.request.POST.get('retreat'))
  56. return redirect(reverse(self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}))