posts.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from django.conf import settings
  2. from misago.acl import add_acl
  3. from misago.core.shortcuts import paginate, pagination_dict
  4. from misago.readtracker.threadstracker import make_posts_read_aware
  5. from misago.users.online.utils import make_users_status_aware
  6. from misago.threads.permissions.threads import exclude_invisible_posts
  7. class ViewModel(object):
  8. def __init__(self, request, thread, page):
  9. posts_queryset = self.get_queryset(request, thread.thread)
  10. list_page = paginate(posts_queryset, page, settings.MISAGO_POSTS_PER_PAGE, settings.MISAGO_POSTS_TAIL)
  11. paginator = pagination_dict(list_page, include_page_range=False)
  12. posts = list(list_page.object_list)
  13. posters = []
  14. for post in posts:
  15. post.category = thread.category
  16. post.thread = thread.thread
  17. if post.poster and post.poster not in posters:
  18. posters.append(post.poster)
  19. add_acl(request.user, posts)
  20. make_posts_read_aware(request.user, thread.thread, posts)
  21. make_users_status_aware(request.user, posters)
  22. self.posts = posts
  23. self.paginator = paginator
  24. def get_queryset(self, request, thread):
  25. queryset = thread.post_set.select_related(
  26. 'poster',
  27. 'poster__rank',
  28. 'poster__ban_cache',
  29. 'poster__online_tracker'
  30. ).order_by('id')
  31. return exclude_invisible_posts(request.user, thread.category, queryset)
  32. def get_frontend_context(self):
  33. return {}
  34. def get_template_context(self):
  35. return {
  36. 'posts': self.posts,
  37. 'paginator': self.paginator
  38. }
  39. class ThreadPosts(ViewModel):
  40. pass