privatethreads.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from django.utils.translation import ugettext as _
  2. from misago.acl import add_acl
  3. from misago.forums.models import Forum
  4. from misago.threads.permissions import (allow_use_private_threads,
  5. exclude_invisible_private_threads)
  6. from misago.threads.views import generic
  7. from misago.threads.views.posting import PostingView as BasePostingView
  8. class PrivateThreads(generic.Threads):
  9. def get_queryset(self):
  10. threads_qs = Forum.objects.private_threads().thread_set
  11. return exclude_invisible_private_threads(threads_qs, self.user)
  12. class PrivateThreadsFiltering(generic.ThreadsFiltering):
  13. def get_available_filters(self):
  14. filters = super(PrivateThreadsFiltering, self).get_available_filters()
  15. if self.user.acl['can_moderate_private_threads']:
  16. filters.append({
  17. 'type': 'reported',
  18. 'name': _("With reported posts"),
  19. 'is_label': False,
  20. })
  21. return filters
  22. def private_threads_view(klass):
  23. def get_forum(self, request, lock=False, **kwargs):
  24. forum = Forum.objects.private_threads()
  25. add_acl(request.user, forum)
  26. return forum
  27. def dispatch(self, request, *args, **kwargs):
  28. allow_use_private_threads(request.user)
  29. return super(self.__class__, self).dispatch(
  30. request, *args, **kwargs)
  31. klass.get_forum = get_forum
  32. klass.dispatch = dispatch
  33. return klass
  34. @private_threads_view
  35. class ThreadsView(generic.ThreadsView):
  36. link_name = 'misago:private_threads'
  37. template = 'misago/privatethreads/list.html'
  38. Threads = PrivateThreads
  39. Filtering = PrivateThreadsFiltering
  40. @private_threads_view
  41. class ThreadView(generic.ThreadView):
  42. pass
  43. @private_threads_view
  44. class GotoLastView(generic.GotoLastView):
  45. pass
  46. @private_threads_view
  47. class GotoNewView(generic.GotoNewView):
  48. pass
  49. @private_threads_view
  50. class GotoPostView(generic.GotoPostView):
  51. pass
  52. @private_threads_view
  53. class PostingView(BasePostingView):
  54. pass