pin.py 961 B

1234567891011121314151617181920212223242526272829
  1. from rest_framework import serializers
  2. from misago.threads import moderation
  3. from misago.threads.models import Thread
  4. from . import PostingEndpoint, PostingMiddleware
  5. class PinMiddleware(PostingMiddleware):
  6. def use_this_middleware(self):
  7. return self.mode == PostingEndpoint.START
  8. def get_serializer(self):
  9. return PinSerializer(data=self.request.data)
  10. def post_save(self, serializer):
  11. allowed_pin = self.thread.category.acl["can_pin_threads"]
  12. if allowed_pin > 0:
  13. pin = serializer.validated_data["pin"]
  14. if pin <= allowed_pin:
  15. if pin == Thread.WEIGHT_GLOBAL:
  16. moderation.pin_thread_globally(self.request, self.thread)
  17. elif pin == Thread.WEIGHT_PINNED:
  18. moderation.pin_thread_locally(self.request, self.thread)
  19. class PinSerializer(serializers.Serializer):
  20. pin = serializers.IntegerField(required=False, default=0)