threadstate.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. forum_acl = {
  10. 'can_change_threads_weight': 0,
  11. 'can_close_threads': 0,
  12. }
  13. forum_acl.update(self.user.acl['forums'].get(self.forum.pk))
  14. self.can_change_threads_weight = forum_acl['can_change_threads_weight']
  15. self.can_close_threads = forum_acl['can_close_threads']
  16. def make_form(self):
  17. StateFormType = None
  18. initial = {
  19. 'weight': self.thread_weight,
  20. 'is_closed': self.thread_is_closed,
  21. }
  22. if self.can_change_threads_weight and self.can_close_threads:
  23. StateFormType = FullThreadStateForm
  24. elif self.can_change_threads_weight:
  25. StateFormType = ThreadWeightForm
  26. elif self.can_close_threads:
  27. StateFormType = CloseThreadForm
  28. if StateFormType:
  29. if self.request.method == 'POST':
  30. return StateFormType(self.request.POST, prefix=self.prefix)
  31. else:
  32. return StateFormType(prefix=self.prefix, initial=initial)
  33. else:
  34. return False
  35. def pre_save(self, form):
  36. if self.can_change_threads_weight:
  37. if self.thread_weight != form.cleaned_data.get('weight'):
  38. self.thread.weight = form.cleaned_data.get('weight')
  39. self.thread.update_fields.append('weight')
  40. if self.can_close_threads:
  41. if self.thread_is_closed != form.cleaned_data.get('is_closed'):
  42. self.thread.is_closed = form.cleaned_data.get('is_closed')
  43. self.thread.update_fields.append('is_closed')
  44. def save(self, form):
  45. pass