view.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from django.shortcuts import redirect
  2. from misago.categories.lists import get_categories_list, get_category_path
  3. from misago.core.shortcuts import validate_slug
  4. from misago.readtracker import categoriestracker
  5. from misago.threads.models import Label
  6. from misago.threads.views.generic.category.actions import ForumActions
  7. from misago.threads.views.generic.category.filtering import ForumFiltering
  8. from misago.threads.views.generic.category.threads import ForumThreads
  9. from misago.threads.views.generic.threads import Sorting, ThreadsView
  10. __all__ = ['ForumView']
  11. class ForumView(ThreadsView):
  12. """
  13. Basic view for category threads lists
  14. """
  15. template = 'misago/threads/category.html'
  16. Threads = ForumThreads
  17. Sorting = Sorting
  18. Filtering = ForumFiltering
  19. Actions = ForumActions
  20. def dispatch(self, request, *args, **kwargs):
  21. category = self.get_category(request, **kwargs)
  22. validate_slug(category, kwargs['category_slug'])
  23. category.labels = Label.objects.get_category_labels(category)
  24. if category.lft + 1 < category.rght:
  25. category.subcategories = get_categories_list(request.user, category)
  26. else:
  27. category.subcategories = []
  28. page_number = kwargs.pop('page', None)
  29. cleaned_kwargs = self.clean_kwargs(request, kwargs)
  30. link_name = request.resolver_match.view_name
  31. sorting = self.Sorting(link_name, cleaned_kwargs)
  32. cleaned_kwargs = sorting.clean_kwargs(cleaned_kwargs)
  33. filtering = self.Filtering(category, link_name, cleaned_kwargs)
  34. cleaned_kwargs = filtering.clean_kwargs(cleaned_kwargs)
  35. if cleaned_kwargs != kwargs:
  36. return redirect(link_name, **cleaned_kwargs)
  37. threads = self.Threads(request.user, category)
  38. sorting.sort(threads)
  39. filtering.filter(threads)
  40. actions = self.Actions(user=request.user, category=category)
  41. if request.method == 'POST':
  42. response = actions.handle_post(request, threads.get_queryset())
  43. if response:
  44. return response
  45. return self.render(request, {
  46. 'link_name': link_name,
  47. 'links_params': cleaned_kwargs,
  48. 'category': category,
  49. 'path': get_category_path(category),
  50. 'threads': threads.list(page_number),
  51. 'threads_count': threads.count(),
  52. 'page': threads.page,
  53. 'paginator': threads.paginator,
  54. 'threads_actions': actions,
  55. 'selected_threads': actions.get_selected_ids(),
  56. 'sorting': sorting,
  57. 'filtering': filtering,
  58. })