]> git.mjollnir.org Git - moodle.git/commitdiff
can restore the new backup code now
authormichaelpenne <michaelpenne>
Mon, 1 Nov 2004 20:37:16 +0000 (20:37 +0000)
committermichaelpenne <michaelpenne>
Mon, 1 Nov 2004 20:37:16 +0000 (20:37 +0000)
mod/lesson/restorelib.php

index 11a8aa90bea1a1a9dae1e355d97827e4a6852c4d..d3d9378e67609d656a7cc4b06e7bc5a957e9e21d 100644 (file)
@@ -1,19 +1,22 @@
 <?PHP //$Id$
+
     //This php script contains all the stuff to backup/restore
     //lesson mods
 
-    //This is the "graphical" structure of the lesson mod:
+    //This is the "graphical" structure of the lesson mod: 
     //
-    //                                          lesson ----------------------------|
-    //                                       (CL,pk->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)
     //                                             |
             //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']['#']);
                              $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;
             }
         } else {
             $status = false;
         }
-
         return $status;
     }
 
             $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']['#']);
                 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;
             }
                 }
             }
         }
-
         return $status;
     }
 
                 // 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']['#']);
                 }
 
                 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);
                 $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
 
         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 "<br>";
+                    }
+                    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 "<br>";
+                    }
+                    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 "<br>";
+                    }
+                    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 "<br>";
+                    }
+                    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) {