list.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.template import RequestContext
  2. from misago.acl.exceptions import ACLError403, ACLError404
  3. from misago.apps.errors import error403, error404
  4. from misago.forms import FormFields
  5. from misago.models import Forum
  6. from misago.readstrackers import ForumsTracker
  7. class ThreadsListBaseView(object):
  8. def _fetch_forum(self):
  9. self.fetch_forum()
  10. self.proxy = Forum.objects.parents_aware_forum(self.forum)
  11. self.request.acl.forums.allow_forum_view(self.forum)
  12. if self.forum.level:
  13. self.parents = Forum.objects.forum_parents(self.forum.pk)
  14. if self.forum.lft + 1 != self.forum.rght:
  15. self.forum.subforums = Forum.objects.treelist(self.request.acl.forums, self.forum, tracker=ForumsTracker(self.request.user))
  16. def __new__(cls, request, **kwargs):
  17. obj = super(ThreadsListBaseView, cls).__new__(cls)
  18. return obj(request, **kwargs)
  19. def __call__(self, request, **kwargs):
  20. self.request = request
  21. self.kwargs = kwargs
  22. self.pagination = {}
  23. self.parents = []
  24. self.threads = []
  25. self.message = request.messages.get_message('threads')
  26. try:
  27. self._fetch_forum()
  28. self.fetch_threads()
  29. self.form = None
  30. #self.make_form()
  31. #if self.form:
  32. # response = self.handle_form()
  33. # if response:
  34. # return response
  35. except Forum.DoesNotExist:
  36. return error404(request)
  37. except ACLError403 as e:
  38. return error403(request, unicode(e))
  39. except ACLError404 as e:
  40. return error404(request, unicode(e))
  41. # Merge proxy into forum
  42. self.forum.closed = self.proxy.closed
  43. return request.theme.render_to_response(('%s/list.html' % self.templates_prefix),
  44. {
  45. 'message': self.message,
  46. 'forum': self.forum,
  47. 'parents': self.parents,
  48. 'count': self.count,
  49. 'list_form': FormFields(self.form).fields if self.form else None,
  50. 'threads': self.threads,
  51. 'pagination': self.pagination,
  52. },
  53. context_instance=RequestContext(request));