12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- from django.core.exceptions import PermissionDenied
- from django.utils.translation import gettext as _
- from rest_framework.response import Response
- from misago.threads.serializers import MovePostsSerializer
- def posts_move_endpoint(request, thread, viewmodel):
- if not thread.acl["can_move_posts"]:
- raise PermissionDenied(_("You can't move posts in this thread."))
- serializer = MovePostsSerializer(
- data=request.data,
- context={"request": request, "thread": thread, "viewmodel": viewmodel},
- )
- if not serializer.is_valid():
- if "new_thread" in serializer.errors:
- errors = serializer.errors["new_thread"]
- else:
- errors = list(serializer.errors.values())[0]
- return Response({"detail": errors[0]}, status=400)
- new_thread = serializer.validated_data["new_thread"]
- for post in serializer.validated_data["posts"]:
- post.move(new_thread)
- post.save()
- thread.synchronize()
- thread.save()
- new_thread.synchronize()
- new_thread.save()
- thread.category.synchronize()
- thread.category.save()
- if thread.category != new_thread.category:
- new_thread.category.synchronize()
- new_thread.category.save()
- return Response({})
|