mixins.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from django.core.urlresolvers import reverse
  2. from django.shortcuts import redirect
  3. from django.utils.translation import ugettext as _
  4. from misago.acl.exceptions import ACLError404
  5. class TypeMixin(object):
  6. type_prefix = 'private_thread'
  7. def type_available(self):
  8. return self.request.settings['enable_private_threads']
  9. def check_permissions(self):
  10. try:
  11. if self.thread.pk:
  12. if not ((self.thread.replies_reported > 0 and self.request.acl.private_threads.is_mod())
  13. or (self.request.user in self.thread.participants.all())):
  14. raise ACLError404()
  15. except AttributeError:
  16. pass
  17. def invite_users(self, users):
  18. sync_last_post = False
  19. for user in users:
  20. if not user in self.thread.participants.all():
  21. self.thread.participants.add(user)
  22. user.email_user(self.request, 'private_thread_invite', _("You've been invited to private thread \"%(thread)s\" by %(user)s") % {'thread': self.thread.name, 'user': self.request.user.username}, {'author': self.request.user, 'thread': self.thread})
  23. if self.action == 'new_reply':
  24. self.thread.last_post.set_checkpoint(self.request, 'invited', user)
  25. if sync_last_post:
  26. self.thread.last_post.save(force_update=True)
  27. def force_stats_sync(self):
  28. self.thread.participants.exclude(id=self.request.user.id).update(sync_pds=True)
  29. def whitelist_mentions(self):
  30. try:
  31. if self.md.mentions:
  32. participants = self.thread.participants.all()
  33. mentioned = self.post.mentions.all()
  34. for user in self.md.mentions:
  35. if user not in participants and user not in mentioned:
  36. self.post.mentioned.add(user)
  37. except AttributeError:
  38. pass
  39. def threads_list_redirect(self):
  40. return redirect(reverse('private_threads'))