threadpin.py 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. from misago.threads import moderation
  2. from misago.threads.forms.posting import ThreadPinForm
  3. from misago.threads.posting import PostingMiddleware, START
  4. class ThreadPinFormMiddleware(PostingMiddleware):
  5. def use_this_middleware(self):
  6. if self.forum.acl['can_pin_threads']:
  7. self.is_pinned = self.thread.is_pinned
  8. return True
  9. else:
  10. return False
  11. def make_form(self):
  12. if self.request.method == 'POST':
  13. return ThreadPinForm(self.request.POST, prefix=self.prefix)
  14. else:
  15. initial = {'is_pinned': self.is_pinned}
  16. return ThreadPinForm(prefix=self.prefix, initial=initial)
  17. def pre_save(self, form):
  18. if form.is_valid() and self.mode == START:
  19. if form.cleaned_data.get('is_pinned'):
  20. self.thread.is_pinned = form.cleaned_data.get('is_pinned')
  21. self.thread.update_fields.append('is_pinned')
  22. def post_save(self, form):
  23. if form.is_valid() and self.mode != START:
  24. if self.is_pinned != form.cleaned_data.get('is_pinned'):
  25. if self.thread.is_pinned:
  26. moderation.unpin_thread(self.user, self.thread)
  27. else:
  28. moderation.pin_thread(self.user, self.thread)