MDL-86006 mod_assign: Add multimarking to assign backup and restore

This commit is contained in:
Conn Warwicker
2026-03-05 14:52:27 +11:00
committed by David Woloszyn
parent 6e3b1b7d2f
commit 204dda9aa8
3 changed files with 107 additions and 12 deletions
@@ -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');
@@ -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
+2
View File
@@ -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);