12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from ...acl.objectacl import add_acl_to_obj
- from ...conf import settings
- from ...core.shortcuts import paginate, pagination_dict
- from ...threads.permissions import exclude_invisible_threads
- from ...threads.serializers import FeedSerializer
- from ...threads.utils import add_categories_to_items
- from ...threads.viewmodels import ThreadsRootCategory
- class UserThreads(object):
- def __init__(self, request, profile, page=0):
- root_category = ThreadsRootCategory(request)
- threads_categories = [root_category.unwrap()] + root_category.subcategories
- threads_queryset = self.get_threads_queryset(
- request, threads_categories, profile
- )
- posts_queryset = (
- self.get_posts_queryset(request.user, profile, threads_queryset)
- .filter(is_event=False, is_hidden=False, is_unapproved=False)
- .order_by("-id")
- )
- list_page = paginate(
- posts_queryset,
- page,
- settings.MISAGO_POSTS_PER_PAGE,
- settings.MISAGO_POSTS_TAIL,
- )
- paginator = pagination_dict(list_page)
- posts = list(list_page.object_list)
- threads = []
- for post in posts:
- threads.append(post.thread)
- add_categories_to_items(
- root_category.unwrap(), threads_categories, posts + threads
- )
- add_acl_to_obj(request.user_acl, threads)
- add_acl_to_obj(request.user_acl, posts)
- self._user = request.user
- self.posts = posts
- self.paginator = paginator
- def get_threads_queryset(self, request, threads_categories, profile):
- return exclude_invisible_threads(
- request.user_acl, threads_categories, profile.thread_set
- )
- def get_posts_queryset(self, user, profile, threads_queryset):
- return profile.post_set.select_related("thread", "poster").filter(
- id__in=threads_queryset.values("first_post_id")
- )
- def get_frontend_context(self):
- context = {
- "results": UserFeedSerializer(
- self.posts, many=True, context={"user": self._user}
- ).data
- }
- context.update(self.paginator)
- return context
- def get_template_context(self):
- return {"posts": self.posts, "paginator": self.paginator}
- UserFeedSerializer = FeedSerializer.exclude_fields("poster")
|