goto.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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__ = ['BaseGotoView', 'GotoLastView', 'GotoNewView', 'GotoPostView']
  6. class BaseGotoView(ViewBase):
  7. def get_redirect(self, user, thread):
  8. raise NotImplementedError("views inheriting form BaseGotoView "
  9. "should define get_redirect method")
  10. def dispatch(self, request, *args, **kwargs):
  11. thread = self.fetch_thread(request, select_related=['forum'], **kwargs)
  12. forum = thread.forum
  13. self.check_forum_permissions(request, forum)
  14. self.check_thread_permissions(request, thread)
  15. return redirect(self.get_redirect(request.user, thread))
  16. class GotoLastView(BaseGotoView):
  17. def get_redirect(self, user, thread):
  18. return goto.last(user, thread)
  19. class GotoNewView(BaseGotoView):
  20. def get_redirect(self, user, thread):
  21. return goto.new(user, thread)
  22. class GotoPostView(BaseGotoView):
  23. def get_redirect(self, user, thread, post):
  24. return goto.post(user, thread, post)
  25. def dispatch(self, request, *args, **kwargs):
  26. post = self.fetch_post(
  27. request, select_related=['thread', 'forum'], **kwargs)
  28. forum = post.forum
  29. thread = post.thread
  30. self.check_forum_permissions(request, forum)
  31. thread.forum = forum
  32. self.check_thread_permissions(request, thread)
  33. self.check_post_permissions(request, post)
  34. return redirect(self.get_redirect(request.user, thread, post))