pin.py 845 B

1234567891011121314151617181920212223
  1. from misago.threads import moderation
  2. from misago.threads.models import Thread
  3. from . import PostingEndpoint, PostingMiddleware
  4. class PinMiddleware(PostingMiddleware):
  5. def use_this_middleware(self):
  6. return self.mode == PostingEndpoint.START and 'pin' in self.request.data
  7. def post_save(self, serializer):
  8. allowed_pin = self.thread.category.acl['can_pin_threads']
  9. if allowed_pin > 0:
  10. try:
  11. pin = int(self.request.data['pin'])
  12. except (TypeError, ValueError):
  13. pin = 0
  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)