delete.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 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_post(request.user, post)
  17. moderation.delete_post(request.user, post)
  18. sync_related(thread)
  19. return Response({})
  20. def delete_bulk(request, thread):
  21. serializer = DeletePostsSerializer(
  22. data={'posts': request.data},
  23. context={
  24. 'thread': thread,
  25. 'user': request.user,
  26. },
  27. )
  28. if not serializer.is_valid():
  29. if 'posts' in serializer.errors:
  30. errors = serializer.errors['posts']
  31. else:
  32. errors = list(serializer.errors.values())[0]
  33. return Response({'detail': errors[0]}, status=400)
  34. for post in serializer.validated_data['posts']:
  35. post.delete()
  36. sync_related(thread)
  37. return Response({})
  38. def sync_related(thread):
  39. thread.synchronize()
  40. thread.save()
  41. thread.category.synchronize()
  42. thread.category.save()