From 0cdf4aad05473424624315104e25037987f33f3d Mon Sep 17 00:00:00 2001 From: skodak Date: Thu, 20 Mar 2008 19:40:09 +0000 Subject: [PATCH] MDL-13393 detect broken cm instances when doing backup - prevents trouble during restore; merged from MOODLE_19_STABLE --- backup/backuplib.php | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/backup/backuplib.php b/backup/backuplib.php index a9b4449efa..f6b0347ad3 100644 --- a/backup/backuplib.php +++ b/backup/backuplib.php @@ -1103,8 +1103,18 @@ if ($selected) { $context = get_context_instance(CONTEXT_MODULE, $tok); - //Gets course_module data from db - $course_module = get_records ("course_modules","id",$tok); + //Gets course_module data from db - verify activity exists and is enabled! + $sql = "SELECT cm.* + FROM {$CFG->prefix}course_modules cm + JOIN {$CFG->prefix}modules m ON m.id = cm.module + JOIN {$CFG->prefix}$moduletype a ON a.id = cm.instance + WHERE m.visible = 1 AND cm.id = $tok"; + if (!$course_module = get_record_sql($sql)) { + // cm exists but activity instance missing - probably caused by double clicking + $tok = strtok(","); + continue; + } + //If it's the first, pring MODS tag if ($first_record) { fwrite ($bf,start_tag("MODS",4,true)); @@ -1113,8 +1123,8 @@ // if we're doing selected instances, check that too. if (is_array($preferences->mods[$moduletype]->instances) && count($preferences->mods[$moduletype]->instances) - && (!array_key_exists($course_module[$tok]->instance,$preferences->mods[$moduletype]->instances) - || empty($preferences->mods[$moduletype]->instances[$course_module[$tok]->instance]->backup))) { + && (!array_key_exists($course_module->instance,$preferences->mods[$moduletype]->instances) + || empty($preferences->mods[$moduletype]->instances[$course_module->instance]->backup))) { $tok = strtok(","); continue; } @@ -1127,15 +1137,15 @@ //Save neccesary info to backup_ids fwrite ($bf,full_tag("ID",6,false,$tok)); fwrite ($bf,full_tag("TYPE",6,false,$moduletype)); - fwrite ($bf,full_tag("INSTANCE",6,false,$course_module[$tok]->instance)); - fwrite ($bf,full_tag("ADDED",6,false,$course_module[$tok]->added)); - fwrite ($bf,full_tag("SCORE",6,false,$course_module[$tok]->score)); - fwrite ($bf,full_tag("INDENT",6,false,$course_module[$tok]->indent)); - fwrite ($bf,full_tag("VISIBLE",6,false,$course_module[$tok]->visible)); - fwrite ($bf,full_tag("GROUPMODE",6,false,$course_module[$tok]->groupmode)); - fwrite ($bf,full_tag("GROUPINGID",6,false,$course_module[$tok]->groupingid)); - fwrite ($bf,full_tag("GROUPMEMBERSONLY",6,false,$course_module[$tok]->groupmembersonly)); - fwrite ($bf,full_tag("IDNUMBER",6,false,$course_module[$tok]->idnumber)); + fwrite ($bf,full_tag("INSTANCE",6,false,$course_module->instance)); + fwrite ($bf,full_tag("ADDED",6,false,$course_module->added)); + fwrite ($bf,full_tag("SCORE",6,false,$course_module->score)); + fwrite ($bf,full_tag("INDENT",6,false,$course_module->indent)); + fwrite ($bf,full_tag("VISIBLE",6,false,$course_module->visible)); + fwrite ($bf,full_tag("GROUPMODE",6,false,$course_module->groupmode)); + fwrite ($bf,full_tag("GROUPINGID",6,false,$course_module->groupingid)); + fwrite ($bf,full_tag("GROUPMEMBERSONLY",6,false,$course_module->groupmembersonly)); + fwrite ($bf,full_tag("IDNUMBER",6,false,$course_module->idnumber)); // get all the role_capabilities overrides in this mod write_role_overrides_xml($bf, $context, 6); /// write role_assign code here -- 2.39.5