From 05cd2ff627f43fde7dc987dfdbbceb828c34de9d Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Tue, 17 May 2016 11:13:37 +0800 Subject: [PATCH] MDL-34161 mod_lti: backup and restore of submissions --- .../backup/moodle2/backup_lti_stepslib.php | 19 ++++++++++++ .../backup/moodle2/restore_lti_stepslib.php | 31 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/mod/lti/backup/moodle2/backup_lti_stepslib.php b/mod/lti/backup/moodle2/backup_lti_stepslib.php index 34893c1d82e..7b4b45760c4 100644 --- a/mod/lti/backup/moodle2/backup_lti_stepslib.php +++ b/mod/lti/backup/moodle2/backup_lti_stepslib.php @@ -133,6 +133,17 @@ class backup_lti_activity_structure_step extends backup_activity_structure_step ) ); + $ltisubmissions = new backup_nested_element('ltisubmissions'); + $ltisubmission = new backup_nested_element('ltisubmission', array('id'), array( + 'userid', + 'datesubmitted', + 'dateupdated', + 'gradepercent', + 'originalgrade', + 'launchid', + 'state' + )); + // Build the tree $lti->add_child($ltitype); $ltitype->add_child($ltitypesconfigs); @@ -141,6 +152,8 @@ class backup_lti_activity_structure_step extends backup_activity_structure_step $ltitype->add_child($ltitoolproxy); $ltitoolproxy->add_child($ltitoolsettings); $ltitoolsettings->add_child($ltitoolsetting); + $lti->add_child($ltisubmissions); + $ltisubmissions->add_child($ltisubmission); // Define sources. $ltirecord = $DB->get_record('lti', ['id' => $this->task->get_activityid()]); @@ -173,9 +186,15 @@ class backup_lti_activity_structure_step extends backup_activity_structure_step $ltitoolproxy->set_source_array([]); } + // All the rest of elements only happen if we are including user info. + if ($userinfo) { + $ltisubmission->set_source_table('lti_submission', array('ltiid' => backup::VAR_ACTIVITYID)); + } + // Define id annotations $ltitype->annotate_ids('user', 'createdby'); $ltitype->annotate_ids('course', 'course'); + $ltisubmission->annotate_ids('user', 'userid'); // Define file annotations. $lti->annotate_files('mod_lti', 'intro', null); // This file areas haven't itemid. diff --git a/mod/lti/backup/moodle2/restore_lti_stepslib.php b/mod/lti/backup/moodle2/restore_lti_stepslib.php index 1ea6b19b579..c6bbf3fd308 100644 --- a/mod/lti/backup/moodle2/restore_lti_stepslib.php +++ b/mod/lti/backup/moodle2/restore_lti_stepslib.php @@ -59,6 +59,9 @@ class restore_lti_activity_structure_step extends restore_activity_structure_ste protected function define_structure() { $paths = array(); + // To know if we are including userinfo. + $userinfo = $this->get_setting_value('userinfo'); + $lti = new restore_path_element('lti', '/activity/lti'); $paths[] = $lti; $paths[] = new restore_path_element('ltitype', '/activity/lti/ltitype'); @@ -68,6 +71,11 @@ class restore_lti_activity_structure_step extends restore_activity_structure_ste $paths[] = new restore_path_element('ltitoolproxy', '/activity/lti/ltitype/ltitoolproxy'); $paths[] = new restore_path_element('ltitoolsetting', '/activity/lti/ltitype/ltitoolproxy/ltitoolsettings/ltitoolsetting'); + if ($userinfo) { + $submission = new restore_path_element('ltisubmission', '/activity/lti/ltisubmissions/ltisubmission'); + $paths[] = $submission; + } + // Add support for subplugin structures. $this->add_subplugin_structure('ltisource', $lti); $this->add_subplugin_structure('ltiservice', $lti); @@ -246,6 +254,29 @@ class restore_lti_activity_structure_step extends restore_activity_structure_ste $DB->insert_record('lti_tool_settings', $data); } + /** + * Process a submission restore + * @param mixed $data The data from backup XML file + */ + protected function process_ltisubmission($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->ltiid = $this->get_new_parentid('lti'); + + $data->datesubmitted = $this->apply_date_offset($data->datesubmitted); + $data->dateupdated = $this->apply_date_offset($data->dateupdated); + if ($data->userid > 0) { + $data->userid = $this->get_mappingid('user', $data->userid); + } + + $newitemid = $DB->insert_record('lti_submission', $data); + + $this->set_mapping('ltisubmission', $oldid, $newitemid); + } + protected function after_execute() { // Add lti related files, no need to match by itemname (just internally handled context). $this->add_related_files('mod_lti', 'intro', null);