threadlabel.py 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. from misago.threads.forms.posting import ThreadLabelForm
  2. from misago.threads.posting import PostingMiddleware, START
  3. class ThreadLabelFormMiddleware(PostingMiddleware):
  4. def use_this_middleware(self):
  5. if self.forum.acl['can_change_threads_labels'] and self.forum.labels:
  6. self.thread_label_id = self.thread.label_id
  7. return self.mode == START
  8. else:
  9. return False
  10. def make_form(self):
  11. if self.request.method == 'POST':
  12. return ThreadLabelForm(self.request.POST, prefix=self.prefix,
  13. labels=self.forum.labels)
  14. else:
  15. initial = {'label_id': self.thread_label_id}
  16. return ThreadLabelForm(prefix=self.prefix,
  17. labels=self.forum.labels,
  18. initial=initial)
  19. def pre_save(self, form):
  20. if form.is_valid():
  21. if self.thread_label_id != form.cleaned_data.get('label'):
  22. if form.cleaned_data.get('label'):
  23. self.thread.label_id = form.cleaned_data.get('label')
  24. self.thread.update_fields.append('label')
  25. else:
  26. self.thread.label = None
  27. self.thread.update_fields.append('label')