goto.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. 'GotoReportedView',
  10. 'GotoModeratedView',
  11. 'GotoPostView'
  12. ]
  13. class BaseGotoView(ViewBase):
  14. def get_redirect(self, user, thread):
  15. raise NotImplementedError("views inheriting form BaseGotoView "
  16. "should define get_redirect method")
  17. def dispatch(self, request, *args, **kwargs):
  18. thread = self.fetch_thread(request, select_related=['forum'], **kwargs)
  19. forum = thread.forum
  20. self.check_forum_permissions(request, forum)
  21. self.check_thread_permissions(request, thread)
  22. return redirect(self.get_redirect(request.user, thread))
  23. class GotoLastView(BaseGotoView):
  24. def get_redirect(self, user, thread):
  25. return goto.last(user, thread)
  26. class GotoNewView(BaseGotoView):
  27. def get_redirect(self, user, thread):
  28. return goto.new(user, thread)
  29. class GotoReportedView(BaseGotoView):
  30. def get_redirect(self, user, thread):
  31. return goto.reported(user, thread)
  32. class GotoModeratedView(BaseGotoView):
  33. def get_redirect(self, user, thread):
  34. return goto.moderated(user, thread)
  35. class GotoPostView(BaseGotoView):
  36. def get_redirect(self, user, thread, post):
  37. return goto.post(user, thread, post)
  38. def dispatch(self, request, *args, **kwargs):
  39. post = self.fetch_post(
  40. request, select_related=['thread', 'forum'], **kwargs)
  41. forum = post.forum
  42. thread = post.thread
  43. self.check_forum_permissions(request, forum)
  44. thread.forum = forum
  45. self.check_thread_permissions(request, thread)
  46. self.check_post_permissions(request, post)
  47. return redirect(self.get_redirect(request.user, thread, post))