Commit 03618f7c by stv

Normalize urlpatterns

Since these lines of code will now `blame` me, I couldn't bear the
thought of their ugly formatting leading back to me.
parent 2ee80e84
...@@ -243,23 +243,29 @@ COURSE_URLS = patterns( ...@@ -243,23 +243,29 @@ COURSE_URLS = patterns(
url( url(
r'^look_up_registration_code$', r'^look_up_registration_code$',
'instructor.views.registration_codes.look_up_registration_code', 'instructor.views.registration_codes.look_up_registration_code',
name='look_up_registration_code' name='look_up_registration_code',
), ),
url( url(
r'^registration_code_details$', r'^registration_code_details$',
'instructor.views.registration_codes.registration_code_details', 'instructor.views.registration_codes.registration_code_details',
name='registration_code_details' name='registration_code_details',
) ),
) )
urlpatterns += ( urlpatterns += (
# jump_to URLs for direct access to a location in the course # jump_to URLs for direct access to a location in the course
url( url(
r'^courses/{}/jump_to/(?P<location>.*)$'.format(settings.COURSE_ID_PATTERN), r'^courses/{}/jump_to/(?P<location>.*)$'.format(
'courseware.views.jump_to', name="jump_to", settings.COURSE_ID_PATTERN,
),
'courseware.views.jump_to',
name='jump_to',
), ),
url( url(
r'^courses/{}/jump_to_id/(?P<module_id>.*)$'.format(settings.COURSE_ID_PATTERN), r'^courses/{}/jump_to_id/(?P<module_id>.*)$'.format(
'courseware.views.jump_to_id', name="jump_to_id", settings.COURSE_ID_PATTERN,
),
'courseware.views.jump_to_id',
name='jump_to_id',
), ),
# xblock Handler APIs # xblock Handler APIs
...@@ -311,210 +317,501 @@ urlpatterns += ( ...@@ -311,210 +317,501 @@ urlpatterns += (
url( url(
r'^courses/{}/xqueue/(?P<userid>[^/]*)/(?P<mod_id>.*?)/(?P<dispatch>[^/]*)$'.format( r'^courses/{}/xqueue/(?P<userid>[^/]*)/(?P<mod_id>.*?)/(?P<dispatch>[^/]*)$'.format(
settings.COURSE_ID_PATTERN settings.COURSE_ID_PATTERN,
), ),
'courseware.module_render.xqueue_callback', 'courseware.module_render.xqueue_callback',
name='xqueue_callback' name='xqueue_callback',
),
url(
r'^change_setting$',
'student.views.change_setting',
name='change_setting',
), ),
url(r'^change_setting$', 'student.views.change_setting',
name='change_setting'),
# TODO: These views need to be updated before they work # TODO: These views need to be updated before they work
url(r'^calculate$', 'util.views.calculate'), url(r'^calculate$', 'util.views.calculate'),
url(r'^courses/?$', 'branding.views.courses', name="courses"), url(r'^courses/?$', 'branding.views.courses', name="courses"),
url(r'^change_enrollment$', url(
'student.views.change_enrollment', name="change_enrollment"), r'^change_enrollment$',
url(r'^change_email_settings$', 'student.views.change_email_settings', name="change_email_settings"), 'student.views.change_enrollment',
name='change_enrollment',
),
url(
r'^change_email_settings$',
'student.views.change_email_settings',
name='change_email_settings',
),
#About the course #About the course
url(r'^courses/{}/about$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.course_about', name="about_course"), r'^courses/{}/about$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.course_about',
name='about_course',
),
#Inside the course #Inside the course
url(r'^courses/{}/$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.course_info', name="course_root"), r'^courses/{}/$'.format(
url(r'^courses/{}/info$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'courseware.views.course_info', name="info"), ),
'courseware.views.course_info',
name='course_root',
),
url(
r'^courses/{}/info$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.course_info',
name='info',
),
# TODO arjun remove when custom tabs in place, see courseware/courses.py # TODO arjun remove when custom tabs in place, see courseware/courses.py
url(r'^courses/{}/syllabus$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.syllabus', name="syllabus"), r'^courses/{}/syllabus$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.syllabus',
name='syllabus',
),
#Survey associated with a course # Survey associated with a course
url(r'^courses/{}/survey$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.course_survey', name="course_survey"), r'^courses/{}/survey$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.course_survey',
name='course_survey',
),
url(r'^courses/{}/book/(?P<book_index>\d+)/$'.format(settings.COURSE_ID_PATTERN), url(
'staticbook.views.index', name="book"), r'^courses/{}/book/(?P<book_index>\d+)/$'.format(
url(r'^courses/{}/book/(?P<book_index>\d+)/(?P<page>\d+)$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'staticbook.views.index', name="book"), ),
'staticbook.views.index',
name='book',
),
url(
r'^courses/{}/book/(?P<book_index>\d+)/(?P<page>\d+)$'.format(
settings.COURSE_ID_PATTERN,
),
'staticbook.views.index',
name='book',
),
url(r'^courses/{}/pdfbook/(?P<book_index>\d+)/$'.format(settings.COURSE_ID_PATTERN), url(
'staticbook.views.pdf_index', name="pdf_book"), r'^courses/{}/pdfbook/(?P<book_index>\d+)/$'.format(
url(r'^courses/{}/pdfbook/(?P<book_index>\d+)/(?P<page>\d+)$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'staticbook.views.pdf_index', name="pdf_book"), ),
'staticbook.views.pdf_index',
name='pdf_book',
),
url(
r'^courses/{}/pdfbook/(?P<book_index>\d+)/(?P<page>\d+)$'.format(
settings.COURSE_ID_PATTERN,
),
'staticbook.views.pdf_index',
name='pdf_book',
),
url(r'^courses/{}/pdfbook/(?P<book_index>\d+)/chapter/(?P<chapter>\d+)/$'.format(settings.COURSE_ID_PATTERN), url(
'staticbook.views.pdf_index', name="pdf_book"), r'^courses/{}/pdfbook/(?P<book_index>\d+)/chapter/(?P<chapter>\d+)/$'.format(
settings.COURSE_ID_PATTERN,
),
'staticbook.views.pdf_index',
name='pdf_book',
),
url( url(
r'^courses/{}/pdfbook/(?P<book_index>\d+)/chapter/(?P<chapter>\d+)/(?P<page>\d+)$'.format( r'^courses/{}/pdfbook/(?P<book_index>\d+)/chapter/(?P<chapter>\d+)/(?P<page>\d+)$'.format(
settings.COURSE_ID_PATTERN settings.COURSE_ID_PATTERN,
), ),
'staticbook.views.pdf_index', name="pdf_book" 'staticbook.views.pdf_index',
name='pdf_book',
), ),
url(r'^courses/{}/htmlbook/(?P<book_index>\d+)/$'.format(settings.COURSE_ID_PATTERN), url(
'staticbook.views.html_index', name="html_book"), r'^courses/{}/htmlbook/(?P<book_index>\d+)/$'.format(
url(r'^courses/{}/htmlbook/(?P<book_index>\d+)/chapter/(?P<chapter>\d+)/$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'staticbook.views.html_index', name="html_book"), ),
'staticbook.views.html_index',
name='html_book',
),
url(
r'^courses/{}/htmlbook/(?P<book_index>\d+)/chapter/(?P<chapter>\d+)/$'.format(
settings.COURSE_ID_PATTERN,
),
'staticbook.views.html_index',
name='html_book',
),
url(r'^courses/{}/courseware/?$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.index', name="courseware"), r'^courses/{}/courseware/?$'.format(
url(r'^courses/{}/courseware/(?P<chapter>[^/]*)/$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'courseware.views.index', name="courseware_chapter"), ),
url(r'^courses/{}/courseware/(?P<chapter>[^/]*)/(?P<section>[^/]*)/$'.format(settings.COURSE_ID_PATTERN), 'courseware.views.index',
'courseware.views.index', name="courseware_section"), name='courseware',
),
url(
r'^courses/{}/courseware/(?P<chapter>[^/]*)/$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.index',
name='courseware_chapter',
),
url(
r'^courses/{}/courseware/(?P<chapter>[^/]*)/(?P<section>[^/]*)/$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.index',
name='courseware_section',
),
url( url(
r'^courses/{}/courseware/(?P<chapter>[^/]*)/(?P<section>[^/]*)/(?P<position>[^/]*)/?$'.format( r'^courses/{}/courseware/(?P<chapter>[^/]*)/(?P<section>[^/]*)/(?P<position>[^/]*)/?$'.format(
settings.COURSE_ID_PATTERN settings.COURSE_ID_PATTERN,
), ),
'courseware.views.index', name="courseware_position" 'courseware.views.index',
name='courseware_position',
), ),
url(r'^courses/{}/progress$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.progress', name="progress"), r'^courses/{}/progress$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.progress',
name='progress',
),
# Takes optional student_id for instructor use--shows profile as that student sees it. # Takes optional student_id for instructor use--shows profile as that student sees it.
url(r'^courses/{}/progress/(?P<student_id>[^/]*)/$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.progress', name="student_progress"), r'^courses/{}/progress/(?P<student_id>[^/]*)/$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.progress',
name='student_progress',
),
# For the instructor # For the instructor
url(r'^courses/{}/instructor$'.format(settings.COURSE_ID_PATTERN), url(
'instructor.views.instructor_dashboard.instructor_dashboard_2', name="instructor_dashboard"), r'^courses/{}/instructor$'.format(
settings.COURSE_ID_PATTERN,
),
'instructor.views.instructor_dashboard.instructor_dashboard_2',
name='instructor_dashboard',
),
url(r'^courses/{}/set_course_mode_price$'.format(settings.COURSE_ID_PATTERN), url(
'instructor.views.instructor_dashboard.set_course_mode_price', name="set_course_mode_price"), r'^courses/{}/set_course_mode_price$'.format(
url(r'^courses/{}/instructor/api/'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
),
'instructor.views.instructor_dashboard.set_course_mode_price',
name='set_course_mode_price',
),
url(
r'^courses/{}/instructor/api/'.format(
settings.COURSE_ID_PATTERN,
),
include('instructor.views.api_urls')), include('instructor.views.api_urls')),
url(r'^courses/{}/remove_coupon$'.format(settings.COURSE_ID_PATTERN), url(
'instructor.views.coupons.remove_coupon', name="remove_coupon"), r'^courses/{}/remove_coupon$'.format(
url(r'^courses/{}/add_coupon$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'instructor.views.coupons.add_coupon', name="add_coupon"), ),
url(r'^courses/{}/update_coupon$'.format(settings.COURSE_ID_PATTERN), 'instructor.views.coupons.remove_coupon',
'instructor.views.coupons.update_coupon', name="update_coupon"), name='remove_coupon',
url(r'^courses/{}/get_coupon_info$'.format(settings.COURSE_ID_PATTERN), ),
'instructor.views.coupons.get_coupon_info', name="get_coupon_info"), url(
r'^courses/{}/add_coupon$'.format(
url(r'^courses/{}/'.format(settings.COURSE_ID_PATTERN), include(COURSE_URLS)), settings.COURSE_ID_PATTERN,
),
'instructor.views.coupons.add_coupon',
name='add_coupon',
),
url(
r'^courses/{}/update_coupon$'.format(
settings.COURSE_ID_PATTERN,
),
'instructor.views.coupons.update_coupon',
name='update_coupon',
),
url(
r'^courses/{}/get_coupon_info$'.format(
settings.COURSE_ID_PATTERN,
),
'instructor.views.coupons.get_coupon_info',
name='get_coupon_info',
),
url(
r'^courses/{}/'.format(
settings.COURSE_ID_PATTERN,
),
include(COURSE_URLS)
),
# see ENABLE_INSTRUCTOR_LEGACY_DASHBOARD section for legacy dash urls # see ENABLE_INSTRUCTOR_LEGACY_DASHBOARD section for legacy dash urls
# Open Ended grading views # Open Ended grading views
url(r'^courses/{}/staff_grading$'.format(settings.COURSE_ID_PATTERN), url(
'open_ended_grading.views.staff_grading', name='staff_grading'), r'^courses/{}/staff_grading$'.format(
url(r'^courses/{}/staff_grading/get_next$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'open_ended_grading.staff_grading_service.get_next', name='staff_grading_get_next'), ),
url(r'^courses/{}/staff_grading/save_grade$'.format(settings.COURSE_ID_PATTERN), 'open_ended_grading.views.staff_grading',
'open_ended_grading.staff_grading_service.save_grade', name='staff_grading_save_grade'), name='staff_grading',
url(r'^courses/{}/staff_grading/get_problem_list$'.format(settings.COURSE_ID_PATTERN), ),
'open_ended_grading.staff_grading_service.get_problem_list', name='staff_grading_get_problem_list'), url(
r'^courses/{}/staff_grading/get_next$'.format(
settings.COURSE_ID_PATTERN,
),
'open_ended_grading.staff_grading_service.get_next',
name='staff_grading_get_next',
),
url(
r'^courses/{}/staff_grading/save_grade$'.format(
settings.COURSE_ID_PATTERN,
),
'open_ended_grading.staff_grading_service.save_grade',
name='staff_grading_save_grade',
),
url(
r'^courses/{}/staff_grading/get_problem_list$'.format(
settings.COURSE_ID_PATTERN,
),
'open_ended_grading.staff_grading_service.get_problem_list',
name='staff_grading_get_problem_list',
),
# Open Ended problem list # Open Ended problem list
url(r'^courses/{}/open_ended_problems$'.format(settings.COURSE_ID_PATTERN), url(
'open_ended_grading.views.student_problem_list', name='open_ended_problems'), r'^courses/{}/open_ended_problems$'.format(
settings.COURSE_ID_PATTERN,
),
'open_ended_grading.views.student_problem_list',
name='open_ended_problems',
),
# Open Ended flagged problem list # Open Ended flagged problem list
url(r'^courses/{}/open_ended_flagged_problems$'.format(settings.COURSE_ID_PATTERN), url(
'open_ended_grading.views.flagged_problem_list', name='open_ended_flagged_problems'), r'^courses/{}/open_ended_flagged_problems$'.format(
url(r'^courses/{}/open_ended_flagged_problems/take_action_on_flags$'.format(settings.COURSE_ID_PATTERN), settings.COURSE_ID_PATTERN,
'open_ended_grading.views.take_action_on_flags', name='open_ended_flagged_problems_take_action'), ),
'open_ended_grading.views.flagged_problem_list',
name='open_ended_flagged_problems',
),
url(
r'^courses/{}/open_ended_flagged_problems/take_action_on_flags$'.format(
settings.COURSE_ID_PATTERN,
),
'open_ended_grading.views.take_action_on_flags',
name='open_ended_flagged_problems_take_action',
),
# Cohorts management # Cohorts management
url(r'^courses/{}/cohorts/settings$'.format(settings.COURSE_KEY_PATTERN), url(
r'^courses/{}/cohorts/settings$'.format(
settings.COURSE_KEY_PATTERN,
),
'openedx.core.djangoapps.course_groups.views.course_cohort_settings_handler', 'openedx.core.djangoapps.course_groups.views.course_cohort_settings_handler',
name="course_cohort_settings"), name='course_cohort_settings',
url(r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)?$'.format(settings.COURSE_KEY_PATTERN), ),
'openedx.core.djangoapps.course_groups.views.cohort_handler', name="cohorts"), url(
url(r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)$'.format(settings.COURSE_KEY_PATTERN), r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)?$'.format(
settings.COURSE_KEY_PATTERN,
),
'openedx.core.djangoapps.course_groups.views.cohort_handler',
name='cohorts',
),
url(
r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)$'.format(
settings.COURSE_KEY_PATTERN,
),
'openedx.core.djangoapps.course_groups.views.users_in_cohort', 'openedx.core.djangoapps.course_groups.views.users_in_cohort',
name="list_cohort"), name='list_cohort',
url(r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)/add$'.format(settings.COURSE_KEY_PATTERN), ),
url(
r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)/add$'.format(
settings.COURSE_KEY_PATTERN,
),
'openedx.core.djangoapps.course_groups.views.add_users_to_cohort', 'openedx.core.djangoapps.course_groups.views.add_users_to_cohort',
name="add_to_cohort"), name='add_to_cohort',
url(r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)/delete$'.format(settings.COURSE_KEY_PATTERN), ),
url(
r'^courses/{}/cohorts/(?P<cohort_id>[0-9]+)/delete$'.format(
settings.COURSE_KEY_PATTERN,
),
'openedx.core.djangoapps.course_groups.views.remove_user_from_cohort', 'openedx.core.djangoapps.course_groups.views.remove_user_from_cohort',
name="remove_from_cohort"), name='remove_from_cohort',
url(r'^courses/{}/cohorts/debug$'.format(settings.COURSE_KEY_PATTERN), ),
url(
r'^courses/{}/cohorts/debug$'.format(
settings.COURSE_KEY_PATTERN,
),
'openedx.core.djangoapps.course_groups.views.debug_cohort_mgmt', 'openedx.core.djangoapps.course_groups.views.debug_cohort_mgmt',
name="debug_cohort_mgmt"), name='debug_cohort_mgmt',
url(r'^courses/{}/cohorts/topics$'.format(settings.COURSE_KEY_PATTERN), ),
url(
r'^courses/{}/cohorts/topics$'.format(
settings.COURSE_KEY_PATTERN,
),
'openedx.core.djangoapps.course_groups.views.cohort_discussion_topics', 'openedx.core.djangoapps.course_groups.views.cohort_discussion_topics',
name='cohort_discussion_topics'), name='cohort_discussion_topics',
),
# Open Ended Notifications # Open Ended Notifications
url(r'^courses/{}/open_ended_notifications$'.format(settings.COURSE_ID_PATTERN), url(
'open_ended_grading.views.combined_notifications', name='open_ended_notifications'), r'^courses/{}/open_ended_notifications$'.format(
settings.COURSE_ID_PATTERN,
),
'open_ended_grading.views.combined_notifications',
name='open_ended_notifications',
),
url(r'^courses/{}/peer_grading$'.format(settings.COURSE_ID_PATTERN), url(
'open_ended_grading.views.peer_grading', name='peer_grading'), r'^courses/{}/peer_grading$'.format(
settings.COURSE_ID_PATTERN,
),
'open_ended_grading.views.peer_grading',
name='peer_grading',
),
url(r'^courses/{}/notes$'.format(settings.COURSE_ID_PATTERN), 'notes.views.notes', name='notes'), url(
url(r'^courses/{}/notes/'.format(settings.COURSE_ID_PATTERN), include('notes.urls')), r'^courses/{}/notes$'.format(
settings.COURSE_ID_PATTERN,
),
'notes.views.notes',
name='notes',
),
url(
r'^courses/{}/notes/'.format(
settings.COURSE_ID_PATTERN,
),
include('notes.urls')
),
# LTI endpoints listing # LTI endpoints listing
url(r'^courses/{}/lti_rest_endpoints/'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.get_course_lti_endpoints', name='lti_rest_endpoints'), r'^courses/{}/lti_rest_endpoints/'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.get_course_lti_endpoints',
name='lti_rest_endpoints',
),
# Student account # Student account
url(r'^account/', include('student_account.urls')), url(
r'^account/',
include('student_account.urls')
),
# Student profile # Student profile
url(r'^u/(?P<username>[\w.@+-]+)$', 'student_profile.views.learner_profile', name='learner_profile'), url(
r'^u/(?P<username>[\w.@+-]+)$',
'student_profile.views.learner_profile',
name='learner_profile',
),
# Student Notes # Student Notes
url(r'^courses/{}/edxnotes'.format(settings.COURSE_ID_PATTERN), url(
include('edxnotes.urls'), name="edxnotes_endpoints"), r'^courses/{}/edxnotes'.format(
settings.COURSE_ID_PATTERN,
),
include('edxnotes.urls'),
name='edxnotes_endpoints',
),
url(r'^api/branding/v1/', include('branding.api_urls')), url(
r'^api/branding/v1/',
include('branding.api_urls')
),
) )
if settings.FEATURES["ENABLE_TEAMS"]: if settings.FEATURES["ENABLE_TEAMS"]:
# Teams endpoints # Teams endpoints
urlpatterns += ( urlpatterns += (
url(r'^api/team/', include('lms.djangoapps.teams.api_urls')), url(
url(r'^courses/{}/teams'.format(settings.COURSE_ID_PATTERN), r'^api/team/',
include('lms.djangoapps.teams.urls'), name="teams_endpoints"), include('lms.djangoapps.teams.api_urls')
),
url(
r'^courses/{}/teams'.format(
settings.COURSE_ID_PATTERN,
),
include('lms.djangoapps.teams.urls'),
name='teams_endpoints',
),
) )
# allow course staff to change to student view of courseware # allow course staff to change to student view of courseware
if settings.FEATURES.get('ENABLE_MASQUERADE'): if settings.FEATURES.get('ENABLE_MASQUERADE'):
urlpatterns += ( urlpatterns += (
url(r'^courses/{}/masquerade$'.format(settings.COURSE_KEY_PATTERN), url(
'courseware.masquerade.handle_ajax', name="masquerade_update"), r'^courses/{}/masquerade$'.format(
settings.COURSE_KEY_PATTERN,
),
'courseware.masquerade.handle_ajax',
name='masquerade_update',
),
) )
urlpatterns += ( urlpatterns += (
url(r'^courses/{}/generate_user_cert'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.generate_user_cert', name="generate_user_cert"), r'^courses/{}/generate_user_cert'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.generate_user_cert',
name='generate_user_cert',
),
) )
# discussion forums live within courseware, so courseware must be enabled first # discussion forums live within courseware, so courseware must be enabled first
if settings.FEATURES.get('ENABLE_DISCUSSION_SERVICE'): if settings.FEATURES.get('ENABLE_DISCUSSION_SERVICE'):
urlpatterns += ( urlpatterns += (
url(r'^api/discussion/', include('discussion_api.urls')), url(
url(r'^courses/{}/discussion/'.format(settings.COURSE_ID_PATTERN), r'^api/discussion/',
include('django_comment_client.urls')), include('discussion_api.urls')
url(r'^notification_prefs/enable/', 'notification_prefs.views.ajax_enable'), ),
url(r'^notification_prefs/disable/', 'notification_prefs.views.ajax_disable'), url(
url(r'^notification_prefs/status/', 'notification_prefs.views.ajax_status'), r'^courses/{}/discussion/'.format(
url(r'^notification_prefs/unsubscribe/(?P<token>[a-zA-Z0-9-_=]+)/', settings.COURSE_ID_PATTERN,
'notification_prefs.views.set_subscription', {'subscribe': False}, name="unsubscribe_forum_update"), ),
url(r'^notification_prefs/resubscribe/(?P<token>[a-zA-Z0-9-_=]+)/', include('django_comment_client.urls')
'notification_prefs.views.set_subscription', {'subscribe': True}, name="resubscribe_forum_update"), ),
url(
r'^notification_prefs/enable/',
'notification_prefs.views.ajax_enable'
),
url(
r'^notification_prefs/disable/',
'notification_prefs.views.ajax_disable'
),
url(
r'^notification_prefs/status/',
'notification_prefs.views.ajax_status'
),
url(
r'^notification_prefs/unsubscribe/(?P<token>[a-zA-Z0-9-_=]+)/',
'notification_prefs.views.set_subscription',
{
'subscribe': False,
},
name='unsubscribe_forum_update',
),
url(
r'^notification_prefs/resubscribe/(?P<token>[a-zA-Z0-9-_=]+)/',
'notification_prefs.views.set_subscription',
{
'subscribe': True,
},
name='resubscribe_forum_update',
),
) )
urlpatterns += ( urlpatterns += (
# This MUST be the last view in the courseware--it's a catch-all for custom tabs. # This MUST be the last view in the courseware--it's a catch-all for custom tabs.
url(r'^courses/{}/(?P<tab_slug>[^/]+)/$'.format(settings.COURSE_ID_PATTERN), url(
'courseware.views.static_tab', name="static_tab"), r'^courses/{}/(?P<tab_slug>[^/]+)/$'.format(
settings.COURSE_ID_PATTERN,
),
'courseware.views.static_tab',
name='static_tab',
),
) )
if settings.FEATURES.get('ENABLE_STUDENT_HISTORY_VIEW'): if settings.FEATURES.get('ENABLE_STUDENT_HISTORY_VIEW'):
...@@ -524,7 +821,8 @@ if settings.FEATURES.get('ENABLE_STUDENT_HISTORY_VIEW'): ...@@ -524,7 +821,8 @@ if settings.FEATURES.get('ENABLE_STUDENT_HISTORY_VIEW'):
settings.COURSE_ID_PATTERN settings.COURSE_ID_PATTERN
), ),
'courseware.views.submission_history', 'courseware.views.submission_history',
name='submission_history'), name='submission_history',
),
) )
......
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