threadpin.py 896 B

123456789101112131415161718192021222324
  1. from misago.threads.forms.posting import ThreadPinForm
  2. from misago.threads.posting import PostingMiddleware
  3. class ThreadPinFormMiddleware(PostingMiddleware):
  4. def use_this_middleware(self):
  5. if self.forum.acl['can_pin_threads']:
  6. self.is_pinned = self.thread.is_pinned
  7. return True
  8. else:
  9. return False
  10. def make_form(self):
  11. if self.request.method == 'POST':
  12. return ThreadPinForm(self.request.POST, prefix=self.prefix)
  13. else:
  14. initial = {'is_pinned': self.is_pinned}
  15. return ThreadPinForm(prefix=self.prefix, initial=initial)
  16. def pre_save(self, form):
  17. if form.is_valid():
  18. if self.is_pinned != form.cleaned_data.get('is_pinned'):
  19. self.thread.is_pinned = form.cleaned_data.get('is_pinned')
  20. self.thread.update_fields.append('is_pinned')