reply.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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.permissions import can_edit_thread
  5. from misago.threads.posting import PostingMiddleware, START, REPLY, EDIT
  6. class ReplyFormMiddleware(PostingMiddleware):
  7. def make_form(self):
  8. initial_data = {'title': self.thread.title, 'post': self.post.original}
  9. if self.mode == EDIT:
  10. is_first_post = self.post.id == self.thread.first_post_id
  11. if is_first_post and can_edit_thread(self.user, self.thread):
  12. FormType = ThreadForm
  13. else:
  14. FormType = ReplyForm
  15. elif self.mode == START:
  16. FormType = ThreadForm
  17. else:
  18. FormType = ReplyForm
  19. if FormType == ThreadForm:
  20. if self.request.method == 'POST':
  21. form = FormType(self.thread, self.post, self.request.POST)
  22. else:
  23. form = FormType(self.thread, self.post, initial=initial_data)
  24. else:
  25. if self.request.method == 'POST':
  26. form = FormType(self.post, self.request.POST)
  27. else:
  28. form = FormType(self.post, initial=initial_data)
  29. form.post_editor = Editor(form['post'])
  30. return form
  31. def pre_save(self, form):
  32. if form.is_valid():
  33. self.parsing_result.update(form.parsing_result)
  34. def save(self, form):
  35. if self.mode == START:
  36. self.new_thread(form)
  37. if self.mode == EDIT:
  38. self.edit_post(form)
  39. else:
  40. self.new_post()
  41. self.post.updated_on = self.datetime
  42. self.post.save()
  43. update_post_checksum(self.post)
  44. self.post.update_fields.append('checksum')
  45. def new_thread(self, form):
  46. self.thread.set_title(form.cleaned_data['title'])
  47. self.thread.starter_name = self.user.username
  48. self.thread.starter_slug = self.user.slug
  49. self.thread.last_poster_name = self.user.username
  50. self.thread.last_poster_slug = self.user.slug
  51. self.thread.started_on = self.datetime
  52. self.thread.last_post_on = self.datetime
  53. self.thread.save()
  54. def edit_post(self, form):
  55. if form.cleaned_data.get('title'):
  56. self.thread.set_title(form.cleaned_data['title'])
  57. self.thread.update_fields.extend(('title', 'slug'))
  58. def new_post(self):
  59. self.post.thread = self.thread
  60. self.post.poster = self.user
  61. self.post.poster_name = self.user.username
  62. self.post.poster_ip = self.request._misago_real_ip
  63. self.post.posted_on = self.datetime