65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
"""
|
|
Module to define url helpers functions
|
|
"""
|
|
from urllib import urlencode
|
|
from xmodule.modulestore.search import path_to_location, navigation_index
|
|
from xmodule.modulestore.django import modulestore
|
|
from django.core.urlresolvers import reverse
|
|
|
|
|
|
def get_redirect_url(course_key, usage_key):
|
|
""" Returns the redirect url back to courseware
|
|
|
|
Args:
|
|
course_id(str): Course Id string
|
|
location(str): The location id of course component
|
|
|
|
Raises:
|
|
ItemNotFoundError if no data at the location or NoPathToItem if location not in any class
|
|
|
|
Returns:
|
|
Redirect url string
|
|
"""
|
|
|
|
(
|
|
course_key, chapter, section, vertical_unused,
|
|
position, final_target_id
|
|
) = path_to_location(modulestore(), usage_key)
|
|
|
|
# choose the appropriate view (and provide the necessary args) based on the
|
|
# args provided by the redirect.
|
|
# Rely on index to do all error handling and access control.
|
|
if chapter is None:
|
|
redirect_url = reverse('courseware', args=(unicode(course_key), ))
|
|
elif section is None:
|
|
redirect_url = reverse('courseware_chapter', args=(unicode(course_key), chapter))
|
|
elif position is None:
|
|
redirect_url = reverse(
|
|
'courseware_section',
|
|
args=(unicode(course_key), chapter, section)
|
|
)
|
|
else:
|
|
# Here we use the navigation_index from the position returned from
|
|
# path_to_location - we can only navigate to the topmost vertical at the
|
|
# moment
|
|
redirect_url = reverse(
|
|
'courseware_position',
|
|
args=(unicode(course_key), chapter, section, navigation_index(position))
|
|
)
|
|
redirect_url += "?{}".format(urlencode({'activate_block_id': unicode(final_target_id)}))
|
|
return redirect_url
|
|
|
|
|
|
def get_redirect_url_for_global_staff(course_key, _next):
|
|
"""
|
|
Returns the redirect url for staff enrollment
|
|
|
|
Args:
|
|
course_key(str): Course key string
|
|
_next(str): Redirect url of course component
|
|
"""
|
|
redirect_url = ("{url}?next={redirect}".format(
|
|
url=reverse('enroll_staff', args=[unicode(course_key)]),
|
|
redirect=_next))
|
|
return redirect_url
|