thread.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from django.utils.translation import ugettext as _
  2. from misago.apps.threadtype.thread import ThreadBaseView, ThreadModeration, PostsModeration
  3. from misago.messages import Message
  4. from misago.models import Forum, Thread
  5. from misago.apps.reports.mixins import TypeMixin
  6. class ThreadView(ThreadBaseView, ThreadModeration, PostsModeration, TypeMixin):
  7. def fetch_thread(self):
  8. super(ThreadView, self).fetch_thread()
  9. self.thread.original_weight = self.thread.weight
  10. def posts_actions(self):
  11. acl = self.request.acl.threads.get_role(self.thread.forum_id)
  12. actions = []
  13. try:
  14. if acl['can_delete_posts']:
  15. if self.thread.replies_deleted > 0:
  16. actions.append(('undelete', _('Restore posts')))
  17. actions.append(('soft', _('Hide posts')))
  18. if acl['can_delete_posts'] == 2:
  19. actions.append(('hard', _('Delete posts')))
  20. except KeyError:
  21. pass
  22. return actions
  23. def thread_actions(self):
  24. acl = self.request.acl.threads.get_role(self.thread.forum_id)
  25. actions = []
  26. try:
  27. if self.thread.weight != 1:
  28. actions.append(('sticky', _('Change to resolved')))
  29. if self.thread.weight != 0:
  30. actions.append(('normal', _('Change to bogus')))
  31. if acl['can_delete_threads']:
  32. if self.thread.deleted:
  33. actions.append(('undelete', _('Restore this report')))
  34. else:
  35. actions.append(('soft', _('Hide this report')))
  36. if acl['can_delete_threads'] == 2:
  37. actions.append(('hard', _('Delete this report')))
  38. except KeyError:
  39. pass
  40. return actions
  41. def after_thread_action_sticky(self):
  42. self.thread.set_checkpoint(self.request, 'resolved')
  43. if self.thread.original_weight == 2:
  44. self.request.monitor.decrease('reported_posts')
  45. self.request.messages.set_flash(Message(_('Report has been set as resolved.')), 'success', 'threads')
  46. def after_thread_action_normal(self):
  47. self.thread.set_checkpoint(self.request, 'bogus')
  48. if self.thread.original_weight == 2:
  49. self.request.monitor.decrease('reported_posts')
  50. self.request.messages.set_flash(Message(_('Report has been set as bogus.')), 'success', 'threads')
  51. def after_thread_action_undelete(self):
  52. if self.thread.original_weight == 2:
  53. self.request.monitor.increase('reported_posts')
  54. self.request.messages.set_flash(Message(_('Report has been restored.')), 'success', 'threads')
  55. def after_thread_action_soft(self):
  56. if self.thread.original_weight == 2:
  57. self.request.monitor.decrease('reported_posts')
  58. self.request.messages.set_flash(Message(_('Report has been hidden.')), 'success', 'threads')
  59. def after_thread_action_hard(self):
  60. self.request.messages.set_flash(Message(_('Report "%(thread)s" has been deleted.') % {'thread': self.thread.name}), 'success', 'threads')