mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-21432 backup - complete standard/course outcomes backup & restore
This commit is contained in:
parent
6969b70aa5
commit
c8730ff028
3 changed files with 73 additions and 1 deletions
|
@ -539,6 +539,9 @@ class backup_final_outcomes_structure_step extends backup_structure_step {
|
||||||
WHERE bi.backupid = ?
|
WHERE bi.backupid = ?
|
||||||
AND bi.itemname = 'outcomefinal'", array(backup::VAR_BACKUPID));
|
AND bi.itemname = 'outcomefinal'", array(backup::VAR_BACKUPID));
|
||||||
|
|
||||||
|
// Annotate outcome files (they store files in system context, so pass it instead of default one)
|
||||||
|
$outcome->annotate_files('grade', 'outcome', 'id', get_context_instance(CONTEXT_SYSTEM)->id);
|
||||||
|
|
||||||
// Return main element (outcomesdef)
|
// Return main element (outcomesdef)
|
||||||
return $outcomesdef;
|
return $outcomesdef;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,9 @@ class restore_root_task extends restore_task {
|
||||||
// Unconditionally, load create all the needed scales
|
// Unconditionally, load create all the needed scales
|
||||||
$this->add_step(new restore_scales_structure_step('create_scales', 'scales.xml'));
|
$this->add_step(new restore_scales_structure_step('create_scales', 'scales.xml'));
|
||||||
|
|
||||||
|
// Unconditionally, load create all the needed outcomes
|
||||||
|
$this->add_step(new restore_outcomes_structure_step('create_scales', 'outcomes.xml'));
|
||||||
|
|
||||||
// Unconditionally, load create all the needed outcomes.
|
// Unconditionally, load create all the needed outcomes.
|
||||||
// TODO: restore outcomes
|
// TODO: restore outcomes
|
||||||
// $this->add_step(new restore_outcomes_structure_step('create_outcomes', 'outcomes.xml'));
|
// $this->add_step(new restore_outcomes_structure_step('create_outcomes', 'outcomes.xml'));
|
||||||
|
|
|
@ -323,7 +323,6 @@ class restore_groups_structure_step extends restore_structure_step {
|
||||||
/**
|
/**
|
||||||
* Structure step that will create all the needed scales
|
* Structure step that will create all the needed scales
|
||||||
* by loading them from the scales.xml
|
* by loading them from the scales.xml
|
||||||
* Note group members only will be added if restoring user info
|
|
||||||
*/
|
*/
|
||||||
class restore_scales_structure_step extends restore_structure_step {
|
class restore_scales_structure_step extends restore_structure_step {
|
||||||
|
|
||||||
|
@ -383,6 +382,73 @@ class restore_scales_structure_step extends restore_structure_step {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Structure step that will create all the needed outocomes
|
||||||
|
* by loading them from the outcomes.xml
|
||||||
|
*/
|
||||||
|
class restore_outcomes_structure_step extends restore_structure_step {
|
||||||
|
|
||||||
|
protected function define_structure() {
|
||||||
|
|
||||||
|
$paths = array(); // Add paths here
|
||||||
|
$paths[] = new restore_path_element('outcome', '/outcomes_definition/outcome');
|
||||||
|
return $paths;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function process_outcome($data) {
|
||||||
|
global $DB;
|
||||||
|
|
||||||
|
$data = (object)$data;
|
||||||
|
|
||||||
|
$restorefiles = false; // Only if we end creating the group
|
||||||
|
|
||||||
|
$oldid = $data->id; // need this saved for later
|
||||||
|
|
||||||
|
// Look for outcome (by shortname both in standard (courseid=null) and current course
|
||||||
|
// with priority to standard outcomes (ORDER clause)
|
||||||
|
// outcome is not course unique, use get_record_sql to suppress warning
|
||||||
|
$params = array('courseid' => $this->get_courseid(), 'shortname' => $data->shortname);
|
||||||
|
if (!$outdb = $DB->get_record_sql('SELECT *
|
||||||
|
FROM {grade_outcomes}
|
||||||
|
WHERE shortname = :shortname
|
||||||
|
AND (courseid = :courseid OR courseid IS NULL)
|
||||||
|
ORDER BY COALESCE(courseid, 0)', $params, IGNORE_MULTIPLE)) {
|
||||||
|
// Remap the user
|
||||||
|
$userid = $this->get_mappingid('user', $data->usermodified);
|
||||||
|
$data->usermodified = $userid ? $userid : $this->get_userid();
|
||||||
|
// Remap the course if course outcome
|
||||||
|
$data->courseid = $data->courseid ? $this->get_courseid() : null;
|
||||||
|
// If global outcome (course=null), check the user has perms to create it
|
||||||
|
// falling to course outcome if not
|
||||||
|
$systemctx = get_context_instance(CONTEXT_SYSTEM);
|
||||||
|
if (is_null($data->courseid) && !has_capability('moodle/grade:manageoutcomes', $systemctx , $data->userid)) {
|
||||||
|
$data->courseid = $this->get_courseid();
|
||||||
|
}
|
||||||
|
// outcome doesn't exist, create
|
||||||
|
$newitemid = $DB->insert_record('grade_outcomes', $data);
|
||||||
|
$restorefiles = true; // We'll restore the files
|
||||||
|
} else {
|
||||||
|
// scale exists, use it
|
||||||
|
$newitemid = $outdb->id;
|
||||||
|
}
|
||||||
|
// Set the corresponding grade_outcomes_courses record
|
||||||
|
$outcourserec = new stdclass();
|
||||||
|
$outcourserec->courseid = $this->get_courseid();
|
||||||
|
$outcourserec->outcomeid = $newitemid;
|
||||||
|
if (!$DB->record_exists('grade_outcomes_courses', (array)$outcourserec)) {
|
||||||
|
$DB->insert_record('grade_outcomes_courses', $outcourserec);
|
||||||
|
}
|
||||||
|
// Save the id mapping (with files support at system context)
|
||||||
|
$this->set_mapping('outcome', $oldid, $newitemid, $restorefiles, $this->task->get_old_system_contextid());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function after_execute() {
|
||||||
|
// Add outcomes related files, matching with "outcome" mappings
|
||||||
|
$this->add_related_files('grade', 'outcome', 'outcome', $this->task->get_old_system_contextid());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure step that will read the course.xml file, loading it and performing
|
* Structure step that will read the course.xml file, loading it and performing
|
||||||
* various actions depending of the site/restore settings
|
* various actions depending of the site/restore settings
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue