threadlabel.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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.forum.labels and self.forum.acl['can_change_threads_labels']:
  9. self.label_id = self.thread.label_id
  10. if self.mode == START:
  11. return True
  12. if self.mode == EDIT and can_edit_thread(self.user, self.thread):
  13. return True
  14. return False
  15. def make_form(self):
  16. if self.request.method == 'POST':
  17. return ThreadLabelForm(self.request.POST, prefix=self.prefix,
  18. labels=self.forum.labels)
  19. else:
  20. initial = {'label_id': self.label_id}
  21. return ThreadLabelForm(prefix=self.prefix,
  22. labels=self.forum.labels,
  23. initial=initial)
  24. def pre_save(self, form):
  25. if form.is_valid() and self.mode == START:
  26. if self.label_id != form.cleaned_data.get('label'):
  27. if form.cleaned_data.get('label'):
  28. self.thread.label_id = form.cleaned_data.get('label')
  29. self.thread.update_fields.append('label')
  30. else:
  31. self.thread.label = None
  32. self.thread.update_fields.append('label')
  33. def post_save(self, form):
  34. if form.is_valid() and self.mode != START:
  35. if self.label_id != form.cleaned_data.get('label'):
  36. if form.cleaned_data.get('label'):
  37. labels_dict = Label.objects.get_cached_labels_dict()
  38. new_label = labels_dict.get(form.cleaned_data.get('label'))
  39. if new_label:
  40. label_thread(self.user, self.thread, new_label)
  41. else:
  42. unlabel_thread(self.user, self.thread)