Skip to content

Commit

Permalink
Merge pull request #590 from open-craft/maxim/fixing-navigation-from-…
Browse files Browse the repository at this point in the history
…wiki-back-to-course-opencraft-palm

feat: set course for wiki based on the wiki_slug
  • Loading branch information
Cup0fCoffee authored Sep 29, 2023
2 parents b92baaa + 78eb0e7 commit 377bb07
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
17 changes: 17 additions & 0 deletions lms/djangoapps/course_wiki/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
from openedx.features.enterprise_support.api import get_enterprise_consent_url
from common.djangoapps.student.models import CourseEnrollment

from xmodule import modulestore


class WikiAccessMiddleware(MiddlewareMixin):
"""
Expand Down Expand Up @@ -55,6 +57,21 @@ def process_view(self, request, view_func, view_args, view_kwargs): # lint-amne
course_id = course_id_from_url(request.path)
wiki_path = request.path.partition('/wiki/')[2]

# if no wiki_path, can't get wiki_slug, so no point trying to look up
# course_id by wiki_slug
if not course_id and wiki_path:
# wiki path always starts with wiki_slug
wiki_slug = wiki_path.split('/')[0]

modstore = modulestore.django.modulestore()
course_ids = modstore.get_courses_for_wiki(wiki_slug)
# the above can return multiple courses, and to avoid ambiguity and
# avoid pointing to wrong courses, we only set course_id if we've
# got an exact match, i.e. only one course was returned for a
# wiki_slug
if len(course_ids) == 1:
course_id = course_ids[0]

if course_id:
# This is a /courses/org/name/run/wiki request
course_path = f"/courses/{str(course_id)}"
Expand Down
7 changes: 7 additions & 0 deletions lms/djangoapps/course_wiki/tests/test_middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,10 @@ def test_url_tranform(self):
response = self.client.get('/courses/edx/math101/2014/wiki/math101/')
self.assertContains(response, '/courses/edx/math101/2014/wiki/math101/_edit/')
self.assertContains(response, '/courses/edx/math101/2014/wiki/math101/_settings/')

def test_finds_course_by_wiki_slug(self):
"""Test that finds course by wiki slug, if course id is not present in the url."""
response = self.client.get('/wiki/math101/')
request = response.wsgi_request
self.assertTrue(hasattr(request, 'course'))
self.assertEqual(request.course.id, self.course_math101.id)

0 comments on commit 377bb07

Please sign in to comment.