|
|
|
|
@@ -9,12 +9,6 @@ std_ajax_err = -> window.InstructorDashboard.util.std_ajax_err.apply this, argum
|
|
|
|
|
load_IntervalManager = -> window.InstructorDashboard.util.IntervalManager
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# wrap window.confirm
|
|
|
|
|
# display `msg`
|
|
|
|
|
# run `ok` or `cancel` depending on response
|
|
|
|
|
confirm_then = ({msg, ok, cancel}) ->
|
|
|
|
|
if window.confirm msg then ok?() else cancel?()
|
|
|
|
|
|
|
|
|
|
# get jquery element and assert its existance
|
|
|
|
|
find_and_assert = ($root, selector) ->
|
|
|
|
|
item = $root.find selector
|
|
|
|
|
@@ -85,8 +79,6 @@ class StudentAdmin
|
|
|
|
|
@$progress_link = find_and_assert @$section, "a.progress-link"
|
|
|
|
|
@$field_problem_select_single = find_and_assert @$section, "input[name='problem-select-single']"
|
|
|
|
|
@$btn_reset_attempts_single = find_and_assert @$section, "input[name='reset-attempts-single']"
|
|
|
|
|
@$btn_enroll = @$section.find "input[name='enroll']"
|
|
|
|
|
@$btn_unenroll = @$section.find "input[name='unenroll']"
|
|
|
|
|
@$btn_delete_state_single = @$section.find "input[name='delete-state-single']"
|
|
|
|
|
@$btn_rescore_problem_single = @$section.find "input[name='rescore-problem-single']"
|
|
|
|
|
@$btn_task_history_single = @$section.find "input[name='task-history-single']"
|
|
|
|
|
@@ -121,7 +113,9 @@ class StudentAdmin
|
|
|
|
|
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."
|
|
|
|
|
return @$request_response_error_progress.text gettext("Please enter a student email address or username.")
|
|
|
|
|
error_message = gettext("Error getting student progress url for '<%= student_id %>'. Check that the student identifier is spelled correctly.")
|
|
|
|
|
full_error_message = _.template(error_message, {student_id: unique_student_identifier})
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
@@ -129,77 +123,59 @@ 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_progress.text "Error getting student progress url for '#{unique_student_identifier}'."
|
|
|
|
|
|
|
|
|
|
# enroll student
|
|
|
|
|
@$btn_enroll.click =>
|
|
|
|
|
send_data =
|
|
|
|
|
action: 'enroll'
|
|
|
|
|
emails: @$field_student_select_progress.val()
|
|
|
|
|
auto_enroll: false
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
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_progress.text "Error enrolling student '#{send_data.emails}'."
|
|
|
|
|
|
|
|
|
|
# unenroll student
|
|
|
|
|
@$btn_unenroll.click =>
|
|
|
|
|
send_data =
|
|
|
|
|
action: 'unenroll'
|
|
|
|
|
emails: @$field_student_select_progress.val()
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
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_progress.text "Error unenrolling student '#{send_data.emails}'."
|
|
|
|
|
error: std_ajax_err => @$request_response_error_progress.text full_error_message
|
|
|
|
|
|
|
|
|
|
# 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."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a student email address or username.")
|
|
|
|
|
if not problem_to_reset
|
|
|
|
|
return @$request_response_error_grade.text "Please enter a problem urlname."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a problem urlname.")
|
|
|
|
|
send_data =
|
|
|
|
|
unique_student_identifier: unique_student_identifier
|
|
|
|
|
problem_to_reset: problem_to_reset
|
|
|
|
|
delete_module: false
|
|
|
|
|
success_message = gettext("Success! Problem attempts reset for problem '<%= problem_id %>' and student '<%= student_id %>'.")
|
|
|
|
|
error_message = gettext("Error resetting problem attempts for problem '<%= problem_id %>' and student '<%= student_id %>'. Check that the problem and student identifiers are spelled correctly.")
|
|
|
|
|
full_success_message = _.template(success_message, {problem_id: problem_to_reset, student_id: unique_student_identifier})
|
|
|
|
|
full_error_message = _.template(error_message, {problem_id: problem_to_reset, student_id: unique_student_identifier})
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
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_grade.text "Error resetting problem attempts for problem '#{problem_to_reset}' and student '#{unique_student_identifier}'."
|
|
|
|
|
success: @clear_errors_then -> alert full_success_message
|
|
|
|
|
error: std_ajax_err => @$request_response_error_grade.text full_error_message
|
|
|
|
|
|
|
|
|
|
# delete state for student on problem
|
|
|
|
|
@$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."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a student email address or username.")
|
|
|
|
|
if not problem_to_reset
|
|
|
|
|
return @$request_response_error_grade.text "Please enter a problem urlname."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a problem urlname.")
|
|
|
|
|
confirm_message = gettext("Delete student '<%= student_id %>'s state on problem '<%= problem_id %>'?")
|
|
|
|
|
full_confirm_message = _.template(confirm_message, {student_id: unique_student_identifier, problem_id: problem_to_reset})
|
|
|
|
|
|
|
|
|
|
if window.confirm "Delete student '#{unique_student_identifier}'s state on problem '#{problem_to_reset}'?"
|
|
|
|
|
if window.confirm full_confirm_message
|
|
|
|
|
send_data =
|
|
|
|
|
unique_student_identifier: unique_student_identifier
|
|
|
|
|
problem_to_reset: problem_to_reset
|
|
|
|
|
delete_module: true
|
|
|
|
|
error_message = gettext("Error deleting student '<%= student_id %>'s state on problem '<%= problem_id %>'. Check that the problem and student identifiers are spelled correctly.")
|
|
|
|
|
full_error_message = _.template(error_message, {student_id: unique_student_identifier, problem_id: problem_to_reset})
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
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_grade.text "Error deleting problem state."
|
|
|
|
|
success: @clear_errors_then -> alert gettext('Module state successfully deleted.')
|
|
|
|
|
error: std_ajax_err => @$request_response_error_grade.text full_error_message
|
|
|
|
|
else
|
|
|
|
|
# Clear error messages if "Cancel" was chosen on confirmation alert
|
|
|
|
|
@clear_errors()
|
|
|
|
|
|
|
|
|
|
# start task to rescore problem for student
|
|
|
|
|
@@ -207,31 +183,37 @@ class StudentAdmin
|
|
|
|
|
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."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a student email address or username.")
|
|
|
|
|
if not problem_to_reset
|
|
|
|
|
return @$request_response_error_grade.text "Please enter a problem urlname."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a problem urlname.")
|
|
|
|
|
send_data =
|
|
|
|
|
unique_student_identifier: unique_student_identifier
|
|
|
|
|
problem_to_reset: problem_to_reset
|
|
|
|
|
success_message = gettext("Started rescore problem task for problem '<%= problem_id %>' and student '<%= student_id %>'. Click the 'Show Background Task History for Student' button to see the status of the task.")
|
|
|
|
|
full_success_message = _.template(success_message, {student_id: unique_student_identifier, problem_id: problem_to_reset})
|
|
|
|
|
error_message = gettext("Error starting a task to rescore problem '<%= problem_id %>' for student '<%= student_id %>'. Check that the problem and student identifiers are spelled correctly.")
|
|
|
|
|
full_error_message = _.template(error_message, {student_id: unique_student_identifier, problem_id: problem_to_reset})
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
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_grade.text "Error starting a task to rescore problem '#{problem_to_reset}' for student '#{unique_student_identifier}'."
|
|
|
|
|
success: @clear_errors_then -> alert full_success_message
|
|
|
|
|
error: std_ajax_err => @$request_response_error_grade.text full_error_message
|
|
|
|
|
|
|
|
|
|
# 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."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a student email address or username.")
|
|
|
|
|
if not problem_to_reset
|
|
|
|
|
return @$request_response_error_grade.text "Please enter a problem urlname."
|
|
|
|
|
return @$request_response_error_grade.text gettext("Please enter a problem urlname.")
|
|
|
|
|
send_data =
|
|
|
|
|
unique_student_identifier: unique_student_identifier
|
|
|
|
|
problem_urlname: problem_to_reset
|
|
|
|
|
error_message = gettext("Error getting task history for problem '<%= problem_id %>' and student '<%= student_id %>'. Check that the problem and student identifiers are spelled correctly.")
|
|
|
|
|
full_error_message = _.template(error_message, {student_id: unique_student_identifier, problem_id: problem_to_reset})
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
@@ -239,44 +221,58 @@ 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_grade.text "Error getting task history for student '#{unique_student_identifier}' and problem '#{problem_to_reset}'."
|
|
|
|
|
error: std_ajax_err => @$request_response_error_grade.text full_error_message
|
|
|
|
|
|
|
|
|
|
# start task to reset attempts on problem for all students
|
|
|
|
|
@$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()}'?"
|
|
|
|
|
return @$request_response_error_all.text gettext("Please enter a problem urlname.")
|
|
|
|
|
confirm_message = gettext("Reset attempts for all students on problem '<%= problem_id %>'?")
|
|
|
|
|
full_confirm_message = _.template(confirm_message, {problem_id: problem_to_reset})
|
|
|
|
|
if window.confirm full_confirm_message
|
|
|
|
|
send_data =
|
|
|
|
|
all_students: true
|
|
|
|
|
problem_to_reset: problem_to_reset
|
|
|
|
|
success_message = gettext("Successfully started task to reset attempts for problem '<%= problem_id %>'. Click the 'Show Background Task History for Problem' button to see the status of the task.")
|
|
|
|
|
full_success_message = _.template(success_message, {problem_id: problem_to_reset})
|
|
|
|
|
error_message = gettext("Error starting a task to reset attempts for all students on problem '<%= problem_id %>'. Check that the problem identifier is spelled correctly.")
|
|
|
|
|
full_error_message = _.template(error_message, {problem_id: problem_to_reset})
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
url: @$btn_reset_attempts_all.data 'endpoint'
|
|
|
|
|
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."
|
|
|
|
|
success: @clear_errors_then -> alert full_success_message
|
|
|
|
|
error: std_ajax_err => @$request_response_error_all.text full_error_message
|
|
|
|
|
else
|
|
|
|
|
# Clear error messages if "Cancel" was chosen on confirmation alert
|
|
|
|
|
@clear_errors()
|
|
|
|
|
|
|
|
|
|
# start task to rescore problem for all students
|
|
|
|
|
@$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?"
|
|
|
|
|
return @$request_response_error_all.text gettext("Please enter a problem urlname.")
|
|
|
|
|
confirm_message = gettext("Rescore problem '<%= problem_id %>' for all students?")
|
|
|
|
|
full_confirm_message = _.template(confirm_message, {problem_id: problem_to_reset})
|
|
|
|
|
if window.confirm full_confirm_message
|
|
|
|
|
send_data =
|
|
|
|
|
all_students: true
|
|
|
|
|
problem_to_reset: problem_to_reset
|
|
|
|
|
success_message = gettext("Successfully started task to rescore problem '<%= problem_id %>' for all students. Click the 'Show Background Task History for Problem' button to see the status of the task.")
|
|
|
|
|
full_success_message = _.template(success_message, {problem_id: problem_to_reset})
|
|
|
|
|
error_message = gettext("Error starting a task to rescore problem '<%= problem_id %>'. Check that the problem identifier is spelled correctly.")
|
|
|
|
|
full_error_message = _.template(error_message, {problem_id: problem_to_reset})
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
url: @$btn_rescore_problem_all.data 'endpoint'
|
|
|
|
|
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."
|
|
|
|
|
success: @clear_errors_then -> alert full_success_message
|
|
|
|
|
error: std_ajax_err => @$request_response_error_all.text full_error_message
|
|
|
|
|
else
|
|
|
|
|
# Clear error messages if "Cancel" was chosen on confirmation alert
|
|
|
|
|
@clear_errors()
|
|
|
|
|
|
|
|
|
|
# list task history for problem
|
|
|
|
|
@@ -285,7 +281,7 @@ class StudentAdmin
|
|
|
|
|
problem_urlname: @$field_problem_select_all.val()
|
|
|
|
|
|
|
|
|
|
if not send_data.problem_urlname
|
|
|
|
|
return @$request_response_error_all.text "Please enter a problem urlname."
|
|
|
|
|
return @$request_response_error_all.text gettext("Please enter a problem urlname.")
|
|
|
|
|
|
|
|
|
|
$.ajax
|
|
|
|
|
dataType: 'json'
|
|
|
|
|
@@ -293,7 +289,7 @@ class StudentAdmin
|
|
|
|
|
data: send_data
|
|
|
|
|
success: @clear_errors_then (data) =>
|
|
|
|
|
create_task_list_table @$table_task_history_all, data.tasks
|
|
|
|
|
error: std_ajax_err => @$request_response_error_all.text "Error listing task history for this student and problem."
|
|
|
|
|
error: std_ajax_err => @$request_response_error_all.text gettext("Error listing task history for this student and problem.")
|
|
|
|
|
|
|
|
|
|
reload_running_tasks_list: =>
|
|
|
|
|
list_endpoint = @$table_running_tasks.data 'endpoint'
|
|
|
|
|
|