diff --git a/mod/assign/classes/form/grading_options_temp_form.php b/mod/assign/classes/form/grading_options_temp_form.php index 26d8063c826..1573d7ff6af 100644 --- a/mod/assign/classes/form/grading_options_temp_form.php +++ b/mod/assign/classes/form/grading_options_temp_form.php @@ -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. diff --git a/mod/assign/locallib.php b/mod/assign/locallib.php index 75b68c53607..795df233f34 100644 --- a/mod/assign/locallib.php +++ b/mod/assign/locallib.php @@ -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, diff --git a/mod/assign/module.js b/mod/assign/module.js index 0198fd10df0..ed19eab52a2 100644 --- a/mod/assign/module.js +++ b/mod/assign/module.js @@ -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(); }); }