goto.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. return redirect(self.get_redirect(request.user, thread))
  21. class GotoLastView(BaseGotoView):
  22. def get_redirect(self, user, thread):
  23. return goto.last(user, thread)
  24. class GotoNewView(BaseGotoView):
  25. def get_redirect(self, user, thread):
  26. return goto.new(user, thread)
  27. class GotoPostView(BaseGotoView):
  28. def get_redirect(self, user, thread, post):
  29. return goto.post(user, thread, post)
  30. def dispatch(self, request, *args, **kwargs):
  31. post = self.fetch_post(
  32. request, select_related=['thread', 'forum'], **kwargs)
  33. forum = post.forum
  34. thread = post.thread
  35. self.check_forum_permissions(request, forum)
  36. thread.forum = forum
  37. self.check_thread_permissions(request, thread)
  38. self.check_post_permissions(request, post)
  39. return redirect(self.get_redirect(request.user, thread, post))