thread.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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', _('Undelete posts')))
  20. actions.append(('soft', _('Soft delete posts')))
  21. if acl['can_delete_posts'] == 2:
  22. actions.append(('hard', _('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', _('Undelete this thread')))
  38. else:
  39. actions.append(('soft', _('Soft delete this thread')))
  40. if acl['can_delete_threads'] == 2:
  41. actions.append(('hard', _('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().prefetch_related('rank')
  47. context['invite_form'] = FormFields(InviteMemberForm(request=self.request))
  48. return context
  49. def tracker_update(self, last_post):
  50. super(ThreadView, self).tracker_update(last_post)
  51. unread = self.tracker.unread_count(self.forum.thread_set.filter(participants__id=self.request.user.pk))
  52. self.request.user.sync_unread_pds(unread)
  53. self.request.user.save(force_update=True)