gotopostslist.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import ugettext as _
  3. from misago.threads.permissions import exclude_invisible_posts
  4. from misago.threads.views.generic.base import ViewBase
  5. __all__ = ['ModeratedPostsListView', 'ReportedPostsListView']
  6. class ModeratedPostsListView(ViewBase):
  7. template = 'misago/thread/gotolists/moderated.html'
  8. def allow_action(self, thread):
  9. if not thread.acl['can_review']:
  10. message = _("You don't have permission to review moderated posts.")
  11. raise PermissionDenied(message)
  12. def filter_posts_queryset(self, queryset):
  13. return queryset.filter(is_moderated=True)
  14. def dispatch(self, request, *args, **kwargs):
  15. relations = ['forum']
  16. thread = self.fetch_thread(request, select_related=relations, **kwargs)
  17. forum = thread.forum
  18. self.check_forum_permissions(request, forum)
  19. self.check_thread_permissions(request, thread)
  20. self.allow_action(thread)
  21. if not request.is_ajax():
  22. response = render(request, 'misago/errorpages/wrong_way.html')
  23. response.status_code = 405
  24. return response
  25. queryset = exclude_invisible_posts(
  26. thread.post_set, request.user, forum)
  27. queryset = self.filter_posts_queryset(queryset)
  28. final_queryset = queryset.select_related('poster').order_by('-id')[:15]
  29. return self.render(request, {
  30. 'forum': forum,
  31. 'thread': thread,
  32. 'posts_count': queryset.count(),
  33. 'posts': final_queryset.iterator()
  34. })
  35. class ReportedPostsListView(ModeratedPostsListView):
  36. template = 'misago/thread/gotolists/reported.html'
  37. def allow_action(self, thread):
  38. if not thread.acl['can_see_reports']:
  39. message = _("You don't have permission to see reports.")
  40. raise PermissionDenied(message)
  41. def filter_posts_queryset(self, queryset):
  42. return queryset.filter(is_reported=True)