delete.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import gettext as _
  3. from django.utils.translation import ngettext
  4. from rest_framework.response import Response
  5. from misago.conf import settings
  6. from misago.core.utils import clean_ids_list
  7. from misago.threads.moderation import posts as moderation
  8. from misago.threads.permissions import (
  9. allow_delete_best_answer,
  10. allow_delete_event,
  11. allow_delete_post,
  12. exclude_invisible_posts,
  13. )
  14. from misago.threads.serializers import DeletePostsSerializer
  15. DELETE_LIMIT = settings.MISAGO_POSTS_PER_PAGE + settings.MISAGO_POSTS_TAIL
  16. def delete_post(request, thread, post):
  17. if post.is_event:
  18. allow_delete_event(request.user_acl, post)
  19. else:
  20. allow_delete_best_answer(request.user_acl, post)
  21. allow_delete_post(request.user_acl, post)
  22. moderation.delete_post(request.user, post)
  23. sync_related(thread)
  24. return Response({})
  25. def delete_bulk(request, thread):
  26. serializer = DeletePostsSerializer(
  27. data={"posts": request.data},
  28. context={"thread": thread, "user_acl": request.user_acl},
  29. )
  30. if not serializer.is_valid():
  31. if "posts" in serializer.errors:
  32. errors = serializer.errors["posts"]
  33. else:
  34. errors = list(serializer.errors.values())[0]
  35. return Response({"detail": errors[0]}, status=400)
  36. for post in serializer.validated_data["posts"]:
  37. post.delete()
  38. sync_related(thread)
  39. return Response({})
  40. def sync_related(thread):
  41. thread.synchronize()
  42. thread.save()
  43. thread.category.synchronize()
  44. thread.category.save()