view.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from django.shortcuts import redirect
  2. from misago.forums.lists import get_forums_list, get_forum_path
  3. from misago.threads.models import Label
  4. from misago.threads.views.generic.forum.actions import ForumActions
  5. from misago.threads.views.generic.forum.filtering import ForumFiltering
  6. from misago.threads.views.generic.forum.threads import ForumThreads
  7. from misago.threads.views.generic.threads import Sorting, ThreadsView
  8. __all__ = ['ForumView']
  9. class ForumView(ThreadsView):
  10. """
  11. Basic view for forum threads lists
  12. """
  13. template = 'misago/threads/forum.html'
  14. Threads = ForumThreads
  15. Sorting = Sorting
  16. Filtering = ForumFiltering
  17. Actions = ForumActions
  18. def dispatch(self, request, *args, **kwargs):
  19. forum = self.get_forum(request, **kwargs)
  20. forum.labels = Label.objects.get_forum_labels(forum)
  21. if forum.lft + 1 < forum.rght:
  22. forum.subforums = get_forums_list(request.user, forum)
  23. else:
  24. forum.subforums = []
  25. page_number = kwargs.pop('page', None)
  26. cleaned_kwargs = self.clean_kwargs(request, kwargs)
  27. sorting = self.Sorting(self.link_name, cleaned_kwargs)
  28. cleaned_kwargs = sorting.clean_kwargs(cleaned_kwargs)
  29. filtering = self.Filtering(forum, self.link_name, cleaned_kwargs)
  30. cleaned_kwargs = filtering.clean_kwargs(cleaned_kwargs)
  31. if cleaned_kwargs != kwargs:
  32. return redirect(self.link_name, **cleaned_kwargs)
  33. threads = self.Threads(request.user, forum)
  34. sorting.sort(threads)
  35. filtering.filter(threads)
  36. actions = self.Actions(user=request.user, forum=forum)
  37. if request.method == 'POST':
  38. # see if we can delegate anything to actions manager
  39. response = actions.handle_post(request, threads.get_queryset())
  40. if response:
  41. return response
  42. return self.render(request, {
  43. 'link_name': self.link_name,
  44. 'links_params': cleaned_kwargs,
  45. 'forum': forum,
  46. 'path': get_forum_path(forum),
  47. 'threads': threads.list(page_number),
  48. 'threads_count': threads.count(),
  49. 'page': threads.page,
  50. 'paginator': threads.paginator,
  51. 'list_actions': actions.get_list(),
  52. 'selected_threads': actions.get_selected_ids(),
  53. 'sorting': sorting,
  54. 'filtering': filtering,
  55. })