posts.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from django.db import transaction
  2. from django.utils import timezone
  3. from django.utils.translation import ugettext as _
  4. from .exceptions import ModerationError
  5. __all__ = [
  6. 'approve_post',
  7. 'protect_post',
  8. 'unprotect_post',
  9. 'unhide_post',
  10. 'hide_post',
  11. 'delete_post',
  12. ]
  13. def approve_post(user, post):
  14. if post.is_unapproved:
  15. post.is_unapproved = False
  16. post.save(update_fields=['is_unapproved'])
  17. return True
  18. else:
  19. return False
  20. def protect_post(user, post):
  21. if not post.is_protected:
  22. post.is_protected = True
  23. post.save(update_fields=['is_protected'])
  24. if post.is_best_answer:
  25. post.thread.best_answer_is_protected = True
  26. post.thread.save(update_fields=['best_answer_is_protected'])
  27. return True
  28. else:
  29. return False
  30. def unprotect_post(user, post):
  31. if post.is_protected:
  32. post.is_protected = False
  33. post.save(update_fields=['is_protected'])
  34. if post.is_best_answer:
  35. post.thread.best_answer_is_protected = False
  36. post.thread.save(update_fields=['best_answer_is_protected'])
  37. return True
  38. else:
  39. return False
  40. def unhide_post(user, post):
  41. if post.is_first_post:
  42. raise ModerationError(_("You can't make original post visible without revealing thread."))
  43. if post.is_hidden:
  44. post.is_hidden = False
  45. post.save(update_fields=['is_hidden'])
  46. return True
  47. else:
  48. return False
  49. def hide_post(user, post):
  50. if post.is_first_post:
  51. raise ModerationError(_("You can't hide original post without hiding thread."))
  52. if not post.is_hidden:
  53. post.is_hidden = True
  54. post.hidden_by = user
  55. post.hidden_by_name = user.username
  56. post.hidden_by_slug = user.slug
  57. post.hidden_on = timezone.now()
  58. post.save(
  59. update_fields=[
  60. 'is_hidden',
  61. 'hidden_by',
  62. 'hidden_by_name',
  63. 'hidden_by_slug',
  64. 'hidden_on',
  65. ]
  66. )
  67. return True
  68. else:
  69. return False
  70. @transaction.atomic
  71. def delete_post(user, post):
  72. if post.is_first_post:
  73. raise ModerationError(_("You can't delete original post without deleting thread."))
  74. post.delete()
  75. return True