* fix: eslint operator-linebreak issue * fix: eslint quotes issue * fix: react jsx indent and props issues * fix: eslint trailing spaces issues * fix: eslint line around directives issue * fix: eslint semi rule * fix: eslint newline per chain rule * fix: eslint space infix ops rule * fix: eslint space-in-parens issue * fix: eslint space before function paren issue * fix: eslint space before blocks issue * fix: eslint arrow body style issue * fix: eslint dot-location issue * fix: eslint quotes issue * fix: eslint quote props issue * fix: eslint operator assignment issue * fix: eslint new line after import issue * fix: indent issues * fix: operator assignment issue * fix: all autofixable eslint issues * fix: all react related fixable issues * fix: autofixable eslint issues * chore: remove all template literals * fix: remaining autofixable issues * chore: apply amnesty on all existing issues * fix: failing xss-lint issues * refactor: apply amnesty on remaining issues * refactor: apply amnesty on new issues * fix: remove file level suppressions * refactor: apply amnesty on new issues
713 lines
38 KiB
JavaScript
713 lines
38 KiB
JavaScript
/* globals _, interpolate_text */
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
var PendingInstructorTasks, createTaskListTable, findAndAssert, statusAjaxError;
|
|
|
|
statusAjaxError = function() {
|
|
return window.InstructorDashboard.util.statusAjaxError.apply(this, arguments);
|
|
};
|
|
|
|
createTaskListTable = function() {
|
|
return window.InstructorDashboard.util.createTaskListTable.apply(this, arguments);
|
|
};
|
|
|
|
PendingInstructorTasks = function() {
|
|
return window.InstructorDashboard.util.PendingInstructorTasks;
|
|
};
|
|
|
|
findAndAssert = function($root, selector) {
|
|
var item, msg;
|
|
item = $root.find(selector);
|
|
if (item.length !== 1) {
|
|
msg = 'Failed Element Selection';
|
|
throw msg;
|
|
} else {
|
|
return item;
|
|
}
|
|
};
|
|
|
|
this.StudentAdmin = (function() {
|
|
function StudentAdmin($section) {
|
|
var studentadmin = this;
|
|
this.$section = $section;
|
|
this.$section.data('wrapper', this);
|
|
this.$field_student_select_enrollment_status = findAndAssert(this.$section, "input[name='student-select-enrollment-status']");
|
|
this.$field_student_select_progress = findAndAssert(this.$section, "input[name='student-select-progress']");
|
|
this.$field_student_select_grade = findAndAssert(this.$section, "input[name='student-select-grade']");
|
|
this.$progress_link = findAndAssert(this.$section, 'a.progress-link');
|
|
this.$field_problem_select_single = findAndAssert(this.$section, "input[name='problem-select-single']");
|
|
this.$btn_reset_attempts_single = findAndAssert(this.$section, "input[name='reset-attempts-single']");
|
|
this.$btn_delete_state_single = this.$section.find("input[name='delete-state-single']");
|
|
this.$btn_rescore_problem_single = this.$section.find("input[name='rescore-problem-single']");
|
|
this.$btn_rescore_problem_if_higher_single = this.$section.find(
|
|
"input[name='rescore-problem-if-higher-single']"
|
|
);
|
|
this.$btn_override_problem_score_single = this.$section.find(
|
|
"input[name='override-problem-score-single']"
|
|
);
|
|
this.$field_select_score_single = findAndAssert(this.$section, "input[name='score-select-single']");
|
|
this.$btn_task_history_single = this.$section.find("input[name='task-history-single']");
|
|
this.$table_task_history_single = this.$section.find('.task-history-single-table');
|
|
this.$field_exam_grade = this.$section.find("input[name='entrance-exam-student-select-grade']");
|
|
this.$btn_reset_entrance_exam_attempts = this.$section.find("input[name='reset-entrance-exam-attempts']");
|
|
this.$btn_delete_entrance_exam_state = this.$section.find("input[name='delete-entrance-exam-state']");
|
|
this.$btn_rescore_entrance_exam = this.$section.find("input[name='rescore-entrance-exam']");
|
|
this.$btn_rescore_entrance_exam_if_higher = this.$section.find(
|
|
"input[name='rescore-entrance-exam-if-higher']"
|
|
);
|
|
this.$btn_skip_entrance_exam = this.$section.find("input[name='skip-entrance-exam']");
|
|
this.$btn_entrance_exam_task_history = this.$section.find("input[name='entrance-exam-task-history']");
|
|
this.$table_entrance_exam_task_history = this.$section.find('.entrance-exam-task-history-table');
|
|
this.$field_problem_select_all = this.$section.find("input[name='problem-select-all']");
|
|
this.$btn_reset_attempts_all = this.$section.find("input[name='reset-attempts-all']");
|
|
this.$btn_rescore_problem_all = this.$section.find("input[name='rescore-problem-all']");
|
|
this.$btn_rescore_problem_if_higher_all = this.$section.find("input[name='rescore-problem-all-if-higher']");
|
|
this.$btn_task_history_all = this.$section.find("input[name='task-history-all']");
|
|
this.$table_task_history_all = this.$section.find('.task-history-all-table');
|
|
this.instructor_tasks = new (PendingInstructorTasks())(this.$section);
|
|
this.$request_err_enrollment_status = findAndAssert(this.$section, '.student-enrollment-status-container .request-response-error');
|
|
this.$request_err_progress = findAndAssert(this.$section, '.student-progress-container .request-response-error');
|
|
this.$request_err_grade = findAndAssert(this.$section, '.student-grade-container .request-response-error');
|
|
this.$request_err_ee = this.$section.find('.entrance-exam-grade-container .request-response-error');
|
|
this.$request_response_error_all = this.$section.find('.course-specific-container .request-response-error');
|
|
this.$enrollment_status_link = findAndAssert(this.$section, 'a.enrollment-status-link');
|
|
this.$enrollment_status = findAndAssert(this.$section, '.student-enrollment-status');
|
|
this.$enrollment_status_link.click(function(e) {
|
|
var errorMessage, fullErrorMessage, uniqStudentIdentifier;
|
|
e.preventDefault();
|
|
uniqStudentIdentifier = studentadmin.$field_student_select_enrollment_status.val();
|
|
if (!uniqStudentIdentifier) {
|
|
studentadmin.$enrollment_status.text('');
|
|
return studentadmin.$request_err_enrollment_status.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
errorMessage = gettext("Error getting enrollment status for '<%- student_id %>'. Make sure that the student identifier is spelled correctly."); // eslint-disable-line max-len
|
|
fullErrorMessage = _.template(errorMessage)({
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
studentadmin.$enrollment_status.text(gettext('Retrieving enrollment status...'));
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$enrollment_status_link.data('endpoint'),
|
|
data: {
|
|
course_id: studentadmin.$enrollment_status_link.data('course-id'),
|
|
unique_student_identifier: uniqStudentIdentifier
|
|
},
|
|
success: studentadmin.clear_errors_then(function(data) {
|
|
return studentadmin.$enrollment_status.text(data.enrollment_status);
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
studentadmin.$enrollment_status.text('');
|
|
return studentadmin.$request_err_enrollment_status.text(fullErrorMessage);
|
|
})
|
|
});
|
|
});
|
|
this.$progress_link.click(function(e) {
|
|
var errorMessage, fullErrorMessage, uniqStudentIdentifier;
|
|
e.preventDefault();
|
|
uniqStudentIdentifier = studentadmin.$field_student_select_progress.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_progress.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
errorMessage = gettext("Error getting student progress url for '<%- student_id %>'. Make sure that the student identifier is spelled correctly."); // eslint-disable-line max-len
|
|
fullErrorMessage = _.template(errorMessage)({
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$progress_link.data('endpoint'),
|
|
data: {
|
|
unique_student_identifier: uniqStudentIdentifier
|
|
},
|
|
success: studentadmin.clear_errors_then(function(data) {
|
|
window.location = data.progress_url;
|
|
return window.location;
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
return studentadmin.$request_err_progress.text(fullErrorMessage);
|
|
})
|
|
});
|
|
});
|
|
this.$btn_reset_attempts_single.click(function() {
|
|
var errorMessage, fullErrorMessage, fullSuccessMessage,
|
|
problemToReset, sendData, successMessage, uniqStudentIdentifier;
|
|
uniqStudentIdentifier = studentadmin.$field_student_select_grade.val();
|
|
problemToReset = studentadmin.$field_problem_select_single.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_grade.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
if (!problemToReset) {
|
|
return studentadmin.$request_err_grade.text(gettext('Please enter a problem location.'));
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
problem_to_reset: problemToReset,
|
|
delete_module: false
|
|
};
|
|
successMessage = gettext("Success! Problem attempts reset for problem '<%- problem_id %>' and student '<%- student_id %>'."); // eslint-disable-line max-len
|
|
errorMessage = gettext("Error resetting problem attempts for problem '<%- problem_id %>' and student '<%- student_id %>'. Make sure that the problem and student identifiers are complete and correct."); // eslint-disable-line max-len
|
|
fullSuccessMessage = _.template(successMessage)({
|
|
problem_id: problemToReset,
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
fullErrorMessage = _.template(errorMessage)({
|
|
problem_id: problemToReset,
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_reset_attempts_single.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function() {
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
return studentadmin.$request_err_grade.text(fullErrorMessage);
|
|
})
|
|
});
|
|
});
|
|
this.$btn_delete_state_single.click(function() {
|
|
var confirmMessage, errorMessage, fullConfirmMessage,
|
|
fullErrorMessage, problemToReset, sendData, uniqStudentIdentifier;
|
|
uniqStudentIdentifier = studentadmin.$field_student_select_grade.val();
|
|
problemToReset = studentadmin.$field_problem_select_single.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_grade.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
if (!problemToReset) {
|
|
return studentadmin.$request_err_grade.text(
|
|
gettext('Please enter a problem location.')
|
|
);
|
|
}
|
|
confirmMessage = gettext("Delete student '<%- student_id %>'s state on problem '<%- problem_id %>'?");
|
|
fullConfirmMessage = _.template(confirmMessage)({
|
|
student_id: uniqStudentIdentifier,
|
|
problem_id: problemToReset
|
|
});
|
|
if (window.confirm(fullConfirmMessage)) { // eslint-disable-line no-alert
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
problem_to_reset: problemToReset,
|
|
delete_module: true
|
|
};
|
|
errorMessage = gettext("Error deleting student '<%- student_id %>'s state on problem '<%- problem_id %>'. Make sure that the problem and student identifiers are complete and correct."); // eslint-disable-line max-len
|
|
fullErrorMessage = _.template(errorMessage)({
|
|
student_id: uniqStudentIdentifier,
|
|
problem_id: problemToReset
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_delete_state_single.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function() {
|
|
return alert(gettext('Module state successfully deleted.')); // eslint-disable-line no-alert, max-len
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
return studentadmin.$request_err_grade.text(fullErrorMessage);
|
|
})
|
|
});
|
|
} else {
|
|
return studentadmin.clear_errors();
|
|
}
|
|
});
|
|
this.$btn_rescore_problem_single.click(function() {
|
|
return studentadmin.rescore_problem_single(false);
|
|
});
|
|
this.$btn_rescore_problem_if_higher_single.click(function() {
|
|
return studentadmin.rescore_problem_single(true);
|
|
});
|
|
this.$btn_task_history_single.click(function() {
|
|
var errorMessage, fullErrorMessage, problemToReset, sendData, uniqStudentIdentifier;
|
|
uniqStudentIdentifier = studentadmin.$field_student_select_grade.val();
|
|
problemToReset = studentadmin.$field_problem_select_single.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_grade.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
if (!problemToReset) {
|
|
return studentadmin.$request_err_grade.text(
|
|
gettext('Please enter a problem location.')
|
|
);
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
problem_location_str: problemToReset
|
|
};
|
|
errorMessage = gettext("Error getting task history for problem '<%- problem_id %>' and student '<%- student_id %>'. Make sure that the problem and student identifiers are complete and correct."); // eslint-disable-line max-len
|
|
fullErrorMessage = _.template(errorMessage)({
|
|
student_id: uniqStudentIdentifier,
|
|
problem_id: problemToReset
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_task_history_single.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function(data) {
|
|
return createTaskListTable(studentadmin.$table_task_history_single, data.tasks);
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
return studentadmin.$request_err_grade.text(fullErrorMessage);
|
|
})
|
|
});
|
|
});
|
|
this.$btn_reset_entrance_exam_attempts.click(function() {
|
|
var sendData, uniqStudentIdentifier;
|
|
uniqStudentIdentifier = studentadmin.$field_exam_grade.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_ee.text(gettext(
|
|
'Please enter a student email address or username.')
|
|
);
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
delete_module: false
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_reset_entrance_exam_attempts.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function() {
|
|
var fullSuccessMessage, successMessage;
|
|
successMessage = gettext("Entrance exam attempts is being reset for student '{student_id}'.");
|
|
fullSuccessMessage = interpolate_text(successMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
var errorMessage, fullErrorMessage;
|
|
errorMessage = gettext("Error resetting entrance exam attempts for student '{student_id}'. Make sure student identifier is correct."); // eslint-disable-line max-len
|
|
fullErrorMessage = interpolate_text(errorMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return studentadmin.$request_err_ee.text(fullErrorMessage);
|
|
})
|
|
});
|
|
});
|
|
this.$btn_rescore_entrance_exam.click(function() {
|
|
return studentadmin.rescore_entrance_exam_all(false);
|
|
});
|
|
this.$btn_rescore_entrance_exam_if_higher.click(function() {
|
|
return studentadmin.rescore_entrance_exam_all(true);
|
|
});
|
|
this.$btn_skip_entrance_exam.click(function() {
|
|
var confirmMessage, fullConfirmMessage, sendData, uniqStudentIdentifier;
|
|
uniqStudentIdentifier = studentadmin.$field_exam_grade.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_ee.text(gettext("Enter a student's username or email address."));
|
|
}
|
|
confirmMessage = gettext("Do you want to allow this student ('{student_id}') to skip the entrance exam?"); // eslint-disable-line max-len
|
|
fullConfirmMessage = interpolate_text(confirmMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
if (window.confirm(fullConfirmMessage)) { // eslint-disable-line no-alert
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier
|
|
};
|
|
return $.ajax({
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_skip_entrance_exam.data('endpoint'),
|
|
data: sendData,
|
|
type: 'POST',
|
|
success: studentadmin.clear_errors_then(function(data) {
|
|
return alert(data.message); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
var errorMessage;
|
|
errorMessage = gettext("An error occurred. Make sure that the student's username or email address is correct and try again."); // eslint-disable-line max-len
|
|
return studentadmin.$request_err_ee.text(errorMessage);
|
|
})
|
|
});
|
|
}
|
|
return false;
|
|
});
|
|
this.$btn_delete_entrance_exam_state.click(function() {
|
|
var sendData, uniqStudentIdentifier;
|
|
uniqStudentIdentifier = studentadmin.$field_exam_grade.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_ee.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
delete_module: true
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_delete_entrance_exam_state.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function() {
|
|
var fullSuccessMessage, successMessage;
|
|
successMessage = gettext("Entrance exam state is being deleted for student '{student_id}'.");
|
|
fullSuccessMessage = interpolate_text(successMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
var errorMessage, fullErrorMessage;
|
|
errorMessage = gettext("Error deleting entrance exam state for student '{student_id}'. Make sure student identifier is correct."); // eslint-disable-line max-len
|
|
fullErrorMessage = interpolate_text(errorMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return studentadmin.$request_err_ee.text(fullErrorMessage);
|
|
})
|
|
});
|
|
});
|
|
this.$btn_entrance_exam_task_history.click(function() {
|
|
var sendData, uniqStudentIdentifier;
|
|
uniqStudentIdentifier = studentadmin.$field_exam_grade.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return studentadmin.$request_err_ee.text(
|
|
gettext("Enter a student's username or email address.")
|
|
);
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_entrance_exam_task_history.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function(data) {
|
|
return createTaskListTable(studentadmin.$table_entrance_exam_task_history, data.tasks);
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
var errorMessage, fullErrorMessage;
|
|
errorMessage = gettext("Error getting entrance exam task history for student '{student_id}'. Make sure student identifier is correct."); // eslint-disable-line max-len
|
|
fullErrorMessage = interpolate_text(errorMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return studentadmin.$request_err_ee.text(fullErrorMessage);
|
|
})
|
|
});
|
|
});
|
|
this.$btn_reset_attempts_all.click(function() {
|
|
var confirmMessage, errorMessage, fullConfirmMessage,
|
|
fullErrorMessage, fullSuccessMessage, problemToReset, sendData, successMessage;
|
|
problemToReset = studentadmin.$field_problem_select_all.val();
|
|
if (!problemToReset) {
|
|
return studentadmin.$request_response_error_all.text(
|
|
gettext('Please enter a problem location.')
|
|
);
|
|
}
|
|
confirmMessage = gettext("Reset attempts for all students on problem '<%- problem_id %>'?");
|
|
fullConfirmMessage = _.template(confirmMessage)({
|
|
problem_id: problemToReset
|
|
});
|
|
if (window.confirm(fullConfirmMessage)) { // eslint-disable-line no-alert
|
|
sendData = {
|
|
all_students: true,
|
|
problem_to_reset: problemToReset
|
|
};
|
|
successMessage = gettext("Successfully started task to reset attempts for problem '<%- problem_id %>'. Click the 'Show Task Status' button to see the status of the task."); // eslint-disable-line max-len
|
|
fullSuccessMessage = _.template(successMessage)({
|
|
problem_id: problemToReset
|
|
});
|
|
errorMessage = gettext("Error starting a task to reset attempts for all students on problem '<%- problem_id %>'. Make sure that the problem identifier is complete and correct."); // eslint-disable-line max-len
|
|
fullErrorMessage = _.template(errorMessage)({
|
|
problem_id: problemToReset
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_reset_attempts_all.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function() {
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
return studentadmin.$request_response_error_all.text(fullErrorMessage);
|
|
})
|
|
});
|
|
} else {
|
|
return studentadmin.clear_errors();
|
|
}
|
|
});
|
|
this.$btn_rescore_problem_all.click(function() {
|
|
return studentadmin.rescore_problem_all(false);
|
|
});
|
|
this.$btn_rescore_problem_if_higher_all.click(function() {
|
|
return studentadmin.rescore_problem_all(true);
|
|
});
|
|
this.$btn_override_problem_score_single.click(function() {
|
|
return studentadmin.override_problem_score_single();
|
|
});
|
|
this.$btn_task_history_all.click(function() {
|
|
var sendData;
|
|
sendData = {
|
|
problem_location_str: studentadmin.$field_problem_select_all.val()
|
|
};
|
|
if (!sendData.problem_location_str) {
|
|
return studentadmin.$request_response_error_all.text(
|
|
gettext('Please enter a problem location.')
|
|
);
|
|
}
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: studentadmin.$btn_task_history_all.data('endpoint'),
|
|
data: sendData,
|
|
success: studentadmin.clear_errors_then(function(data) {
|
|
return createTaskListTable(studentadmin.$table_task_history_all, data.tasks);
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
return studentadmin.$request_response_error_all.text(
|
|
gettext('Error listing task history for this student and problem.')
|
|
);
|
|
})
|
|
});
|
|
});
|
|
}
|
|
|
|
StudentAdmin.prototype.rescore_problem_single = function(onlyIfHigher) {
|
|
var defaultErrorMessage, fullDefaultErrorMessage, fullSuccessMessage,
|
|
problemToReset, sendData, successMessage, uniqStudentIdentifier,
|
|
that = this;
|
|
uniqStudentIdentifier = this.$field_student_select_grade.val();
|
|
problemToReset = this.$field_problem_select_single.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return this.$request_err_grade.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
if (!problemToReset) {
|
|
return this.$request_err_grade.text(
|
|
gettext('Please enter a problem location.')
|
|
);
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
problem_to_reset: problemToReset,
|
|
only_if_higher: onlyIfHigher
|
|
};
|
|
successMessage = gettext("Started rescore problem task for problem '<%- problem_id %>' and student '<%- student_id %>'. Click the 'Show Task Status' button to see the status of the task."); // eslint-disable-line max-len
|
|
fullSuccessMessage = _.template(successMessage)({
|
|
student_id: uniqStudentIdentifier,
|
|
problem_id: problemToReset
|
|
});
|
|
defaultErrorMessage = gettext("Error starting a task to rescore problem '<%- problem_id %>' for student '<%- student_id %>'. Make sure that the the problem and student identifiers are complete and correct."); // eslint-disable-line max-len
|
|
fullDefaultErrorMessage = _.template(defaultErrorMessage)({
|
|
student_id: uniqStudentIdentifier,
|
|
problem_id: problemToReset
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: this.$btn_rescore_problem_single.data('endpoint'),
|
|
data: sendData,
|
|
success: this.clear_errors_then(function() {
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function(response) {
|
|
if (response.responseText) {
|
|
return that.$request_err_grade.text(response.responseText);
|
|
}
|
|
return that.$request_err_grade.text(fullDefaultErrorMessage);
|
|
})
|
|
});
|
|
};
|
|
|
|
StudentAdmin.prototype.override_problem_score_single = function() {
|
|
var defaultErrorMessage, fullDefaultErrorMessage, fullSuccessMessage,
|
|
problemToReset, score, sendData, successMessage, uniqStudentIdentifier,
|
|
that = this;
|
|
uniqStudentIdentifier = this.$field_student_select_grade.val();
|
|
problemToReset = this.$field_problem_select_single.val();
|
|
score = this.$field_select_score_single.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return this.$request_err_grade.text(
|
|
gettext('Please enter a student email address or username.')
|
|
);
|
|
}
|
|
if (!problemToReset) {
|
|
return this.$request_err_grade.text(
|
|
gettext('Please enter a problem location.')
|
|
);
|
|
}
|
|
if (!score) {
|
|
return this.$request_err_grade.text(
|
|
gettext('Please enter a score.')
|
|
);
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
problem_to_reset: problemToReset,
|
|
score: score
|
|
};
|
|
successMessage = gettext("Started task to override the score for problem '<%- problem_id %>' and student '<%- student_id %>'. Click the 'Show Task Status' button to see the status of the task."); // eslint-disable-line max-len
|
|
fullSuccessMessage = _.template(successMessage)({
|
|
student_id: uniqStudentIdentifier,
|
|
problem_id: problemToReset
|
|
});
|
|
defaultErrorMessage = gettext("Error starting a task to override score for problem '<%- problem_id %>' for student '<%- student_id %>'. Make sure that the the score and the problem and student identifiers are complete and correct."); // eslint-disable-line max-len
|
|
fullDefaultErrorMessage = _.template(defaultErrorMessage)({
|
|
student_id: uniqStudentIdentifier,
|
|
problem_id: problemToReset
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: this.$btn_override_problem_score_single.data('endpoint'),
|
|
data: sendData,
|
|
success: this.clear_errors_then(function() {
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function(response) {
|
|
if (response.responseText) {
|
|
return that.$request_err_grade.text(response.responseText);
|
|
}
|
|
return that.$request_err_grade.text(fullDefaultErrorMessage);
|
|
})
|
|
});
|
|
};
|
|
|
|
StudentAdmin.prototype.rescore_entrance_exam_all = function(onlyIfHigher) {
|
|
var sendData, uniqStudentIdentifier,
|
|
that = this;
|
|
uniqStudentIdentifier = this.$field_exam_grade.val();
|
|
if (!uniqStudentIdentifier) {
|
|
return this.$request_err_ee.text(gettext(
|
|
'Please enter a student email address or username.')
|
|
);
|
|
}
|
|
sendData = {
|
|
unique_student_identifier: uniqStudentIdentifier,
|
|
only_if_higher: onlyIfHigher
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: this.$btn_rescore_entrance_exam.data('endpoint'),
|
|
data: sendData,
|
|
success: this.clear_errors_then(function() {
|
|
var fullSuccessMessage, successMessage;
|
|
successMessage = gettext("Started entrance exam rescore task for student '{student_id}'. Click the 'Show Task Status' button to see the status of the task."); // eslint-disable-line max-len
|
|
fullSuccessMessage = interpolate_text(successMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function() {
|
|
var errorMessage, fullErrorMessage;
|
|
errorMessage = gettext("Error starting a task to rescore entrance exam for student '{student_id}'. Make sure that entrance exam has problems in it and student identifier is correct."); // eslint-disable-line max-len
|
|
fullErrorMessage = interpolate_text(errorMessage, {
|
|
student_id: uniqStudentIdentifier
|
|
});
|
|
return that.$request_err_ee.text(fullErrorMessage);
|
|
})
|
|
});
|
|
};
|
|
|
|
StudentAdmin.prototype.rescore_problem_all = function(onlyIfHigher) {
|
|
var confirmMessage, defaultErrorMessage, fullConfirmMessage,
|
|
fullDefaultErrorMessage, fullSuccessMessage, problemToReset,
|
|
sendData, successMessage,
|
|
that = this;
|
|
problemToReset = this.$field_problem_select_all.val();
|
|
if (!problemToReset) {
|
|
return this.$request_response_error_all.text(
|
|
gettext('Please enter a problem location.')
|
|
);
|
|
}
|
|
confirmMessage = gettext("Rescore problem '<%- problem_id %>' for all students?");
|
|
fullConfirmMessage = _.template(confirmMessage)({
|
|
problem_id: problemToReset
|
|
});
|
|
if (window.confirm(fullConfirmMessage)) { // eslint-disable-line no-alert
|
|
sendData = {
|
|
all_students: true,
|
|
problem_to_reset: problemToReset,
|
|
only_if_higher: onlyIfHigher
|
|
};
|
|
successMessage = gettext("Successfully started task to rescore problem '<%- problem_id %>' for all students. Click the 'Show Task Status' button to see the status of the task."); // eslint-disable-line max-len
|
|
fullSuccessMessage = _.template(successMessage)({
|
|
problem_id: problemToReset
|
|
});
|
|
defaultErrorMessage = gettext("Error starting a task to rescore problem '<%- problem_id %>'. Make sure that the problem identifier is complete and correct."); // eslint-disable-line max-len
|
|
fullDefaultErrorMessage = _.template(defaultErrorMessage)({
|
|
problem_id: problemToReset
|
|
});
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: this.$btn_rescore_problem_all.data('endpoint'),
|
|
data: sendData,
|
|
success: this.clear_errors_then(function() {
|
|
return alert(fullSuccessMessage); // eslint-disable-line no-alert
|
|
}),
|
|
error: statusAjaxError(function(response) {
|
|
if (response.responseText) {
|
|
return that.$request_response_error_all.text(response.responseText);
|
|
}
|
|
return that.$request_response_error_all.text(fullDefaultErrorMessage);
|
|
})
|
|
});
|
|
} else {
|
|
return this.clear_errors();
|
|
}
|
|
};
|
|
|
|
StudentAdmin.prototype.clear_errors_then = function(cb) {
|
|
this.$request_err_enrollment_status.empty();
|
|
this.$request_err_progress.empty();
|
|
this.$request_err_grade.empty();
|
|
this.$request_err_ee.empty();
|
|
this.$request_response_error_all.empty();
|
|
return function() {
|
|
// eslint-disable-next-line no-void
|
|
return cb != null ? cb.apply(this, arguments) : void 0;
|
|
};
|
|
};
|
|
|
|
StudentAdmin.prototype.clear_errors = function() {
|
|
this.$request_err_enrollment_status.empty();
|
|
this.$request_err_progress.empty();
|
|
this.$request_err_grade.empty();
|
|
this.$request_err_ee.empty();
|
|
return this.$request_response_error_all.empty();
|
|
};
|
|
|
|
StudentAdmin.prototype.onClickTitle = function() {
|
|
return this.instructor_tasks.task_poller.start();
|
|
};
|
|
|
|
StudentAdmin.prototype.onExit = function() {
|
|
return this.instructor_tasks.task_poller.stop();
|
|
};
|
|
|
|
return StudentAdmin;
|
|
}());
|
|
|
|
_.defaults(window, {
|
|
InstructorDashboard: {}
|
|
});
|
|
|
|
_.defaults(window.InstructorDashboard, {
|
|
sections: {}
|
|
});
|
|
|
|
_.defaults(window.InstructorDashboard.sections, {
|
|
StudentAdmin: this.StudentAdmin
|
|
});
|
|
}).call(this);
|