reply.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from django.db.models import F
  2. from misago.markup import Editor
  3. from misago.threads.checksums import update_post_checksum
  4. from misago.threads.forms.reply import (ReplyForm, ThreadForm,
  5. PrefixedThreadForm)
  6. from misago.threads.posting import EditorFormsetMiddleware, START, REPLY, EDIT
  7. class ReplyFormMiddleware(EditorFormsetMiddleware):
  8. def make_form(self):
  9. initial_data = {'title': self.thread.title, 'post': self.post.original}
  10. if self.mode == START:
  11. if self.request.method == 'POST':
  12. form = ThreadForm(self.thread, self.post, self.request.POST)
  13. else:
  14. form = ThreadForm(self.thread, self.post, initial=initial_data)
  15. else:
  16. if self.request.method == 'POST':
  17. form = ReplyForm(self.post, self.request.POST)
  18. else:
  19. form = ReplyForm(self.post, initial=initial_data)
  20. form.post_editor = Editor(form['post'])
  21. return form
  22. def pre_save(self, form):
  23. self.parsing_result.update(form.parsing_result)
  24. def save(self, form):
  25. # if we are starting new thread, create empty model
  26. if self.mode == START:
  27. self.thread.set_title(form.cleaned_data['title'])
  28. self.thread.starter_name = '-'
  29. self.thread.starter_slug = '-'
  30. self.thread.last_poster_name = '-'
  31. self.thread.last_poster_slug = '-'
  32. self.thread.started_on = self.datetime
  33. self.thread.last_post_on = self.datetime
  34. self.thread.save()
  35. # make changes/set data on post
  36. self.post.updated_on = self.datetime
  37. if self.mode == EDIT:
  38. self.post.last_editor_name = self.user
  39. self.post.poster_name = self.user.username
  40. self.post.poster_slug = self.user.slug
  41. else:
  42. self.post.thread = self.thread
  43. self.post.poster = self.user
  44. self.post.poster_name = self.user.username
  45. self.post.poster_ip = self.request._misago_real_ip
  46. self.post.posted_on = self.datetime
  47. self.post.post_checksum = update_post_checksum(self.post)
  48. self.post.save()
  49. # Update thread
  50. if self.mode == START:
  51. self.forum.threads += 1
  52. self.thread.set_first_post(self.post)
  53. if self.mode != EDIT:
  54. self.thread.set_last_post(self.post)
  55. if self.mode != REPLY:
  56. self.thread.replies += 1
  57. self.thread.save()
  58. # update forum
  59. if self.mode != EDIT:
  60. self.forum.set_last_thread(self.thread)
  61. self.forum.posts += 1
  62. self.forum.save()
  63. # update poster
  64. if self.mode == START:
  65. self.user.threads = F('threads') + 1
  66. if self.mode != EDIT:
  67. self.user.posts = F('posts') + 1
  68. self.user.save(update_fields=['threads', 'posts'])