delete.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from rest_framework.response import Response
  2. from django.core.exceptions import PermissionDenied
  3. from django.utils.translation import ugettext as _
  4. from django.utils.translation import ungettext
  5. from misago.conf import settings
  6. from misago.threads.moderation import posts as moderation
  7. from misago.threads.permissions import (
  8. allow_delete_best_answer, allow_delete_event, allow_delete_post)
  9. from misago.threads.permissions import exclude_invisible_posts
  10. from misago.threads.serializers import DeletePostsSerializer
  11. DELETE_LIMIT = settings.MISAGO_POSTS_PER_PAGE + settings.MISAGO_POSTS_TAIL
  12. def delete_post(request, thread, post):
  13. if post.is_event:
  14. allow_delete_event(request.user, post)
  15. else:
  16. allow_delete_best_answer(request.user, post)
  17. allow_delete_post(request.user, post)
  18. moderation.delete_post(request.user, post)
  19. sync_related(thread)
  20. return Response({})
  21. def delete_bulk(request, thread):
  22. serializer = DeletePostsSerializer(
  23. data={'posts': request.data},
  24. context={
  25. 'thread': thread,
  26. 'user': request.user,
  27. },
  28. )
  29. serializer.is_valid(raise_exception=True)
  30. for post in serializer.validated_data['posts']:
  31. post.delete()
  32. sync_related(thread)
  33. return Response({})
  34. def sync_related(thread):
  35. thread.synchronize()
  36. thread.save()
  37. thread.category.synchronize()
  38. thread.category.save()