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. if can_edit_thread(self.user, self.thread):
  11. FormType = ThreadForm
  12. else:
  13. FormType = FormType
  14. elif self.mode == START:
  15. FormType = ThreadForm
  16. else:
  17. FormType = FormType
  18. if FormType == ThreadForm:
  19. if self.request.method == 'POST':
  20. form = ThreadForm(self.thread, self.post, self.request.POST)
  21. else:
  22. form = ThreadForm(self.thread, self.post, initial=initial_data)
  23. else:
  24. if self.request.method == 'POST':
  25. form = FormType(self.post, self.request.POST)
  26. else:
  27. form = FormType(self.post, initial=initial_data)
  28. form.post_editor = Editor(form['post'])
  29. return form
  30. def pre_save(self, form):
  31. if form.is_valid():
  32. self.parsing_result.update(form.parsing_result)
  33. def save(self, form):
  34. if self.mode == START:
  35. self.new_thread(form)
  36. if self.mode == EDIT:
  37. self.edit_post(form)
  38. else:
  39. self.new_post()
  40. self.post.updated_on = self.datetime
  41. self.post.save()
  42. update_post_checksum(self.post)
  43. self.post.update_fields.append('checksum')
  44. def new_thread(self, form):
  45. self.thread.set_title(form.cleaned_data['title'])
  46. self.thread.starter_name = self.user.username
  47. self.thread.starter_slug = self.user.slug
  48. self.thread.last_poster_name = self.user.username
  49. self.thread.last_poster_slug = self.user.slug
  50. self.thread.started_on = self.datetime
  51. self.thread.last_post_on = self.datetime
  52. self.thread.save()
  53. def edit_post(self, form):
  54. if form.cleaned_data.get('title'):
  55. self.thread.set_title(form.cleaned_data['title'])
  56. self.thread.update_fields.extend(('title', 'slug'))
  57. self.post.last_editor_name = self.user.username
  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