posts.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. def approve_post(user, post):
  6. if post.is_unapproved:
  7. post.is_unapproved = False
  8. post.save(update_fields=['is_unapproved'])
  9. return True
  10. else:
  11. return False
  12. def protect_post(user, post):
  13. if not post.is_protected:
  14. post.is_protected = True
  15. post.save(update_fields=['is_protected'])
  16. if post.is_best_answer:
  17. post.thread.best_answer_is_protected = True
  18. post.thread.save(update_fields=['best_answer_is_protected'])
  19. return True
  20. else:
  21. return False
  22. def unprotect_post(user, post):
  23. if post.is_protected:
  24. post.is_protected = False
  25. post.save(update_fields=['is_protected'])
  26. if post.is_best_answer:
  27. post.thread.best_answer_is_protected = False
  28. post.thread.save(update_fields=['best_answer_is_protected'])
  29. return True
  30. else:
  31. return False
  32. def unhide_post(user, post):
  33. if post.is_first_post:
  34. raise ModerationError(_("You can't make original post visible without revealing thread."))
  35. if post.is_hidden:
  36. post.is_hidden = False
  37. post.save(update_fields=['is_hidden'])
  38. return True
  39. else:
  40. return False
  41. def hide_post(user, post):
  42. if post.is_first_post:
  43. raise ModerationError(_("You can't hide original post without hiding thread."))
  44. if not post.is_hidden:
  45. post.is_hidden = True
  46. post.hidden_by = user
  47. post.hidden_by_name = user.username
  48. post.hidden_by_slug = user.slug
  49. post.hidden_on = timezone.now()
  50. post.save(
  51. update_fields=[
  52. 'is_hidden',
  53. 'hidden_by',
  54. 'hidden_by_name',
  55. 'hidden_by_slug',
  56. 'hidden_on',
  57. ]
  58. )
  59. return True
  60. else:
  61. return False
  62. @transaction.atomic
  63. def delete_post(user, post):
  64. if post.is_first_post:
  65. raise ModerationError(_("You can't delete original post without deleting thread."))
  66. post.delete()
  67. return True