goto.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from django.http import Http404
  2. from django.shortcuts import redirect
  3. from misago.threads import goto
  4. from misago.threads.views.generic.base import ViewBase
  5. __all__ = [
  6. 'BaseGotoView',
  7. 'GotoLastView',
  8. 'GotoNewView',
  9. 'GotoPostView'
  10. ]
  11. class BaseGotoView(ViewBase):
  12. def get_redirect(self, user, thread):
  13. raise NotImplementedError("views inheriting form BaseGotoView "
  14. "should define get_redirect method")
  15. def dispatch(self, request, *args, **kwargs):
  16. thread = self.fetch_thread(request, select_related=['forum'], **kwargs)
  17. forum = thread.forum
  18. self.check_forum_permissions(request, forum)
  19. self.check_thread_permissions(request, thread)
  20. posts_qs = self.exclude_invisible_posts(
  21. thread.post_set, request.user, forum, thread)
  22. return redirect(self.get_redirect(request.user, thread, posts_qs))
  23. class GotoLastView(BaseGotoView):
  24. def get_redirect(self, user, thread, posts_qs):
  25. return goto.last(thread, posts_qs)
  26. class GotoNewView(BaseGotoView):
  27. def get_redirect(self, user, thread, posts_qs):
  28. return goto.new(user, thread, posts_qs)
  29. class GotoPostView(BaseGotoView):
  30. def get_redirect(self, thread, posts_qs, post):
  31. return goto.post(thread, posts_qs, post)
  32. def dispatch(self, request, *args, **kwargs):
  33. post = self.fetch_post(
  34. request, select_related=['thread', 'forum'], **kwargs)
  35. forum = post.forum
  36. thread = post.thread
  37. self.check_forum_permissions(request, forum)
  38. thread.forum = forum
  39. self.check_thread_permissions(request, thread)
  40. self.check_post_permissions(request, post)
  41. posts_qs = self.exclude_invisible_posts(
  42. thread.post_set, request.user, thread.forum, thread)
  43. return redirect(self.get_redirect(thread, posts_qs, post))