threadlabel.py 2.1 KB

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