From: michaelpenne Date: Mon, 1 Nov 2004 20:37:16 +0000 (+0000) Subject: can restore the new backup code now X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=f50e2abc74c5c747e1d13282f0da082b22273ffd;p=moodle.git can restore the new backup code now --- diff --git a/mod/lesson/restorelib.php b/mod/lesson/restorelib.php index 11a8aa90be..d3d9378e67 100644 --- a/mod/lesson/restorelib.php +++ b/mod/lesson/restorelib.php @@ -1,19 +1,22 @@ id) | + // lesson_default lesson ----------------------------|--------------------------|--------------------------| + // (UL, pk->id,fk->courseid) (CL,pk->id) | | | + // | | | | + // | lesson_grades lesson_high_scores lesson_timer + // | (UL, pk->id,fk->lessonid) (UL, pk->id,fk->lessonid) (UL, pk->id,fk->lessonid) + // | + // | + // lesson_pages---------------------------| + // (CL,pk->id,fk->lessonid) | // | | - // | lesson_grades - // | (UL, pk->id,fk->lessonid) - // lesson_pages - // (CL,pk->id,fk->lessonid) - // | - // | - // | + // | lesson_branch + // | (UL, pk->id,fk->pageid) // lesson_answers // (CL,pk->id,fk->pageid) // | @@ -51,14 +54,31 @@ //Now, build the lesson record structure $lesson->course = $restore->course_id; $lesson->name = backup_todb($info['MOD']['#']['NAME']['0']['#']); + $lesson->practice = backup_todb($info['MOD']['#']['PRACTICE']['0']['#']); + $lesson->modattempts = backup_todb($info['MOD']['#']['MODATTEMPTS']['0']['#']); + $lesson->password = backup_todb($info['MOD']['#']['PASSWORD']['0']['#']); + $lesson->usepassword = backup_todb($info['MOD']['#']['USEPASSWORD']['0']['#']); $lesson->grade = backup_todb($info['MOD']['#']['GRADE']['0']['#']); + $lesson->custom = backup_todb($info['MOD']['#']['CUSTOM']['0']['#']); + $lesson->ongoing = backup_todb($info['MOD']['#']['ONGOING']['0']['#']); $lesson->usemaxgrade = backup_todb($info['MOD']['#']['USEMAXGRADE']['0']['#']); $lesson->maxanswers = backup_todb($info['MOD']['#']['MAXANSWERS']['0']['#']); $lesson->maxattempts = backup_todb($info['MOD']['#']['MAXATTEMPTS']['0']['#']); + $lesson->review = backup_todb($info['MOD']['#']['REVIEW']['0']['#']); $lesson->nextpagedefault = backup_todb($info['MOD']['#']['NEXTPAGEDEFAULT']['0']['#']); $lesson->minquestions = backup_todb($info['MOD']['#']['MINQUESTIONS']['0']['#']); $lesson->maxpages = backup_todb($info['MOD']['#']['MAXPAGES']['0']['#']); + $lesson->timed = backup_todb($info['MOD']['#']['TIMED']['0']['#']); + $lesson->maxtime = backup_todb($info['MOD']['#']['MAXTIME']['0']['#']); $lesson->retake = backup_todb($info['MOD']['#']['RETAKE']['0']['#']); + $lesson->tree = backup_todb($info['MOD']['#']['TREE']['0']['#']); + $lesson->slideshow = backup_todb($info['MOD']['#']['SLIDESHOW']['0']['#']); + $lesson->width = backup_todb($info['MOD']['#']['WIDTH']['0']['#']); + $lesson->height = backup_todb($info['MOD']['#']['HEIGHT']['0']['#']); + $lesson->bgcolor = backup_todb($info['MOD']['#']['BGCOLOR']['0']['#']); + $lesson->displayleft = backup_todb($info['MOD']['#']['DISPLAYLEFT']['0']['#']); + $lesson->highscores = backup_todb($info['MOD']['#']['HIGHSCORES']['0']['#']); + $lesson->maxhighscores = backup_todb($info['MOD']['#']['MAXHIGHSCORES']['0']['#']); $lesson->available = backup_todb($info['MOD']['#']['AVAILABLE']['0']['#']); $lesson->deadline = backup_todb($info['MOD']['#']['DEADLINE']['0']['#']); $lesson->timemodified = backup_todb($info['MOD']['#']['TIMEMODIFIED']['0']['#']); @@ -76,10 +96,26 @@ $mod->id, $newid); //We have to restore the lesson pages which are held in their logical order... $status = lesson_pages_restore_mods($newid,$info,$restore); - //...and the user grades (if required) - if ($restore->mods['lesson']->userinfo) { + //...and the user grades, high scores, and timer (if required) + if ($status) { + if ($restore->mods["lesson"]->userinfo) { + if(!lesson_grades_restore_mods($newid,$info,$restore)) { + return false; + } + if (!lesson_high_scores_restore_mods($newid,$info,$restore)) { + return false; + } + if (!lesson_timer_restore_mods($newid,$info,$restore)) { + return false; + } + } + // restore the default for the course. There might not be one, but if there + // is, there will only be one. + $status = lesson_default_restore_mods($info,$restore); + } + /*if ($restore->mods['lesson']->userinfo) { $status = lesson_grades_restore_mods($newid,$info,$restore); - } + }*/ } else { $status = false; } @@ -90,7 +126,6 @@ } else { $status = false; } - return $status; } @@ -120,6 +155,8 @@ $page->prevpageid = $prevpageid; $page->qtype = backup_todb($page_info['#']['QTYPE']['0']['#']); $page->qoption = backup_todb($page_info['#']['QOPTION']['0']['#']); + $page->layout = backup_todb($page_info['#']['LAYOUT']['0']['#']); + $page->display = backup_todb($page_info['#']['DISPLAY']['0']['#']); $page->timecreated = backup_todb($page_info['#']['TIMECREATED']['0']['#']); $page->timemodified = backup_todb($page_info['#']['TIMEMODIFIED']['0']['#']); $page->title = backup_todb($page_info['#']['TITLE']['0']['#']); @@ -153,6 +190,41 @@ backup_putid($restore->backup_unique_code,"lesson_pages", $oldid, $newid); //We have to restore the lesson_answers table now (a page level table) $status = lesson_answers_restore($lessonid,$newid,$page_info,$restore); + + // need to update useranswer field (which has answer id's in it) + // for matching and multi-answer multi-choice questions + if ($restore->mods["lesson"]->userinfo) { // firs check to see if we even have to do this + // if multi-answer multi-choice question or matching + if (($page->qtype == 3 && $page->qoption) || + $page->qtype == 5) { + // get all the attempt records for this page + if ($attempts = get_records("lesson_attempts", "pageid", $newid)) { + foreach ($attempts as $attempt) { + unset($newuseranswer); + if ($attempt->useranswer != NULL) { + // explode the user answer. Each element in + // $useranswer is an old answer id, so needs to be updated + $useranswer = explode(",", $attempt->useranswer); + foreach ($useranswer as $oldanswerid) { + $backupdata = backup_getid($restore->backup_unique_code,"answers",$oldanswerid); + $newuseranswer[] = $backupdata->new_id; + } + // get the useranswer in the right format + $attempt->useranswer = implode(",", $newuseranswer); + // update it + update_record("lesson_attempts", $attempt); + } + } + } + } + } + + // backup branch table info for branch tables. + if ($status && $restore->mods["lesson"]->userinfo) { + if (!lesson_branch_restore($lessonid,$newid,$page_info,$restore)) { + return false; + } + } } else { $status = false; } @@ -171,7 +243,6 @@ } } } - return $status; } @@ -200,6 +271,7 @@ // the absolute jumps will need fixing $answer->jumpto = backup_todb($answer_info['#']['JUMPTO']['0']['#']); $answer->grade = backup_todb($answer_info['#']['GRADE']['0']['#']); + $answer->score = backup_todb($answer_info['#']['SCORE']['0']['#']); $answer->flags = backup_todb($answer_info['#']['FLAGS']['0']['#']); $answer->timecreated = backup_todb($answer_info['#']['TIMECREATED']['0']['#']); $answer->timemodified = backup_todb($answer_info['#']['TIMEMODIFIED']['0']['#']); @@ -219,6 +291,11 @@ } if ($newid) { + // need to store the id so we can update the useranswer + // field in attempts. This is done in the lesson_pages_restore_mods + backup_putid($restore->backup_unique_code,"answers", + backup_todb($answer_info['#']['ID']['0']['#']), $newid); + if ($restore->mods['lesson']->userinfo) { //We have to restore the lesson_attempts table now (a answers level table) $status = lesson_attempts_restore($lessonid, $pageid, $newid, $answer_info, $restore); @@ -259,6 +336,7 @@ $attempt->userid = backup_todb($attempt_info['#']['USERID']['0']['#']); $attempt->retry = backup_todb($attempt_info['#']['RETRY']['0']['#']); $attempt->correct = backup_todb($attempt_info['#']['CORRECT']['0']['#']); + $attempt->useranswer = backup_todb($attempt_info['#']['USERANSWER']['0']['#']); $attempt->timeseen = backup_todb($attempt_info['#']['TIMESEEN']['0']['#']); //We have to recode the userid field @@ -338,7 +416,231 @@ return $status; } + + + + //This function restores the lesson_branch + function lesson_branch_restore($lessonid, $pageid, $info, $restore) { + + global $CFG; + + $status = true; + //Get the branch array (optional) + if (isset($info['#']['BRANCHES']['0']['#']['BRANCH'])) { + $branches = $info['#']['BRANCHES']['0']['#']['BRANCH']; + //Iterate over branches + for($i = 0; $i < sizeof($branches); $i++) { + $branch_info = $branches[$i]; + //traverse_xmlize($branch_info); //Debug + //print_object ($GLOBALS['traverse_array']); //Debug + //$GLOBALS['traverse_array']=""; //Debug + + //We'll need this later!! + $olduserid = backup_todb($branch_info['#']['USERID']['0']['#']); + + //Now, build the lesson_attempts record structure + $branch->lessonid = $lessonid; + $branch->userid = backup_todb($branch_info['#']['USERID']['0']['#']); + $branch->pageid = $pageid; + $branch->retry = backup_todb($branch_info['#']['RETRY']['0']['#']); + $branch->flag = backup_todb($branch_info['#']['FLAG']['0']['#']); + $branch->timeseen = backup_todb($branch_info['#']['TIMESEEN']['0']['#']); + + //We have to recode the userid field + $user = backup_getid($restore->backup_unique_code,"user",$olduserid); + if ($user) { + $branch->userid = $user->new_id; + } + + //The structure is equal to the db, so insert the lesson_attempt + $newid = insert_record ("lesson_branch",$branch); + + //Do some output + if (($i+1) % 50 == 0) { + echo "."; + if (($i+1) % 1000 == 0) { + echo "
"; + } + backup_flush(300); + } + } + } + + return $status; + } + + //This function restores the lesson_timer + function lesson_timer_restore_mods($lessonid, $info, $restore) { + + global $CFG; + + $status = true; + //Get the timer array (optional) + if (isset($info['MOD']['#']['TIMES']['0']['#']['TIME'])) { + $times = $info['MOD']['#']['TIMES']['0']['#']['TIME']; + //Iterate over times + for($i = 0; $i < sizeof($times); $i++) { + $time_info = $times[$i]; + //traverse_xmlize($time_info); //Debug + //print_object ($GLOBALS['traverse_array']); //Debug + //$GLOBALS['traverse_array']=""; //Debug + + //We'll need this later!! + $olduserid = backup_todb($time_info['#']['USERID']['0']['#']); + + //Now, build the lesson_time record structure + $time->lessonid = $lessonid; + $time->userid = backup_todb($time_info['#']['USERID']['0']['#']); + $time->starttime = backup_todb($time_info['#']['STARTTIME']['0']['#']); + $time->lessontime = backup_todb($time_info['#']['LESSONTIME']['0']['#']); + + //We have to recode the userid field + $user = backup_getid($restore->backup_unique_code,"user",$olduserid); + if ($user) { + $time->userid = $user->new_id; + } + + //The structure is equal to the db, so insert the lesson_grade + $newid = insert_record ("lesson_timer",$time); + + //Do some output + if (($i+1) % 50 == 0) { + echo "."; + if (($i+1) % 1000 == 0) { + echo "
"; + } + backup_flush(300); + } + + if (!$newid) { + $status = false; + } + } + } + + return $status; + } + //This function restores the lesson_high_score + function lesson_high_scores_restore_mods($lessonid, $info, $restore) { + + global $CFG; + + $status = true; + + //Get the highscores array (optional) + if (isset($info['#']['HIGHSCORES']['0']['#']['HIGHSCORE'])) { + $highscores = $info['#']['HIGHSCORES']['0']['#']['HIGHSCORE']; + //Iterate over times + for($i = 0; $i < sizeof($highscores); $i++) { + $highscore_info = $highscores[$i]; + //traverse_xmlize($highscore_info); //Debug + //print_object ($GLOBALS['traverse_array']); //Debug + //$GLOBALS['traverse_array']=""; //Debug + + //We'll need this later!! + $olduserid = backup_todb($highscore_info['#']['USERID']['0']['#']); + + //Now, build the lesson_time record structure + $highscore->lessonid = $lessonid; + $highscore->userid = backup_todb($highscore_info['#']['USERID']['0']['#']); + $highscore->gradeid = backup_todb($highscore_info['#']['GRADEID']['0']['#']); + $highscore->nickname = backup_todb($highscore_info['#']['NICKNAME']['0']['#']); + + //We have to recode the userid field + $user = backup_getid($restore->backup_unique_code,"user",$olduserid); + if ($user) { + $highscore->userid = $user->new_id; + } + + //The structure is equal to the db, so insert the lesson_grade + $newid = insert_record ("lesson_high_score",$highscore); + + //Do some output + if (($i+1) % 50 == 0) { + echo "."; + if (($i+1) % 1000 == 0) { + echo "
"; + } + backup_flush(300); + } + + if (!$newid) { + $status = false; + } + } + } + + return $status; + } + + //This function restores the lesson_default + function lesson_default_restore_mods($info, $restore) { + + global $CFG; + + $status = true; + + //Get the default array (optional) + if (isset($info['MOD']['#']['DEFAULTS']['0']['#']['DEFAULT'])) { + $defaults = $info['MOD']['#']['DEFAULTS']['0']['#']['DEFAULT']; + + //Iterate over defaults (should only be 1!) + for($i = 0; $i < sizeof($defaults); $i++) { + $default_info = $defaults[$i]; + //traverse_xmlize($defaults_info); //Debug + //print_object ($GLOBALS['traverse_array']); //Debug + //$GLOBALS['traverse_array']=""; //Debug + + //Now, build the lesson_default record structure + $default->course = $restore->course_id; + $default->practice = backup_todb($default_info['#']['PRACTICE']['0']['#']); + $default->modattempts = backup_todb($default_info['#']['MODATTEMPTS']['0']['#']); + $default->password = backup_todb($default_info['#']['PASSWORD']['0']['#']); + $default->usepassword = backup_todb($default_info['#']['USEPASSWORD']['0']['#']); + $default->grade = backup_todb($default_info['#']['GRADE']['0']['#']); + $default->custom = backup_todb($default_info['#']['CUSTOM']['0']['#']); + $default->ongoing = backup_todb($default_info['#']['ONGOING']['0']['#']); + $default->usemaxgrade = backup_todb($default_info['#']['USEMAXGRADE']['0']['#']); + $default->maxanswers = backup_todb($default_info['#']['MAXANSWERS']['0']['#']); + $default->maxattempts = backup_todb($default_info['#']['MAXATTEMPTS']['0']['#']); + $default->review = backup_todb($default_info['#']['REVIEW']['0']['#']); + $default->nextpagedefault = backup_todb($default_info['#']['NEXTPAGEDEFAULT']['0']['#']); + $default->minquestions = backup_todb($default_info['#']['MINQUESTIONS']['0']['#']); + $default->maxpages = backup_todb($default_info['#']['MAXPAGES']['0']['#']); + $default->timed = backup_todb($default_info['#']['TIMED']['0']['#']); + $default->maxtime = backup_todb($default_info['#']['MAXTIME']['0']['#']); + $default->retake = backup_todb($default_info['#']['RETAKE']['0']['#']); + $default->tree = backup_todb($default_info['#']['TREE']['0']['#']); + $default->slideshow = backup_todb($default_info['#']['SLIDESHOW']['0']['#']); + $default->width = backup_todb($default_info['#']['WIDTH']['0']['#']); + $default->height = backup_todb($default_info['#']['HEIGHT']['0']['#']); + $default->bgcolor = backup_todb($default_info['#']['BGCOLOR']['0']['#']); + $default->displayleft = backup_todb($default_info['#']['DISPLAYLEFT']['0']['#']); + $default->highscores = backup_todb($default_info['#']['HIGHSCORES']['0']['#']); + $default->maxhighscores = backup_todb($default_info['#']['MAXHIGHSCORES']['0']['#']); + + //The structure is equal to the db, so insert the lesson_grade + $newid = insert_record ("lesson_default",$default); + + //Do some output + if (($i+1) % 50 == 0) { + echo "."; + if (($i+1) % 1000 == 0) { + echo "
"; + } + backup_flush(300); + } + + if (!$newid) { + $status = false; + } + } + } + + return $status; + } + //This function returns a log record with all the necessay transformations //done. It's used by restore_log_module() to restore modules log. function lesson_restore_logs($restore,$log) {