threads.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from django.core.urlresolvers import reverse
  2. from django.db.models import Q
  3. from django.shortcuts import redirect
  4. from django.utils.translation import ugettext_lazy, ugettext as _
  5. from misago.core.shortcuts import paginate
  6. from misago.readtracker import threadstracker
  7. from misago.threads.views.generic.base import ViewBase
  8. __all__ = ['OrderThreadsMixin', 'ThreadsView']
  9. class OrderThreadsMixin(object):
  10. order_by = (
  11. ('recently-replied', ugettext_lazy("Recently replied")),
  12. ('last-replied', ugettext_lazy("Last replied")),
  13. ('most-replied', ugettext_lazy("Most replied")),
  14. ('least-replied', ugettext_lazy("Least replied")),
  15. ('newest', ugettext_lazy("Newest")),
  16. ('oldest', ugettext_lazy("Oldest")),
  17. )
  18. def get_ordering(self, kwargs):
  19. if kwargs.get('sort') in [o[0] for o in self.order_by]:
  20. return kwargs.get('sort')
  21. else:
  22. return self.order_by[0][0]
  23. def is_ordering_default(self, order_by):
  24. return self.order_by[0][0] == order_by
  25. def get_ordering_name(self, order_by):
  26. for ordering in self.order_by:
  27. if ordering[0] == order_by:
  28. return ordering[1]
  29. def get_orderings_dicts(self, exclude_ordering, links_params):
  30. url_kwargs = links_params.copy()
  31. dicts = []
  32. for ordering in self.order_by:
  33. if not dicts:
  34. url_kwargs.pop('sort', None)
  35. else:
  36. url_kwargs['sort'] = ordering[0]
  37. if ordering[0] != exclude_ordering:
  38. dicts.append({
  39. 'url': reverse(self.link_name, kwargs=url_kwargs),
  40. 'name': ordering[1],
  41. })
  42. return dicts
  43. class ThreadsView(ViewBase):
  44. def get_threads(self, request, kwargs):
  45. queryset = self.get_threads_queryset(request, forum)
  46. queryset = threads_qs.order_by('-last_post_id')
  47. page = paginate(threads_qs, kwargs.get('page', 0), 30, 10)
  48. threads = [thread for thread in page.object_list]
  49. return page, threads
  50. def get_threads_queryset(self, request):
  51. return forum.thread_set.all().order_by('-last_post_id')
  52. def make_threads_read_aware(self, user, threads):
  53. threadstracker.make_read_aware(user, threads)