threadstate.py 2.0 KB

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