123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- from misago.markup import Editor
- from misago.threads.checksums import update_post_checksum
- from misago.threads.forms.posting import ReplyForm, ThreadForm
- from misago.threads.permissions import can_edit_thread
- from misago.threads.posting import PostingMiddleware, START, REPLY, EDIT
- class ReplyFormMiddleware(PostingMiddleware):
- def make_form(self):
- initial_data = {'title': self.thread.title, 'post': self.post.original}
- if self.mode == EDIT:
- is_first_post = self.post.id == self.thread.first_post_id
- if is_first_post and can_edit_thread(self.user, self.thread):
- FormType = ThreadForm
- else:
- FormType = ReplyForm
- elif self.mode == START:
- FormType = ThreadForm
- else:
- FormType = ReplyForm
- if FormType == ThreadForm:
- if self.request.method == 'POST':
- form = FormType(
- self.thread, self.post, self.request, self.request.POST)
- else:
- form = FormType(
- self.thread, self.post, self.request, initial=initial_data)
- else:
- if self.request.method == 'POST':
- form = FormType(
- self.post, self.request, self.request.POST)
- else:
- form = FormType(
- self.post, self.request, initial=initial_data)
- form.post_editor = Editor(form['post'], has_preview=True)
- return form
- def pre_save(self, form):
- if form.is_valid():
- self.parsing_result.update(form.parsing_result)
- def save(self, form):
- if self.mode == START:
- self.new_thread(form)
- if self.mode == EDIT:
- self.edit_post(form)
- else:
- self.new_post()
- self.post.updated_on = self.datetime
- self.post.save()
- update_post_checksum(self.post)
- self.post.update_fields.append('checksum')
- def new_thread(self, form):
- self.thread.set_title(form.cleaned_data['title'])
- self.thread.starter_name = self.user.username
- self.thread.starter_slug = self.user.slug
- self.thread.last_poster_name = self.user.username
- self.thread.last_poster_slug = self.user.slug
- self.thread.started_on = self.datetime
- self.thread.last_post_on = self.datetime
- self.thread.save()
- def edit_post(self, form):
- if form.cleaned_data.get('title'):
- self.thread.set_title(form.cleaned_data['title'])
- self.thread.update_fields.extend(('title', 'slug'))
- def new_post(self):
- self.post.thread = self.thread
- self.post.poster = self.user
- self.post.poster_name = self.user.username
- self.post.poster_ip = self.request._misago_real_ip
- self.post.posted_on = self.datetime
|