gotopostslist.py 1.9 KB

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