reply.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from misago.markup import Editor
  2. from misago.threads.checksums import update_post_checksum
  3. from misago.threads.forms.reply import ReplyForm, ThreadForm
  4. from misago.threads.posting import PostingMiddleware, START, REPLY, EDIT
  5. class ReplyFormMiddleware(PostingMiddleware):
  6. def make_form(self):
  7. initial_data = {'title': self.thread.title, 'post': self.post.original}
  8. if self.mode == START:
  9. if self.request.method == 'POST':
  10. form = ThreadForm(self.thread, self.post, self.request.POST)
  11. else:
  12. form = ThreadForm(self.thread, self.post, initial=initial_data)
  13. else:
  14. if self.request.method == 'POST':
  15. form = ReplyForm(self.post, self.request.POST)
  16. else:
  17. form = ReplyForm(self.post, initial=initial_data)
  18. form.post_editor = Editor(form['post'])
  19. return form
  20. def pre_save(self, form):
  21. self.parsing_result.update(form.parsing_result)
  22. def save(self, form):
  23. if self.mode == START:
  24. self.new_thread(form)
  25. if self.mode == EDIT:
  26. self.edit_post()
  27. else:
  28. self.new_post()
  29. self.post.updated_on = self.datetime
  30. if self.mode != EDIT:
  31. self.post.save()# We need post id for checksum
  32. self.post.post_checksum = update_post_checksum(self.post)
  33. self.post.update_fields.append('checksum')
  34. def new_thread(self, form):
  35. self.thread.set_title(form.cleaned_data['title'])
  36. self.thread.starter_name = self.user.username
  37. self.thread.starter_slug = self.user.slug
  38. self.thread.last_poster_name = self.user.username
  39. self.thread.last_poster_slug = self.user.slug
  40. self.thread.started_on = self.datetime
  41. self.thread.last_post_on = self.datetime
  42. self.thread.save()
  43. def edit_post(self):
  44. self.post.last_editor_name = self.user
  45. self.post.poster_name = self.user.username
  46. self.post.poster_slug = self.user.slug
  47. def new_post(self):
  48. self.post.thread = self.thread
  49. self.post.poster = self.user
  50. self.post.poster_name = self.user.username
  51. self.post.poster_ip = self.request._misago_real_ip
  52. self.post.posted_on = self.datetime