Commit 9f770ef9 by Bridger Maxwell

Visiting the wiki from a course you aren't in does a redirect to the regular wiki.

parent ceaa6a4f
...@@ -14,6 +14,10 @@ class Middleware(object): ...@@ -14,6 +14,10 @@ class Middleware(object):
If it intercepts a request for /wiki/.. that has a referrer in the If it intercepts a request for /wiki/.. that has a referrer in the
form /courses/course_id/... it will redirect the user to the page form /courses/course_id/... it will redirect the user to the page
/courses/course_id/wiki/... /courses/course_id/wiki/...
It is also possible that someone followed a link leading to a course
that they don't have access to. In this case, we redirect them to the
same page on the regular wiki.
""" """
def process_request(self, request): def process_request(self, request):
...@@ -37,12 +41,28 @@ class Middleware(object): ...@@ -37,12 +41,28 @@ class Middleware(object):
# See if we are able to view the course. If we are, redirect to it # See if we are able to view the course. If we are, redirect to it
try: try:
course = check_course(request.user, course_id) course = check_course(request.user, course_id)
return redirect("/courses/" + course.id + "/view_wiki/" + path_match.group('wiki_path') ) return redirect("/courses/" + course.id + "/wiki/" + path_match.group('wiki_path') )
except Http404: except Http404:
# Even though we came from the course, we can't see it. So don't worry about it. # Even though we came from the course, we can't see it. So don't worry about it.
pass pass
else:
# It is also possible we are going to a course wiki view, but we
# don't have permission to see the course!
course_match = re.match(r'/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/wiki/(?P<wiki_path>.*|)$', request.path)
if course_match:
course_id = course_match.group('course_id')
# See if we are able to view the course. If we aren't, redirect to regular wiki
try:
course = check_course(request.user, course_id)
# Good, we can see the course. Carry on
return None
except Http404:
# We can't see the course, so redirect to the regular wiki
return redirect("/wiki/" + course_match.group('wiki_path'))
return None return None
def context_processor(request): def context_processor(request):
...@@ -54,7 +74,7 @@ def context_processor(request): ...@@ -54,7 +74,7 @@ def context_processor(request):
bar to be shown. bar to be shown.
""" """
match = re.match(r'^/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/view_wiki(?P<wiki_path>.*|)', request.path) match = re.match(r'^/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/wiki(?P<wiki_path>.*|)', request.path)
if match: if match:
course_id = match.group('course_id') course_id = match.group('course_id')
......
...@@ -172,9 +172,9 @@ if settings.WIKI_ENABLED: ...@@ -172,9 +172,9 @@ if settings.WIKI_ENABLED:
# These urls are for viewing the wiki in the context of a course. They should # These urls are for viewing the wiki in the context of a course. They should
# never be returned by a reverse() so they come after the other url patterns # never be returned by a reverse() so they come after the other url patterns
url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/wiki/?$', url(r'^courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/course_wiki/?$',
'course_wiki.views.course_wiki_redirect', name="course_wiki"), 'course_wiki.views.course_wiki_redirect', name="course_wiki"),
url(r'^courses/(?:[^/]+/[^/]+/[^/]+)/view_wiki/', include(wiki_pattern())), url(r'^courses/(?:[^/]+/[^/]+/[^/]+)/wiki/', include(wiki_pattern())),
) )
if settings.QUICKEDIT: if settings.QUICKEDIT:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment