thread.py 2.7 KB

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