MDL-82681 mod_assign: Revert improper code removal

The grading_options_form class was deprecated in 4.5, and a temporary
copy of this class was introduced to facilitate the migration of its
elements across different areas of the submission page, ensuring no
breakages if any external code is using this form (MDL-82857).
However, the process_save_grading_options() method, which processes
data from this form, was modified and this should not have occurred.
To maintain proper backward compatibility, a similar approach should
be taken by introducing a temporary copy of the method. Both the
temporary method and temporary form class should be removed once the
migration of elements is complete.
This commit is contained in:
Mihail Geshoski
2024-09-19 23:17:43 +08:00
parent ca293159e7
commit 15fc229e77
3 changed files with 125 additions and 2 deletions
@@ -59,7 +59,7 @@ class grading_options_temp_form extends \moodleform {
$mform->setType('id', PARAM_INT);
$mform->addElement('hidden', 'userid', $instance['userid']);
$mform->setType('userid', PARAM_INT);
$mform->addElement('hidden', 'action', 'saveoptions');
$mform->addElement('hidden', 'action', 'saveoptionstemp');
$mform->setType('action', PARAM_ALPHA);
// Buttons.
+89
View File
@@ -638,6 +638,10 @@ class assign {
$this->process_save_grading_options();
$action = 'redirect';
$nextpageparams['action'] = 'grading';
} else if ($action == 'saveoptionstemp') {
$this->process_save_grading_options_temp();
$action = 'redirect';
$nextpageparams['action'] = 'grading';
} else if ($action == 'saveextension') {
$action = 'grantextension';
if ($this->process_save_extension($mform)) {
@@ -7382,6 +7386,91 @@ class assign {
$this->require_view_grades();
require_sesskey();
// Is advanced grading enabled?
$gradingmanager = get_grading_manager($this->get_context(), 'mod_assign', 'submissions');
$controller = $gradingmanager->get_active_controller();
$showquickgrading = empty($controller);
if (!is_null($this->context)) {
$showonlyactiveenrolopt = has_capability('moodle/course:viewsuspendedusers', $this->context);
} else {
$showonlyactiveenrolopt = false;
}
$markingallocation = $this->get_instance()->markingworkflow &&
$this->get_instance()->markingallocation &&
has_capability('mod/assign:manageallocations', $this->context);
// Get markers to use in drop lists.
$markingallocationoptions = array();
if ($markingallocation) {
$markingallocationoptions[''] = get_string('filternone', 'assign');
$markingallocationoptions[ASSIGN_MARKER_FILTER_NO_MARKER] = get_string('markerfilternomarker', 'assign');
list($sort, $params) = users_order_by_sql('u');
// Only enrolled users could be assigned as potential markers.
$markers = get_enrolled_users($this->context, 'mod/assign:grade', 0, 'u.*', $sort);
foreach ($markers as $marker) {
$markingallocationoptions[$marker->id] = fullname($marker);
}
}
// Get marking states to show in form.
$markingworkflowoptions = $this->get_marking_workflow_filters();
$gradingoptionsparams = [
'cm' => $this->get_course_module()->id,
'contextid' => $this->context->id,
'userid' => $USER->id,
'submissionsenabled' => $this->is_any_submission_plugin_enabled(),
'showquickgrading' => $showquickgrading,
'quickgrading' => false,
'markingworkflowopt' => $markingworkflowoptions,
'markingallocationopt' => $markingallocationoptions,
'showonlyactiveenrolopt' => $showonlyactiveenrolopt,
'showonlyactiveenrol' => $this->show_only_active_users(),
'downloadasfolders' => get_user_preferences('assign_downloadasfolders', 1)
];
$mform = new mod_assign_grading_options_form(null, $gradingoptionsparams);
if ($formdata = $mform->get_data()) {
set_user_preference('assign_perpage', $formdata->perpage);
if (isset($formdata->filter)) {
set_user_preference('assign_filter', $formdata->filter);
}
if (isset($formdata->markerfilter)) {
set_user_preference('assign_markerfilter', $formdata->markerfilter);
}
if (isset($formdata->workflowfilter)) {
set_user_preference('assign_workflowfilter', $formdata->workflowfilter);
}
if ($showquickgrading) {
set_user_preference('assign_quickgrading', isset($formdata->quickgrading));
}
if (isset($formdata->downloadasfolders)) {
set_user_preference('assign_downloadasfolders', 1); // Enabled.
} else {
set_user_preference('assign_downloadasfolders', 0); // Disabled.
}
if (!empty($showonlyactiveenrolopt)) {
$showonlyactiveenrol = isset($formdata->showonlyactiveenrol);
set_user_preference('grade_report_showonlyactiveenrol', $showonlyactiveenrol);
$this->showonlyactiveenrol = $showonlyactiveenrol;
}
}
}
/**
* Save grading options.
*
* @return void
*/
protected function process_save_grading_options_temp() {
global $USER, $CFG;
// Include grading options form.
require_once($CFG->dirroot . '/mod/assign/gradingoptionsform.php');
// Need submit permission to submit an assignment.
$this->require_view_grades();
require_sesskey();
$gradingoptionsparams = [
'cm' => $this->get_course_module()->id,
'contextid' => $this->context->id,
+35 -1
View File
@@ -80,9 +80,43 @@ M.mod_assign.init_grading_table = function(Y) {
M.mod_assign.init_grading_options = function(Y) {
Y.use('node', function(Y) {
var paginationelement = Y.one('#id_perpage');
paginationelement.on('change', function() {
Y.one('form.gradingoptionsform').submit();
});
var filterelement = Y.one('#id_filter');
if (filterelement) {
filterelement.on('change', function() {
Y.one('form.gradingoptionsform').submit();
});
}
var markerfilterelement = Y.one('#id_markerfilter');
if (markerfilterelement) {
markerfilterelement.on('change', function() {
Y.one('form.gradingoptionsform').submit();
});
}
var workflowfilterelement = Y.one('#id_workflowfilter');
if (workflowfilterelement) {
workflowfilterelement.on('change', function() {
Y.one('form.gradingoptionsform').submit();
});
}
var quickgradingelement = Y.one('#id_quickgrading');
if (quickgradingelement) {
quickgradingelement.on('change', function() {
Y.one('form.gradingoptionsform').submit();
});
}
var showonlyactiveenrolelement = Y.one('#id_showonlyactiveenrol');
if (showonlyactiveenrolelement) {
showonlyactiveenrolelement.on('change', function() {
Y.one('form.gradingoptionsform').submit();
});
}
var downloadasfolderselement = Y.one('#id_downloadasfolders');
if (downloadasfolderselement) {
downloadasfolderselement.on('change', function(e) {
downloadasfolderselement.on('change', function() {
Y.one('form.gradingoptionsform').submit();
});
}