reply.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from misago.markup import Editor
  2. from misago.threads.checksums import update_post_checksum
  3. from misago.threads.forms.posting 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. if form.is_valid():
  22. self.parsing_result.update(form.parsing_result)
  23. def save(self, form):
  24. if self.mode == START:
  25. self.new_thread(form)
  26. if self.mode == EDIT:
  27. self.edit_post()
  28. else:
  29. self.new_post()
  30. self.post.updated_on = self.datetime
  31. if self.mode != EDIT:
  32. self.post.save()# We need post id for checksum
  33. update_post_checksum(self.post)
  34. self.post.update_fields.append('checksum')
  35. def new_thread(self, form):
  36. self.thread.set_title(form.cleaned_data['title'])
  37. self.thread.starter_name = self.user.username
  38. self.thread.starter_slug = self.user.slug
  39. self.thread.last_poster_name = self.user.username
  40. self.thread.last_poster_slug = self.user.slug
  41. self.thread.started_on = self.datetime
  42. self.thread.last_post_on = self.datetime
  43. self.thread.save()
  44. def edit_post(self):
  45. self.post.last_editor_name = self.user
  46. self.post.poster_name = self.user.username
  47. self.post.poster_slug = self.user.slug
  48. def new_post(self):
  49. self.post.thread = self.thread
  50. self.post.poster = self.user
  51. self.post.poster_name = self.user.username
  52. self.post.poster_ip = self.request._misago_real_ip
  53. self.post.posted_on = self.datetime