view.py 2.5 KB

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