threadlabel.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from misago.threads import moderation
  2. from misago.threads.forms.posting import ThreadLabelForm
  3. from misago.threads.models import Label
  4. from misago.threads.posting import PostingMiddleware, START
  5. class ThreadLabelFormMiddleware(PostingMiddleware):
  6. def use_this_middleware(self):
  7. if self.forum.acl['can_change_threads_labels'] and self.forum.labels:
  8. self.thread_label_id = self.thread.label_id
  9. return self.mode == START
  10. else:
  11. return False
  12. def make_form(self):
  13. if self.request.method == 'POST':
  14. return ThreadLabelForm(self.request.POST, prefix=self.prefix,
  15. labels=self.forum.labels)
  16. else:
  17. initial = {'label_id': self.thread_label_id}
  18. return ThreadLabelForm(prefix=self.prefix,
  19. labels=self.forum.labels,
  20. initial=initial)
  21. def pre_save(self, form):
  22. if form.is_valid() and self.mode == START:
  23. if self.thread_label_id != form.cleaned_data.get('label'):
  24. if form.cleaned_data.get('label'):
  25. self.thread.label_id = form.cleaned_data.get('label')
  26. self.thread.update_fields.append('label')
  27. else:
  28. self.thread.label = None
  29. self.thread.update_fields.append('label')
  30. def post_save(self, form):
  31. if form.is_valid() and self.mode != START:
  32. if self.thread_label_id != form.cleaned_data.get('label'):
  33. if form.cleaned_data.get('label'):
  34. labels_dict = Label.objects.get_cached_labels_dict()
  35. new_label = labels_dict.get(form.cleaned_data.get('label'))
  36. if new_label:
  37. label_thread(self.user, self.thread, new_label)
  38. else:
  39. unlabel_thread(self.user, self.thread)