from django.http import Http404 from django.shortcuts import redirect from misago.threads import goto from misago.threads.views.generic.base import ViewBase __all__ = [ 'BaseGotoView', 'GotoLastView', 'GotoNewView', 'GotoPostView' ] class BaseGotoView(ViewBase): def get_redirect(self, user, thread): raise NotImplementedError("views inheriting form BaseGotoView " "should define get_redirect method") def dispatch(self, request, *args, **kwargs): thread = self.fetch_thread(request, select_related=['forum'], **kwargs) forum = thread.forum self.check_forum_permissions(request, forum) self.check_thread_permissions(request, thread) posts_qs = self.exclude_invisible_posts( thread.post_set, request.user, forum, thread) return redirect(self.get_redirect(request.user, thread, posts_qs)) class GotoLastView(BaseGotoView): def get_redirect(self, user, thread, posts_qs): return goto.last(thread, posts_qs) class GotoNewView(BaseGotoView): def get_redirect(self, user, thread, posts_qs): return goto.new(user, thread, posts_qs) class GotoPostView(BaseGotoView): def get_redirect(self, thread, posts_qs, post): return goto.post(thread, posts_qs, post) def dispatch(self, request, *args, **kwargs): post = self.fetch_post( request, select_related=['thread', 'forum'], **kwargs) forum = post.forum thread = post.thread self.check_forum_permissions(request, forum) thread.forum = forum self.check_thread_permissions(request, thread) self.check_post_permissions(request, post) posts_qs = self.exclude_invisible_posts( thread.post_set, request.user, thread.forum, thread) return redirect(self.get_redirect(thread, posts_qs, post))