thread.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from django.utils.translation import ugettext as _
  2. from misago.apps.threadtype.thread import ThreadBaseView, ThreadModeration, PostsModeration
  3. from misago.models import Forum, Thread
  4. from misago.apps.privatethreads.mixins import TypeMixin
  5. from misago.apps.privatethreads.forms import InviteMemberForm
  6. class ThreadView(ThreadBaseView, ThreadModeration, PostsModeration, TypeMixin):
  7. def posts_actions(self):
  8. acl = self.request.acl.threads.get_role(self.thread.forum_id)
  9. actions = []
  10. try:
  11. if acl['can_move_threads_posts']:
  12. actions.append(('merge', _('Merge posts into one')))
  13. if acl['can_protect_posts']:
  14. actions.append(('protect', _('Protect posts')))
  15. actions.append(('unprotect', _('Remove posts protection')))
  16. if acl['can_delete_posts']:
  17. if self.thread.replies_deleted > 0:
  18. actions.append(('undelete', _('Restore posts')))
  19. actions.append(('soft', _('Hide posts')))
  20. if acl['can_delete_posts'] == 2:
  21. actions.append(('hard', _('Delete posts')))
  22. except KeyError:
  23. pass
  24. return actions
  25. def thread_actions(self):
  26. acl = self.request.acl.threads.get_role(self.thread.forum_id)
  27. actions = []
  28. try:
  29. if acl['can_close_threads']:
  30. if self.thread.closed:
  31. actions.append(('open', _('Open this thread')))
  32. else:
  33. actions.append(('close', _('Close this thread')))
  34. if acl['can_delete_threads']:
  35. if self.thread.deleted:
  36. actions.append(('undelete', _('Restore this thread')))
  37. else:
  38. actions.append(('soft', _('Hide this thread')))
  39. if acl['can_delete_threads'] == 2:
  40. actions.append(('hard', _('Delete this thread')))
  41. except KeyError:
  42. pass
  43. return actions
  44. def template_vars(self, context):
  45. context['participants'] = self.thread.participants.all().order_by('username_slug').prefetch_related('rank')
  46. context['invite_form'] = InviteMemberForm(request=self.request)
  47. return context
  48. def tracker_queryset(self):
  49. return self.forum.thread_set.filter(participants__id=self.request.user.pk)
  50. def tracker_update(self, last_post):
  51. super(ThreadView, self).tracker_update(last_post)
  52. unread = self.tracker.unread_count(self.forum.thread_set.filter(participants__id=self.request.user.pk))
  53. self.request.user.sync_unread_pds(unread)
  54. self.request.user.save(force_update=True)