delete.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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.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, allow_delete_event, allow_delete_post)
  10. from misago.threads.permissions import exclude_invisible_posts
  11. from misago.threads.serializers import DeletePostsSerializer
  12. DELETE_LIMIT = settings.MISAGO_POSTS_PER_PAGE + settings.MISAGO_POSTS_TAIL
  13. def delete_post(request, thread, post):
  14. if post.is_event:
  15. allow_delete_event(request.user, post)
  16. else:
  17. allow_delete_best_answer(request.user, post)
  18. allow_delete_post(request.user, post)
  19. moderation.delete_post(request.user, post)
  20. sync_related(thread)
  21. return Response({})
  22. def delete_bulk(request, thread):
  23. serializer = DeletePostsSerializer(
  24. data={'posts': request.data},
  25. context={
  26. 'thread': thread,
  27. 'user': request.user,
  28. },
  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()