123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- from misago.threads.forms.posting import ThreadLabelForm
- from misago.threads.models import Label
- from misago.threads.moderation import label_thread, unlabel_thread
- from misago.threads.permissions import can_edit_thread
- from misago.threads.posting import PostingMiddleware, START, EDIT
- class ThreadLabelFormMiddleware(PostingMiddleware):
- def use_this_middleware(self):
- if (self.category.labels and
- self.category.acl['can_change_threads_labels']):
- self.label_id = self.thread.label_id
- if self.mode == START:
- return True
- if self.mode == EDIT and can_edit_thread(self.user, self.thread):
- return True
- return False
- def make_form(self):
- if self.request.method == 'POST':
- return ThreadLabelForm(self.request.POST, prefix=self.prefix,
- labels=self.category.labels)
- else:
- initial = {'label_id': self.label_id}
- return ThreadLabelForm(prefix=self.prefix,
- labels=self.category.labels,
- initial=initial)
- def pre_save(self, form):
- if form.is_valid() and self.mode == START:
- if self.label_id != form.cleaned_data.get('label'):
- if form.cleaned_data.get('label'):
- self.thread.label_id = form.cleaned_data.get('label')
- self.thread.update_fields.append('label')
- else:
- self.thread.label = None
- self.thread.update_fields.append('label')
- def post_save(self, form):
- if form.is_valid() and self.mode != START:
- if self.label_id != form.cleaned_data.get('label'):
- if form.cleaned_data.get('label'):
- labels_dict = Label.objects.get_cached_labels_dict()
- new_label = labels_dict.get(form.cleaned_data.get('label'))
- if new_label:
- label_thread(self.user, self.thread, new_label)
- else:
- unlabel_thread(self.user, self.thread)
|