threadstate.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from misago.threads.forms.reply import (FullThreadStateForm, ThreadWeightForm,
  2. CloseThreadForm)
  3. from misago.threads.posting import PostingMiddleware, START, REPLY, EDIT
  4. class ThreadStateFormMiddleware(PostingMiddleware):
  5. def __init__(self, **kwargs):
  6. super(ThreadStateFormMiddleware, self).__init__(**kwargs)
  7. self.thread_weight = self.thread.weight
  8. self.thread_is_closed = self.thread.is_closed
  9. def make_form(self):
  10. StateFormType = None
  11. initial = {
  12. 'weight': self.thread_weight,
  13. 'is_closed': self.thread_is_closed,
  14. }
  15. can_change_threads_weight = self.forum.acl['can_change_threads_weight']
  16. can_close_threads = self.forum.acl['can_close_threads']
  17. if can_change_threads_weight and can_close_threads:
  18. StateFormType = FullThreadStateForm
  19. elif can_change_threads_weight:
  20. StateFormType = ThreadWeightForm
  21. elif can_close_threads:
  22. StateFormType = CloseThreadForm
  23. if StateFormType:
  24. if self.request.method == 'POST':
  25. return StateFormType(self.request.POST, prefix=self.prefix)
  26. else:
  27. return StateFormType(prefix=self.prefix, initial=initial)
  28. else:
  29. return False
  30. def pre_save(self, form):
  31. if self.forum.acl['can_change_threads_weight']:
  32. if self.thread_weight != form.cleaned_data.get('weight'):
  33. self.thread.weight = form.cleaned_data.get('weight')
  34. self.thread.update_fields.append('weight')
  35. if self.forum.acl['can_close_threads']:
  36. if self.thread_is_closed != form.cleaned_data.get('is_closed'):
  37. self.thread.is_closed = form.cleaned_data.get('is_closed')
  38. self.thread.update_fields.append('is_closed')
  39. def save(self, form):
  40. pass