From c0c98c7c7803868a66793426973730f2bf8b270a Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Wed, 4 Oct 2006 09:01:50 +0000 Subject: [PATCH] fixing roles support for backup/restore --- backup/restore_form.html | 41 ++++++++++++++++++++-------------------- backup/restorelib.php | 21 +++++++++++--------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/backup/restore_form.html b/backup/restore_form.html index 8e50ac97efd..20393f0b0d5 100644 --- a/backup/restore_form.html +++ b/backup/restore_form.html @@ -422,7 +422,7 @@ $xml_file = $CFG->dataroot."/temp/backup/".$backup_unique_code."/moodle.xml"; $info = restore_read_xml_info($xml_file); -$siterolesarray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course_header->course_id), "shortname"); +$siterolesarray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course->id), "shortname"); echo (''); echo (''); @@ -432,19 +432,19 @@ if ($info->backup_moodle_version < 2006092801) { /// Editting teacher echo (''); /// Non-editting teacher echo (''); } - - choose_from_menu ($siterolesarray, "roles_".$roleid, $matchrole, 'new role', '', '0'); - echo (''); } } // end else diff --git a/backup/restorelib.php b/backup/restorelib.php index 42f65cf777e..dbea6d03beb 100644 --- a/backup/restorelib.php +++ b/backup/restorelib.php @@ -800,8 +800,10 @@ //Add this instance $instance->blockid = $blocks[$instance->name]->id; - if($newid = insert_record('block_instance', $instance)) { - backup_putid ($restore->backup_unique_code,"block_instance",$instance->id,$newid); + if ($newid = insert_record('block_instance', $instance)) { + if (!empty($instance->id)) { // this will only be set if we come from 1.7 and above backups + backup_putid ($restore->backup_unique_code,"block_instance",$instance->id,$newid); + } } else { $status = false; break; @@ -907,7 +909,7 @@ $restore->mods[$mod->type]->granular = true; } - if (!$restore->mods[$mod->type]->granular // we don't care about per instance + if (empty($restore->mods[$mod->type]->granular) // we don't care about per instance || (array_key_exists($mod->instance,$restore->mods[$mod->type]->instances) && !empty($restore->mods[$mod->type]->instances[$mod->instance]->restore))) { @@ -929,6 +931,7 @@ // final step of the restore. We don't know it yet. //print_object($course_module); //Debug //Save it to db + $newidmod = insert_record("course_modules",$course_module); if ($newidmod) { //save old and new module id @@ -1564,6 +1567,7 @@ $user->roles['teacher']->timeend, 0, $user->roles['teacher']->enrol); + // editting teacher } else { // non editting teacher @@ -2540,12 +2544,11 @@ } //Iterate over each module foreach ($info as $mod) { - if (!(isset($restore->mods[$mod->modtype]->granular) && $restore->mods[$mod->modtype]->granular) // We don't care about per instance, i.e. restore all instances. + if (empty($restore->mods[$mod->modtype]->granular) // We don't care about per instance, i.e. restore all instances. || (array_key_exists($mod->id,$restore->mods[$mod->modtype]->instances) && !empty($restore->mods[$mod->modtype]->instances[$mod->id]->restore))) { $modrestore = $mod->modtype."_restore_mods"; - if (function_exists($modrestore)) { - //print_object ($mod); //Debug + if (function_exists($modrestore)) { //Debug $status = $status and $modrestore($mod,$restore); //bit operator & not reliable here! } else { //Something was wrong. Function should exist. @@ -3992,7 +3995,7 @@ } } - if ($this->tree[7] == "ROLES_ASSIGNMENTS") { + if (isset($this->tree[7]) && $this->tree[7] == "ROLES_ASSIGNMENTS") { if ($this->level == 9) { switch ($tagName) { @@ -4045,7 +4048,7 @@ } } /// ends role_assignments - if ($this->tree[7] == "ROLES_OVERRIDES") { + if (isset($this->tree[7]) && $this->tree[7] == "ROLES_OVERRIDES") { if ($this->level == 9) { switch ($tagName) { case "NAME": @@ -6104,7 +6107,7 @@ * Restoring from course level overrides * *****************************************************/ - if (!empty($course->$course->roleoverrides)) { + if (!empty($course->roleoverrides)) { $courseoverrides = $course->roleoverrides; $rolemappings = $restore->rolesmapping; foreach ($courseoverrides as $oldroleid => $courseoverride) {
'.get_string('sourcerole').''.get_string('targetrole').'
'); - print_string('teacheredit'); + print_string('defaultcourseteacher'); echo (''); // get the first teacheredit legacy $roles = get_roles_with_capability('moodle/legacy:editingteacher', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM, SITEID)); - + $editteacher = array_shift($roles); choose_from_menu ($siterolesarray, "defaultteacheredit", $editteacher->id); echo ('
'); - print_string('teacher'); + print_string('noneditingteacher'); echo (''); // get the first teacheredit legacy @@ -457,7 +457,7 @@ if ($info->backup_moodle_version < 2006092801) { /// Student echo ('
'); - print_string('student'); + print_string('defaultcoursestudent'); echo (''); // get the first teacheredit legacy @@ -469,25 +469,26 @@ if ($info->backup_moodle_version < 2006092801) { } else { // 1.7 and above backup - $roles = restore_read_xml_roles($xml_file); + if (is_array($roles)) { // possible to have course with no roles - foreach ($roles->roles as $roleid=>$role) { - echo ('
'); - echo $role->shortname; - echo (''); + foreach ($roles->roles as $roleid=>$role) { + echo ('
'); + echo $role->shortname; + echo (''); - // see if any short name match - $matchrole = 0; - foreach ($siterolesarray as $siteroleid=>$siteroleshortname) { - if ($siteroleshortname == $role->shortname) { - $matchrole = $siteroleid; - break; - } + // see if any short name match + $matchrole = 0; + foreach ($siterolesarray as $siteroleid=>$siteroleshortname) { + if ($siteroleshortname == $role->shortname) { + $matchrole = $siteroleid; + break; + } + } + + choose_from_menu ($siterolesarray, "roles_".$roleid, $matchrole, 'new role', '', '0'); + echo ('