threads.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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.threads.views.generic.base import ViewBase
  7. __all__ = ['OrderThreadsMixin', 'ThreadsView']
  8. class OrderThreadsMixin(object):
  9. order_by = (
  10. ('recently-replied', ugettext_lazy("Recently replied")),
  11. ('last-replied', ugettext_lazy("Last replied")),
  12. ('most-replied', ugettext_lazy("Most replied")),
  13. ('least-replied', ugettext_lazy("Least replied")),
  14. ('newest', ugettext_lazy("Newest")),
  15. ('oldest', ugettext_lazy("Oldest")),
  16. )
  17. def get_ordering(self, kwargs):
  18. if kwargs.get('sort') in [o[0] for o in self.order_by]:
  19. return kwargs.get('sort')
  20. else:
  21. return self.order_by[0][0]
  22. def is_ordering_default(self, order_by):
  23. return self.order_by[0][0] == order_by
  24. def get_ordering_name(self, order_by):
  25. for ordering in self.order_by:
  26. if ordering[0] == order_by:
  27. return ordering[1]
  28. def get_orderings_dicts(self, exclude_ordering, links_params):
  29. url_kwargs = links_params.copy()
  30. dicts = []
  31. for ordering in self.order_by:
  32. if not dicts:
  33. url_kwargs.pop('sort', None)
  34. else:
  35. url_kwargs['sort'] = ordering[0]
  36. if ordering[0] != exclude_ordering:
  37. dicts.append({
  38. 'url': reverse(self.link_name, kwargs=url_kwargs),
  39. 'name': ordering[1],
  40. })
  41. return dicts
  42. class ThreadsView(ViewBase):
  43. def get_threads(self, request, kwargs):
  44. queryset = self.get_threads_queryset(request, forum)
  45. queryset = threads_qs.order_by('-last_post_id')
  46. page = paginate(threads_qs, kwargs.get('page', 0), 30, 10)
  47. threads = [thread for thread in page.object_list]
  48. return page, threads
  49. def get_threads_queryset(self, request):
  50. return forum.thread_set.all().order_by('-last_post_id')
  51. def add_threads_reads(self, request, threads):
  52. for thread in threads:
  53. thread.is_new = False
  54. import random
  55. for thread in threads:
  56. thread.is_new = random.choice((True, False))