views.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.utils.translation import ugettext as _
  2. from misago.apps.forumbase.list import ThreadsListBaseView, ThreadsListModeration
  3. from misago.models import Forum, Thread
  4. from misago.readstrackers import ThreadsTracker
  5. from misago.utils.pagination import make_pagination
  6. from misago.apps.announcements.mixins import TypeMixin
  7. class ThreadsListView(ThreadsListBaseView, ThreadsListModeration, TypeMixin):
  8. def fetch_forum(self):
  9. self.forum = Forum.objects.get(special='announcements')
  10. def fetch_threads(self):
  11. queryset = self.request.acl.threads.filter_threads(self.request, self.forum, Thread.objects.filter(forum=self.forum))
  12. self.count = queryset.count()
  13. self.pagination = make_pagination(self.kwargs.get('page', 0), self.count, self.request.settings.threads_per_page)
  14. if self.request.settings.avatars_on_threads_list:
  15. queryset = queryset.prefetch_related('start_poster', 'last_poster')
  16. tracker = ThreadsTracker(self.request, self.forum)
  17. for thread in queryset[self.pagination['start']:self.pagination['stop']]:
  18. thread.is_read = tracker.is_read(thread)
  19. self.threads.append(thread)
  20. def threads_actions(self):
  21. acl = self.request.acl.threads.get_role(self.forum)
  22. actions = []
  23. try:
  24. if acl['can_approve']:
  25. actions.append(('accept', _('Accept threads')))
  26. if acl['can_close_threads']:
  27. actions.append(('open', _('Open threads')))
  28. actions.append(('close', _('Close threads')))
  29. if acl['can_delete_threads']:
  30. actions.append(('undelete', _('Undelete threads')))
  31. actions.append(('soft', _('Soft delete threads')))
  32. if acl['can_delete_threads'] == 2:
  33. actions.append(('hard', _('Hard delete threads')))
  34. except KeyError:
  35. pass
  36. return actions