diff --git a/lms/static/coffee/src/instructor_dashboard/student_admin.coffee b/lms/static/coffee/src/instructor_dashboard/student_admin.coffee index 3030f622ce..3e5c8c27c2 100644 --- a/lms/static/coffee/src/instructor_dashboard/student_admin.coffee +++ b/lms/static/coffee/src/instructor_dashboard/student_admin.coffee @@ -101,7 +101,8 @@ class StudentAdmin @$table_running_tasks = @$section.find ".running-tasks-table" # response areas - @$request_response_error_single = find_and_assert @$section, ".student-specific-container .request-response-error" + @$request_response_error_progress = find_and_assert @$section, ".student-specific-container .request-response-error" + @$request_response_error_grade = find_and_assert @$section, ".student-grade-container .request-response-error" @$request_response_error_all = @$section.find ".course-specific-container .request-response-error" # start polling for task list @@ -119,6 +120,8 @@ class StudentAdmin @$progress_link.click (e) => e.preventDefault() unique_student_identifier = @$field_student_select_progress.val() + if not unique_student_identifier + return @$request_response_error_progress.text "Please enter a student email address or username." $.ajax dataType: 'json' @@ -126,7 +129,7 @@ class StudentAdmin data: unique_student_identifier: unique_student_identifier success: @clear_errors_then (data) -> window.location = data.progress_url - error: std_ajax_err => @$request_response_error_single.text "Error getting student progress url for '#{unique_student_identifier}'." + error: std_ajax_err => @$request_response_error_progress.text "Error getting student progress url for '#{unique_student_identifier}'." # enroll student @$btn_enroll.click => @@ -140,7 +143,7 @@ class StudentAdmin url: @$btn_enroll.data 'endpoint' data: send_data success: @clear_errors_then -> console.log "student #{send_data.emails} enrolled" - error: std_ajax_err => @$request_response_error_single.text "Error enrolling student '#{send_data.emails}'." + error: std_ajax_err => @$request_response_error_progress.text "Error enrolling student '#{send_data.emails}'." # unenroll student @$btn_unenroll.click => @@ -153,12 +156,16 @@ class StudentAdmin url: @$btn_unenroll.data 'endpoint' data: send_data success: @clear_errors_then -> console.log "student #{send_data.emails} unenrolled" - error: std_ajax_err => @$request_response_error_single.text "Error unenrolling student '#{send_data.emails}'." + error: std_ajax_err => @$request_response_error_progress.text "Error unenrolling student '#{send_data.emails}'." # reset attempts for student on problem @$btn_reset_attempts_single.click => unique_student_identifier = @$field_student_select_grade.val() problem_to_reset = @$field_problem_select_single.val() + if not unique_student_identifier + return @$request_response_error_grade.text "Please enter a student email address or username." + if not problem_to_reset + return @$request_response_error_grade.text "Please enter a problem urlname." send_data = unique_student_identifier: unique_student_identifier problem_to_reset: problem_to_reset @@ -169,15 +176,21 @@ class StudentAdmin url: @$btn_reset_attempts_single.data 'endpoint' data: send_data success: @clear_errors_then -> alert "Success! Problem attempts reset for problem '#{problem_to_reset}' and student '#{unique_student_identifier}'." - error: std_ajax_err => @$request_response_error_single.text "Error resetting problem attempts for problem '#{problem_to_reset}' and student '#{unique_student_identifier}'." + error: std_ajax_err => @$request_response_error_grade.text "Error resetting problem attempts for problem '#{problem_to_reset}' and student '#{unique_student_identifier}'." # delete state for student on problem - @$btn_delete_state_single.click => confirm_then - msg: "Delete student '#{@$field_student_select_grade.val()}'s state on problem '#{@$field_problem_select_single.val()}'?" - ok: => + @$btn_delete_state_single.click => + unique_student_identifier = @$field_student_select_grade.val() + problem_to_reset = @$field_problem_select_single.val() + if not unique_student_identifier + return @$request_response_error_grade.text "Please enter a student email address or username." + if not problem_to_reset + return @$request_response_error_grade.text "Please enter a problem urlname." + + if window.confirm "Delete student '#{unique_student_identifier}'s state on problem '#{problem_to_reset}'?" send_data = - unique_student_identifier: @$field_student_select_grade.val() - problem_to_reset: @$field_problem_select_single.val() + unique_student_identifier: unique_student_identifier + problem_to_reset: problem_to_reset delete_module: true $.ajax @@ -185,12 +198,18 @@ class StudentAdmin url: @$btn_delete_state_single.data 'endpoint' data: send_data success: @clear_errors_then -> alert 'Module state successfully deleted.' - error: std_ajax_err => @$request_response_error_single.text "Error deleting problem state." + error: std_ajax_err => @$request_response_error_grade.text "Error deleting problem state." + else + @clear_errors() # start task to rescore problem for student @$btn_rescore_problem_single.click => unique_student_identifier = @$field_student_select_grade.val() problem_to_reset = @$field_problem_select_single.val() + if not unique_student_identifier + return @$request_response_error_grade.text "Please enter a student email address or username." + if not problem_to_reset + return @$request_response_error_grade.text "Please enter a problem urlname." send_data = unique_student_identifier: unique_student_identifier problem_to_reset: problem_to_reset @@ -200,18 +219,19 @@ class StudentAdmin url: @$btn_rescore_problem_single.data 'endpoint' data: send_data success: @clear_errors_then -> alert "Started rescore problem task for problem '#{problem_to_reset}' and student '#{unique_student_identifier}'. Click the 'Show Background Task History for Student' button to see the status of the task." - error: std_ajax_err => @$request_response_error_single.text "Error starting a task to rescore problem '#{problem_to_reset}' for student '#{unique_student_identifier}'." + error: std_ajax_err => @$request_response_error_grade.text "Error starting a task to rescore problem '#{problem_to_reset}' for student '#{unique_student_identifier}'." # list task history for student+problem @$btn_task_history_single.click => + unique_student_identifier = @$field_student_select_grade.val() + problem_to_reset = @$field_problem_select_single.val() + if not unique_student_identifier + return @$request_response_error_grade.text "Please enter a student email address or username." + if not problem_to_reset + return @$request_response_error_grade.text "Please enter a problem urlname." send_data = - unique_student_identifier: @$field_student_select_grade.val() - problem_urlname: @$field_problem_select_single.val() - - if not send_data.unique_student_identifier - return @$request_response_error_single.text "Please enter a student email address or username." - if not send_data.problem_urlname - return @$request_response_error_single.text "Please enter a problem urlname." + unique_student_identifier: unique_student_identifier + problem_urlname: problem_to_reset $.ajax dataType: 'json' @@ -219,13 +239,14 @@ class StudentAdmin data: send_data success: @clear_errors_then (data) => create_task_list_table @$table_task_history_single, data.tasks - error: std_ajax_err => @$request_response_error_single.text "Error getting task history for student+problem" + error: std_ajax_err => @$request_response_error_grade.text "Error getting task history for student '#{unique_student_identifier}' and problem '#{problem_to_reset}'." # start task to reset attempts on problem for all students - @$btn_reset_attempts_all.click => confirm_then - msg: "Reset attempts for all students on problem '#{@$field_problem_select_all.val()}'?" - ok: => - problem_to_reset = @$field_problem_select_all.val() + @$btn_reset_attempts_all.click => + problem_to_reset = @$field_problem_select_all.val() + if not problem_to_reset + return @$request_response_error_all.text "Please enter a problem urlname." + if window.confirm "Reset attempts for all students on problem '#{@$field_problem_select_all.val()}'?" send_data = all_students: true problem_to_reset: problem_to_reset @@ -236,12 +257,15 @@ class StudentAdmin data: send_data success: @clear_errors_then -> alert "Successfully started task to reset attempts for problem '#{problem_to_reset}'. Click the 'Show Background Task History for Problem' button to see the status of the task." error: std_ajax_err => @$request_response_error_all.text "Error starting a task to reset attempts for all students on this problem." + else + @clear_errors() # start task to rescore problem for all students - @$btn_rescore_problem_all.click => confirm_then - msg: "Rescore problem '#{@$field_problem_select_all.val()}' for all students?" - ok: => - problem_to_reset = @$field_problem_select_all.val() + @$btn_rescore_problem_all.click => + problem_to_reset = @$field_problem_select_all.val() + if not problem_to_reset + return @$request_response_error_all.text "Please enter a problem urlname." + if window.confirm "Rescore problem '#{@$field_problem_select_all.val()}' for all students?" send_data = all_students: true problem_to_reset: problem_to_reset @@ -252,6 +276,8 @@ class StudentAdmin data: send_data success: @clear_errors_then -> alert "Successfully started task to rescore problem '#{problem_to_reset}' for all students. Click the 'Show Background Task History for Problem' button to see the status of the task." error: std_ajax_err => @$request_response_error_all.text "Error starting a task to rescore this problem for all students." + else + @clear_errors() # list task history for problem @$btn_task_history_all.click => @@ -259,7 +285,7 @@ class StudentAdmin problem_urlname: @$field_problem_select_all.val() if not send_data.problem_urlname - return @$request_response_error_all.text "Enter a problem urlname." + return @$request_response_error_all.text "Please enter a problem urlname." $.ajax dataType: 'json' @@ -279,11 +305,18 @@ class StudentAdmin # wraps a function, but first clear the error displays clear_errors_then: (cb) -> - @$request_response_error_single.empty() + @$request_response_error_progress.empty() + @$request_response_error_grade.empty() @$request_response_error_all.empty() -> cb?.apply this, arguments + + clear_errors: -> + @$request_response_error_progress.empty() + @$request_response_error_grade.empty() + @$request_response_error_all.empty() + # handler for when the section title is clicked. onClickTitle: -> @task_poller?.start() diff --git a/lms/templates/instructor/instructor_dashboard_2/student_admin.html b/lms/templates/instructor/instructor_dashboard_2/student_admin.html index 001987ec18..f3fc7b6054 100644 --- a/lms/templates/instructor/instructor_dashboard_2/student_admin.html +++ b/lms/templates/instructor/instructor_dashboard_2/student_admin.html @@ -29,9 +29,11 @@ -->
+ +

${_("Student-specific grade adjustment")}

- +

${_("Specify the {platform_name} email address or username of a student here:").format(platform_name=settings.PLATFORM_NAME)}