diff --git a/public/mod/assign/backup/moodle2/backup_assign_stepslib.php b/public/mod/assign/backup/moodle2/backup_assign_stepslib.php index 62a53c8957f..68cacc9562a 100644 --- a/public/mod/assign/backup/moodle2/backup_assign_stepslib.php +++ b/public/mod/assign/backup/moodle2/backup_assign_stepslib.php @@ -91,6 +91,8 @@ class backup_assign_activity_structure_step extends backup_activity_structure_st 'maxattempts', 'markingworkflow', 'markingallocation', + 'markercount', + 'multimarkmethod', 'markinganonymous', 'preventsubmissionnotingroup', 'activity', @@ -101,14 +103,30 @@ class backup_assign_activity_structure_step extends backup_activity_structure_st $userflags = new backup_nested_element('userflags'); - $userflag = new backup_nested_element('userflag', array('id'), - array('userid', - 'assignment', - 'mailed', - 'locked', - 'extensionduedate', - 'workflowstate', - 'allocatedmarker')); + $userflag = new backup_nested_element( + 'userflag', + ['id'], + [ + 'userid', + 'assignment', + 'mailed', + 'locked', + 'extensionduedate', + 'workflowstate', + ] + ); + + $allocatedmarkers = new backup_nested_element('allocatedmarkers'); + + $allocatedmarker = new backup_nested_element( + 'allocatedmarker', + ['id'], + [ + 'student', + 'assignment', + 'marker', + ] + ); $submissions = new backup_nested_element('submissions'); @@ -133,6 +151,22 @@ class backup_assign_activity_structure_step extends backup_activity_structure_st 'penalty', 'attemptnumber')); + $marks = new backup_nested_element('marks'); + + $mark = new backup_nested_element( + 'mark', + ['id'], + [ + 'assignment', + 'gradeid', + 'timecreated', + 'timemodified', + 'marker', + 'mark', + 'workflowstate', + ] + ); + $pluginconfigs = new backup_nested_element('plugin_configs'); $pluginconfig = new backup_nested_element('plugin_config', array('id'), @@ -148,10 +182,14 @@ class backup_assign_activity_structure_step extends backup_activity_structure_st // Build the tree. $assign->add_child($userflags); $userflags->add_child($userflag); + $assign->add_child($allocatedmarkers); + $allocatedmarkers->add_child($allocatedmarker); $assign->add_child($submissions); $submissions->add_child($submission); $assign->add_child($grades); $grades->add_child($grade); + $assign->add_child($marks); + $marks->add_child($mark); $assign->add_child($pluginconfigs); $pluginconfigs->add_child($pluginconfig); $assign->add_child($overrides); @@ -172,6 +210,15 @@ class backup_assign_activity_structure_step extends backup_activity_structure_st if ($userinfo) { $userflag->set_source_table('assign_user_flags', array('assignment' => backup::VAR_PARENTID)); + $allocatedmarker->set_source_table( + 'assign_allocated_marker', + ['assignment' => backup::VAR_PARENTID] + ); + + $mark->set_source_table( + 'assign_mark', + ['assignment' => backup::VAR_PARENTID] + ); $submissionparams = array('assignment' => backup::VAR_PARENTID); if (!$groupinfo) { @@ -198,7 +245,9 @@ class backup_assign_activity_structure_step extends backup_activity_structure_st // Define id annotations. $userflag->annotate_ids('user', 'userid'); - $userflag->annotate_ids('user', 'allocatedmarker'); + $allocatedmarker->annotate_ids('user', 'student'); + $allocatedmarker->annotate_ids('user', 'marker'); + $mark->annotate_ids('user', 'marker'); $submission->annotate_ids('user', 'userid'); $submission->annotate_ids('group', 'groupid'); $grade->annotate_ids('user', 'userid'); diff --git a/public/mod/assign/backup/moodle2/restore_assign_stepslib.php b/public/mod/assign/backup/moodle2/restore_assign_stepslib.php index f33aed15256..71083eefe6e 100644 --- a/public/mod/assign/backup/moodle2/restore_assign_stepslib.php +++ b/public/mod/assign/backup/moodle2/restore_assign_stepslib.php @@ -71,6 +71,16 @@ class restore_assign_activity_structure_step extends restore_activity_structure_ $userflag = new restore_path_element('assign_userflag', '/activity/assign/userflags/userflag'); $paths[] = $userflag; + $allocatedmarker = new restore_path_element( + 'assign_allocatedmarker', + '/activity/assign/allocatedmarkers/allocatedmarker' + ); + $paths[] = $allocatedmarker; + $mark = new restore_path_element( + 'assign_mark', + '/activity/assign/marks/mark' + ); + $paths[] = $mark; } $paths[] = new restore_path_element('assign_override', '/activity/assign/overrides/override'); @@ -131,6 +141,9 @@ class restore_assign_activity_structure_step extends restore_activity_structure_ if (!isset($data->markingallocation)) { $data->markingallocation = 0; } + if (!isset($data->markercount)) { + $data->markercount = 1; + } if (!isset($data->markinganonymous)) { $data->markinganonymous = 0; } @@ -213,9 +226,6 @@ class restore_assign_activity_structure_step extends restore_activity_structure_ $data->assignment = $this->get_new_parentid('assign'); $data->userid = $this->get_mappingid('user', $data->userid); - if (!empty($data->allocatedmarker)) { - $data->allocatedmarker = $this->get_mappingid('user', $data->allocatedmarker); - } if (!empty($data->extensionduedate)) { $data->extensionduedate = $this->apply_date_offset($data->extensionduedate); } else { @@ -226,6 +236,40 @@ class restore_assign_activity_structure_step extends restore_activity_structure_ $newitemid = $DB->insert_record('assign_user_flags', $data); } + /** + * Process an allocated_marker restore. + * + * @param object $data The data in object form. + */ + protected function process_assign_allocatedmarker($data): void { + global $DB; + + $data = (object)$data; + + $data->assignment = $this->get_new_parentid('assign'); + $data->student = $this->get_mappingid('user', $data->student); + $data->marker = $this->get_mappingid('user', $data->marker); + + $DB->insert_record('assign_allocated_marker', $data); + } + + /** + * Process mark restore. + * + * @param object $data The data in object form. + */ + protected function process_assign_mark($data): void { + global $DB; + + $data = (object)$data; + + $data->assignment = $this->get_new_parentid('assign'); + $data->marker = $this->get_mappingid('user', $data->marker); + $data->gradeid = $this->get_mappingid('grade', $data->gradeid); + + $DB->insert_record('assign_mark', $data); + } + /** * Process a grade restore * @param object $data The data in object form diff --git a/public/mod/assign/locallib.php b/public/mod/assign/locallib.php index eb6a5b42586..87abc10b28c 100644 --- a/public/mod/assign/locallib.php +++ b/public/mod/assign/locallib.php @@ -1302,6 +1302,8 @@ class assign { if (!empty($data->reset_gradebook_grades)) { $DB->delete_records_select('assign_grades', "assignment $sql", $params); + $DB->delete_records_select('assign_mark', "assignment $sql", $params); + $DB->delete_records_select('assign_allocated_marker', "assignment $sql", $params); // Remove all grades from gradebook. require_once($CFG->dirroot . '/mod/assign/lib.php'); assign_reset_gradebook($data->courseid);