updatestats.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from django.db.models import F
  2. from misago.categories import THREADS_ROOT_NAME
  3. from . import PostingEndpoint, PostingMiddleware
  4. class UpdateStatsMiddleware(PostingMiddleware):
  5. def save(self, serializer):
  6. self.update_user(self.user, self.post)
  7. self.update_thread(self.thread, self.post)
  8. self.update_category(self.thread.category, self.thread, self.post)
  9. def update_category(self, category, thread, post):
  10. if post.is_unapproved:
  11. return # don't update category on moderated post
  12. if self.mode == PostingEndpoint.START:
  13. category.threads = F('threads') + 1
  14. if self.mode != PostingEndpoint.EDIT:
  15. category.set_last_thread(thread)
  16. category.posts = F('posts') + 1
  17. category.update_all = True
  18. def update_thread(self, thread, post):
  19. if post.is_unapproved:
  20. thread.has_unapproved_posts = True
  21. else:
  22. if self.mode != PostingEndpoint.EDIT:
  23. thread.set_last_post(post)
  24. if self.mode == PostingEndpoint.REPLY:
  25. thread.replies = F('replies') + 1
  26. thread.update_all = True
  27. def update_user(self, user, post):
  28. if post.is_unapproved:
  29. return # don't update user on moderated post
  30. if self.thread.thread_type.root_name == THREADS_ROOT_NAME:
  31. if self.mode == PostingEndpoint.START:
  32. user.threads = F('threads') + 1
  33. user.update_fields.append('threads')
  34. if self.mode != PostingEndpoint.EDIT:
  35. user.posts = F('posts') + 1
  36. user.update_fields.append('posts')