diff --git a/lms/djangoapps/instructor/views/instructor_dashboard.py b/lms/djangoapps/instructor/views/instructor_dashboard.py index d24c9bc9542d85ca49f59e48256c6e05ebdc076a..9286e719e8552ec324274a266c51507625a520c4 100644 --- a/lms/djangoapps/instructor/views/instructor_dashboard.py +++ b/lms/djangoapps/instructor/views/instructor_dashboard.py @@ -20,6 +20,7 @@ from django.utils.translation import ugettext_noop from django.views.decorators.cache import cache_control from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.http import require_POST +from edx_proctoring.api import does_backend_support_onboarding from edx_when.api import is_enabled_for_course from mock import patch from opaque_keys import InvalidKeyError @@ -277,6 +278,7 @@ def _section_special_exams(course, access): 'course_id': course_key, 'escalation_email': escalation_email, 'show_dashboard': is_backend_dashboard_available(course_key), + 'show_onboarding': does_backend_support_onboarding(course.proctoring_provider), 'enable_exam_resume_proctoring_improvements': EXAM_RESUME_PROCTORING_IMPROVEMENTS.is_enabled(course.id), } return section_data diff --git a/lms/static/js/instructor_dashboard/instructor_dashboard.js b/lms/static/js/instructor_dashboard/instructor_dashboard.js index 12bca4778841dd66f7b9f8da8c1e451505d28df5..6314a08bd3eecf01b529fa8ae0fa962b3edaa781 100644 --- a/lms/static/js/instructor_dashboard/instructor_dashboard.js +++ b/lms/static/js/instructor_dashboard/instructor_dashboard.js @@ -203,6 +203,9 @@ such that the value can be defined later than this assignment (file load order). { constructor: edx.instructor_dashboard.proctoring.ProctoredExamAllowanceView, $element: idashContent.find('.' + CSS_IDASH_SECTION + '#special_exams') + }, { + constructor: edx.instructor_dashboard.proctoring.ProctoredExamOnboardingView, + $element: idashContent.find('.' + CSS_IDASH_SECTION + '#special_exams') }, { constructor: edx.instructor_dashboard.proctoring.ProctoredExamAttemptView, $element: idashContent.find('.' + CSS_IDASH_SECTION + '#special_exams') diff --git a/lms/static/sass/course/instructor/_instructor_2.scss b/lms/static/sass/course/instructor/_instructor_2.scss index 793bdff06cdfe3e6425c78184246979525c3edb1..fa02ef36880fc8bd174d81331dabbeeb24093a81 100644 --- a/lms/static/sass/course/instructor/_instructor_2.scss +++ b/lms/static/sass/course/instructor/_instructor_2.scss @@ -2587,9 +2587,11 @@ input[name="subject"] { } .special-allowance-container, +.student-onboarding-status-container, .student-proctored-exam-container { .allowance-table, - .exam-attempts-table { + .exam-attempts-table, + .onboarding-status-table { width: 100%; tr:nth-child(even) { @@ -2598,7 +2600,8 @@ input[name="subject"] { } .allowance-headings, - .exam-attempt-headings { + .exam-attempt-headings, + .onboarding-status-headings { height: 40px; border-bottom: 1px solid #bebebe; @@ -2718,7 +2721,8 @@ input[name="subject"] { } .exam-attempts-content, - .exam-allowances-content { + .exam-allowances-content, + .onboarding-status-content { padding-left: 0; padding-right: 0; } @@ -2727,7 +2731,8 @@ input[name="subject"] { margin-top: -30px; margin-bottom: 20px; - .search-attempts { + .search-attempts, + .search-onboarding { border: 1px solid #ccc; display: inline-block; border-radius: 5px; diff --git a/lms/templates/instructor/instructor_dashboard_2/special_exams.html b/lms/templates/instructor/instructor_dashboard_2/special_exams.html index 5004a3a1052e1cfc73125a06350648b15c9baaa2..063d66c5d2eb091c834fbaee25799e8271780b3e 100644 --- a/lms/templates/instructor/instructor_dashboard_2/special_exams.html +++ b/lms/templates/instructor/instructor_dashboard_2/special_exams.html @@ -10,16 +10,22 @@ import pytz % endif <div id="proctoring-accordion"> <div class="wrap"> - <h3 class="hd hd-3">${_('Allowance Section')}</h3> + <h3 class="hd hd-3">${_('Allowance Section')}</h3> <div class="special-allowance-container" data-course-id="${ section_data['course_id'] }"></div> </div> + % if section_data['show_onboarding'] and section_data['enable_exam_resume_proctoring_improvements']: <div class="wrap"> - <h3 class="hd hd-3">${_('Student Special Exam Attempts')}</h3> + <h3 class="hd hd-3">${_('Student Onboarding Status')}</h3> + <div class="student-onboarding-status-container" data-course-id="${ section_data['course_id'] }"></div> + </div> + % endif + <div class="wrap"> + <h3 class="hd hd-3">${_('Student Special Exam Attempts')}</h3> <div class="student-proctored-exam-container" data-course-id="${ section_data['course_id'] }" data-enable-exam-resume-proctoring-improvements="${ section_data['enable_exam_resume_proctoring_improvements'] }"></div> </div> % if section_data['show_dashboard']: <div class="wrap"> - <h3 class="hd hd-3">${_('Review Dashboard')}</h3> + <h3 class="hd hd-3">${_('Review Dashboard')}</h3> <div class="student-review-dashboard-container" data-course-id="${ section_data['course_id'] }"></div> </div> % endif diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index ccf4d4731105e44fbf18bce2c4fc4a1add540690..18bf9a65783d7c94e64f713197b342818c5a9abc 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -106,7 +106,7 @@ edx-milestones==0.3.0 # via -r requirements/edx/base.in edx-opaque-keys[django]==2.2.0 # via -r requirements/edx/paver.txt, edx-bulk-grades, edx-ccx-keys, edx-completion, edx-drf-extensions, edx-enterprise, edx-milestones, edx-organizations, edx-proctoring, edx-user-state-client, edx-when, lti-consumer-xblock, xmodule edx-organizations==6.9.0 # via -r requirements/edx/base.in edx-proctoring-proctortrack==1.0.5 # via -r requirements/edx/base.in -edx-proctoring==3.2.1 # via -r requirements/edx/base.in, edx-proctoring-proctortrack +edx-proctoring==3.3.0 # via -r requirements/edx/base.in, edx-proctoring-proctortrack edx-rbac==1.4.1 # via edx-enterprise edx-rest-api-client==5.3.0 # via -r requirements/edx/base.in, edx-enterprise, edx-proctoring edx-search==3.0.0 # via -r requirements/edx/base.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index be5c204e3b57860d8bc63ef410a3ebce8d047f8c..414364b53db598dc61f59a49e68f6c1c7b659acd 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -118,7 +118,7 @@ edx-milestones==0.3.0 # via -r requirements/edx/testing.txt edx-opaque-keys[django]==2.2.0 # via -r requirements/edx/testing.txt, edx-bulk-grades, edx-ccx-keys, edx-completion, edx-drf-extensions, edx-enterprise, edx-milestones, edx-organizations, edx-proctoring, edx-user-state-client, edx-when, lti-consumer-xblock, xmodule edx-organizations==6.9.0 # via -r requirements/edx/testing.txt edx-proctoring-proctortrack==1.0.5 # via -r requirements/edx/testing.txt -edx-proctoring==3.2.1 # via -r requirements/edx/testing.txt, edx-proctoring-proctortrack +edx-proctoring==3.3.0 # via -r requirements/edx/testing.txt, edx-proctoring-proctortrack edx-rbac==1.4.1 # via -r requirements/edx/testing.txt, edx-enterprise edx-rest-api-client==5.3.0 # via -r requirements/edx/testing.txt, edx-enterprise, edx-proctoring edx-search==3.0.0 # via -r requirements/edx/testing.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index eb57ea71cb4e39013221518daabc2fe4d8e55c1b..8c75ba804c3ce17304043f63064076d0613e8ce4 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -115,7 +115,7 @@ edx-milestones==0.3.0 # via -r requirements/edx/base.txt edx-opaque-keys[django]==2.2.0 # via -r requirements/edx/base.txt, edx-bulk-grades, edx-ccx-keys, edx-completion, edx-drf-extensions, edx-enterprise, edx-milestones, edx-organizations, edx-proctoring, edx-user-state-client, edx-when, lti-consumer-xblock, xmodule edx-organizations==6.9.0 # via -r requirements/edx/base.txt edx-proctoring-proctortrack==1.0.5 # via -r requirements/edx/base.txt -edx-proctoring==3.2.1 # via -r requirements/edx/base.txt, edx-proctoring-proctortrack +edx-proctoring==3.3.0 # via -r requirements/edx/base.txt, edx-proctoring-proctortrack edx-rbac==1.4.1 # via -r requirements/edx/base.txt, edx-enterprise edx-rest-api-client==5.3.0 # via -r requirements/edx/base.txt, edx-enterprise, edx-proctoring edx-search==3.0.0 # via -r requirements/edx/base.txt