delete.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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 allow_delete_event, allow_delete_post
  8. from misago.threads.permissions import exclude_invisible_posts
  9. from misago.threads.serializers import DeletePostsSerializer
  10. DELETE_LIMIT = settings.MISAGO_POSTS_PER_PAGE + settings.MISAGO_POSTS_TAIL
  11. def delete_post(request, thread, post):
  12. if post.is_event:
  13. allow_delete_event(request.user, post)
  14. else:
  15. allow_delete_post(request.user, post)
  16. moderation.delete_post(request.user, post)
  17. sync_related(thread)
  18. return Response({})
  19. def delete_bulk(request, thread):
  20. serializer = DeletePostsSerializer(
  21. data={'posts': request.data},
  22. context={
  23. 'thread': thread,
  24. 'user': request.user,
  25. },
  26. )
  27. if not serializer.is_valid():
  28. return Response(serializer.errors, status=400)
  29. for post in serializer.validated_data['posts']:
  30. post.delete()
  31. sync_related(thread)
  32. return Response({})
  33. def sync_related(thread):
  34. thread.synchronize()
  35. thread.save()
  36. thread.category.synchronize()
  37. thread.category.save()