]> git.mjollnir.org Git - moodle.git/commitdiff
Minor fix in assessments.php. Revisions to backup and restore to always include teach...
authorrkingdon <rkingdon>
Mon, 3 Nov 2003 18:45:05 +0000 (18:45 +0000)
committerrkingdon <rkingdon>
Mon, 3 Nov 2003 18:45:05 +0000 (18:45 +0000)
mod/exercise/assessments.php
mod/exercise/backuplib.php
mod/exercise/restorelib.php

index d4b7d3ffef1e8d85430bfab25a08180a26d6fec5..8bbc778b662c73da871789a81b9232e9b0bd70ac 100644 (file)
                        
                // show grade if grading strategy is not zero
                if ($exercise->gradingstrategy) {
-                       redirect($returnto, "<p align=\"center\"><b.".get_string("thegradeis", "exercise").": ".
+                       redirect($returnto, "<p align=\"center\"><b>".get_string("thegradeis", "exercise").": ".
                 number_format($grade * $exercise->grade / 100.0, 1)."% (".get_string("maximumgrade").
                                " ".number_format($exercise->grade)."%)</b></p>", 1);
                        }
index a1100c515cf6719582df134f0c9d14b0f56a1365..0677ac92d31a99e8d00517a931750857845f72fe 100644 (file)
                 fwrite ($bf,full_tag("SHOWLEAGUETABLE",4,false,$exercise->showleaguetable));
                 //Now we backup exercise elements
                 $status = backup_exercise_elements($bf,$preferences,$exercise->id);
+                //Now we backup any teacher submissions (these are an integral part of the exercise)
+                $status = backup_exercise_teacher_submissions($bf, $preferences, $exercise->id);
                 //if we've selected to backup users info, then execute backup_exercise_submisions
                 if ($preferences->mods["exercise"]->userinfo) {
-                    $status = backup_exercise_submissions($bf,$preferences,$exercise->id);
+                    $status = backup_exercise_student_submissions($bf,$preferences,$exercise->id);
                 }
                 //End mod
                 $status =fwrite ($bf,end_tag("MOD",3,true));
-            }
-        }
-        //if we've selected to backup users info, then backup files too
-        if ($status) {
-            if ($preferences->mods["exercise"]->userinfo) {
-                $status = backup_exercise_files($bf,$preferences);
+                //we need to backup the teacher files (the exercise descriptions)
+                $status = backup_exercise_teacher_files($bf, $preferences, $exercise->id);
+                //if we've selected to backup users info, then backup files too
+                if ($status) {
+                    if ($preferences->mods["exercise"]->userinfo) {
+                        $status = backup_exercise_student_files($bf,$preferences, $exercise->id);
+                    }
+                }
             }
         }
         return $status;  
             //Write start tag
             $status =fwrite ($bf,start_tag("ELEMENTS",4,true));
             //Iterate over each element
-            foreach ($exercise_elements as $wor_ele) {
+            foreach ($exercise_elements as $element) {
                 //Start element
                 $status =fwrite ($bf,start_tag("ELEMENT",5,true));
                 //Print element contents
-                fwrite ($bf,full_tag("ELEMENTNO",6,false,$wor_ele->elementno));
-                fwrite ($bf,full_tag("DESCRIPTION",6,false,$wor_ele->description));
-                fwrite ($bf,full_tag("SCALE",6,false,$wor_ele->scale));
-                fwrite ($bf,full_tag("MAXSCORE",6,false,$wor_ele->maxscore));
-                fwrite ($bf,full_tag("WEIGHT",6,false,$wor_ele->weight));
+                fwrite ($bf,full_tag("ELEMENTNO",6,false,$element->elementno));
+                fwrite ($bf,full_tag("DESCRIPTION",6,false,$element->description));
+                fwrite ($bf,full_tag("SCALE",6,false,$element->scale));
+                fwrite ($bf,full_tag("MAXSCORE",6,false,$element->maxscore));
+                fwrite ($bf,full_tag("WEIGHT",6,false,$element->weight));
                 //Now we backup exercise rubrics
-                $status = backup_exercise_rubrics($bf,$preferences,$exercise,$wor_ele->elementno);
+                $status = backup_exercise_rubrics($bf,$preferences,$exercise,$element->elementno);
                 //End element
                 $status =fwrite ($bf,end_tag("ELEMENT",5,true));
             }
             //Write start tag
             $status =fwrite ($bf,start_tag("RUBRICS",6,true));
             //Iterate over each element
-            foreach ($exercise_rubrics as $wor_rub) {
+            foreach ($exercise_rubrics as $rubric) {
                 //Start rubric
                 $status =fwrite ($bf,start_tag("RUBRIC",7,true));
                 //Print rubric contents
-                fwrite ($bf,full_tag("RUBRICNO",8,false,$wor_rub->rubricno));
-                fwrite ($bf,full_tag("DESCRIPTION",8,false,$wor_rub->description));
+                fwrite ($bf,full_tag("RUBRICNO",8,false,$rubric->rubricno));
+                fwrite ($bf,full_tag("DESCRIPTION",8,false,$rubric->description));
                 //End rubric
                 $status =fwrite ($bf,end_tag("RUBRIC",7,true));
             }
         return $status;
     }
 
-    //Backup exercise_submissions contents (executed from exercise_backup_mods)
-    function backup_exercise_submissions ($bf,$preferences,$exercise) {
+    //Backup exercise_teacher_submissions contents (executed from exercise_backup_mods)
+    function backup_exercise_teacher_submissions ($bf,$preferences,$exerciseid) {
+
+        global $CFG;
+
+        $status = true;
+
+        $exercise_submissions = get_records_select("exercise_submissions","exerciseid = $exerciseid
+                AND isexercise = 1");
+        //If there is submissions
+        if ($exercise_submissions) {
+            //Write start tag
+            $status =fwrite ($bf,start_tag("SUBMISSIONS",4,true));
+            //Iterate over each submission
+            foreach ($exercise_submissions as $submission) {
+                //Start submission
+                $status =fwrite ($bf,start_tag("SUBMISSION",5,true));
+                //Print submission contents
+                fwrite ($bf,full_tag("ID",6,false,$submission->id));       
+                fwrite ($bf,full_tag("USERID",6,false,$submission->userid));       
+                fwrite ($bf,full_tag("TITLE",6,false,$submission->title));       
+                fwrite ($bf,full_tag("TIMECREATED",6,false,$submission->timecreated));       
+                fwrite ($bf,full_tag("RESUBMIT",6,false,$submission->resubmit));       
+                fwrite ($bf,full_tag("MAILED",6,false,$submission->mailed));       
+                fwrite ($bf,full_tag("ISEXERCISE",6,false,$submission->isexercise));       
+                //Now we backup any exercise assessments (if student data required)
+                if ($preferences->mods["exercise"]->userinfo) {
+                    $status = backup_exercise_assessments($bf,$preferences,$exerciseid,$submission->id);
+                }
+                //End submission
+                $status =fwrite ($bf,end_tag("SUBMISSION",5,true));
+            }
+            //Write end tag
+            $status =fwrite ($bf,end_tag("SUBMISSIONS",4,true));
+        }
+        return $status;
+    }
+
+    //Backup exercise_student_submissions contents (executed from exercise_backup_mods)
+    function backup_exercise_student_submissions ($bf,$preferences,$exerciseid) {
 
         global $CFG;
 
         $status = true;
 
-        $exercise_submissions = get_records("exercise_submissions","exerciseid",$exercise,"id");
+        $exercise_submissions = get_records_select("exercise_submissions","exerciseid = $exerciseid
+                AND isexercise = 0");
         //If there is submissions
         if ($exercise_submissions) {
             //Write start tag
             $status =fwrite ($bf,start_tag("SUBMISSIONS",4,true));
             //Iterate over each submission
-            foreach ($exercise_submissions as $wor_sub) {
+            foreach ($exercise_submissions as $submission) {
                 //Start submission
                 $status =fwrite ($bf,start_tag("SUBMISSION",5,true));
                 //Print submission contents
-                fwrite ($bf,full_tag("ID",6,false,$wor_sub->id));       
-                fwrite ($bf,full_tag("USERID",6,false,$wor_sub->userid));       
-                fwrite ($bf,full_tag("TITLE",6,false,$wor_sub->title));       
-                fwrite ($bf,full_tag("TIMECREATED",6,false,$wor_sub->timecreated));       
-                fwrite ($bf,full_tag("RESUBMIT",6,false,$wor_sub->resubmit));       
-                fwrite ($bf,full_tag("MAILED",6,false,$wor_sub->mailed));       
-                fwrite ($bf,full_tag("ISEXERCISE",6,false,$wor_sub->isexercise));       
-                //Now we backup exercise assessments
-                $status = backup_exercise_assessments($bf,$preferences,$exercise,$wor_sub->id);
+                fwrite ($bf,full_tag("ID",6,false,$submission->id));       
+                fwrite ($bf,full_tag("USERID",6,false,$submission->userid));       
+                fwrite ($bf,full_tag("TITLE",6,false,$submission->title));       
+                fwrite ($bf,full_tag("TIMECREATED",6,false,$submission->timecreated));       
+                fwrite ($bf,full_tag("RESUBMIT",6,false,$submission->resubmit));       
+                fwrite ($bf,full_tag("MAILED",6,false,$submission->mailed));       
+                fwrite ($bf,full_tag("ISEXERCISE",6,false,$submission->isexercise));       
+                //Now we backup any exercise assessments
+                $status = backup_exercise_assessments($bf,$preferences,$exerciseid,$submission->id);
                 //End submission
                 $status =fwrite ($bf,end_tag("SUBMISSION",5,true));
             }
     }
 
 
-    //Backup exercise files because we've selected to backup user info
+    //Backup the teacher's exercise files (they are an integral part of the exercise)
+    function backup_exercise_teacher_files($bf,$preferences, $exerciseid) {
+
+        global $CFG;
+       
+        $status = true;
+
+        //First we check to moddata exists and create it as necessary
+        //in temp/backup/$backup_code  dir
+        $status = check_and_create_moddata_dir($preferences->backup_unique_code);
+        //in temp/backup/$backup_code/moddate create the exercise diretory
+        $status = check_dir_exists("$CFG->dataroot/temp/backup/$preferences->backup_unique_code/moddata/exercise", true);
+        if ($status) {
+            //Now copy the submission dirs
+            if ($submissions = get_records_select("exercise_submissions", "exerciseid = $exerciseid
+                        AND isexercise = 1")) {
+                foreach ($submissions as $submission) {
+                    //Only if it exists !! Thanks to Daniel Miksik.
+                    if (is_dir("{$CFG->dataroot}/$preferences->backup_course/{$CFG->moddata}/exercise/$submission->id")) {
+                        // create directory
+                        // $status = check_dir_exists("$CFG->dataroot/temp/backup/$preferences->backup_unique_code/moddata/exercise", true);
+                        // copy all the files in the directory
+                        $status = backup_copy_file("{$CFG->dataroot}/$preferences->backup_course/{$CFG->moddata}/exercise/$submission->id", "{$CFG->dataroot}/temp/backup/$preferences->backup_unique_code/moddata/exercise/$submission->id");
+                    }
+                }
+            }
+        }
+
+        return $status;
+
+    } 
+
+    //Backup students' exercise files because we've selected to backup user info
     //and files are user info's level
-    function backup_exercise_files($bf,$preferences) {
+    function backup_exercise_student_files($bf,$preferences, $exerciseid) {
 
         global $CFG;
        
         //First we check to moddata exists and create it as necessary
         //in temp/backup/$backup_code  dir
         $status = check_and_create_moddata_dir($preferences->backup_unique_code);
-        //Now copy the exercise dir
         if ($status) {
-            //Only if it exists !! Thanks to Daniel Miksik.
-            if (is_dir($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/exercise")) {
-                $status = backup_copy_file($CFG->dataroot."/".$preferences->backup_course."/".$CFG->moddata."/exercise",
-                                           $CFG->dataroot."/temp/backup/".$preferences->backup_unique_code."/moddata/exercise");
+            //Now copy the submission dirs
+            if ($submissions = get_records_select("exercise_submissions", "exerciseid = $exerciseid
+                        AND isexercise = 0")) {
+                foreach ($submissions as $submission) {
+                    //Only if it exists !! Thanks to Daniel Miksik.
+                    if (is_dir("{$CFG->dataroot}/$preferences->backup_course/$CFG->moddata/exercise/$submission->id")) {
+                        $status = backup_copy_file("{$CFG->dataroot}/$preferences->backup_course/{$CFG->moddata}/exercise/$submission->id", "{$CFG->dataroot}/temp/backup/$preferences->backup_unique_code/moddata/exercise/$submission->id");
+                    }
+                }
             }
         }
 
index f8d5df6d6406057f2f789666c2f3b38917cf7533..53654f454c5984a4d821c0ff6cb6cfe38d5eb4b4 100644 (file)
                 backup_putid($restore->backup_unique_code,$mod->modtype,
                              $mod->id, $newid);
                 //We have to restore the exercise_elements table now (course level table)
-                $status = exercise_elements_restore_mods($newid,$info,$restore);
-                //Now check if want to restore user data and do it.
-                if ($restore->mods['exercise']->userinfo) {
-                    //Restore exercise_submissions
-                    $status = exercise_submissions_restore_mods ($mod->id, $newid,$info,$restore);
-                }
+                $status = exercise_elements_restore($newid,$info,$restore);
+                //restore the teacher submissions and optionally the student submissions
+                $status = exercise_submissions_restore($mod->id, $newid,$info,$restore);
             } else {
                 $status = false;
             }
     }
 
     //This function restores the exercise_elements
-    function exercise_elements_restore_mods($exercise_id,$info,$restore) {
+    function exercise_elements_restore($exercise_id,$info,$restore) {
 
         global $CFG;
 
 
             if ($newid) {
                 //We have to restore the exercise_rubrics table now (course level table)
-                $status = exercise_rubrics_restore_mods($exercise_id,$element->elementno,$ele_info,$restore);
+                $status = exercise_rubrics_restore($exercise_id,$element->elementno,$ele_info,$restore);
             } else {
                 $status = false;
             }
 
 
     //This function restores the exercise_rubrics
-    function exercise_rubrics_restore_mods($exercise_id,$elementno,$info,$restore) {
+    function exercise_rubrics_restore($exercise_id,$elementno,$info,$restore) {
 
         global $CFG;
 
         $status = true;
 
-        //Get the exercise_rubrics array
-        $rubrics = $info['#']['RUBRICS']['0']['#']['RUBRIC'];
-
-        //Iterate over exercise_rubrics
-        for($i = 0; $i < sizeof($rubrics); $i++) {
-            $rub_info = $rubrics[$i];
-            //traverse_xmlize($rub_info);                                                          //Debug
-            //print_object ($GLOBALS['traverse_array']);                                           //Debug
-            //$GLOBALS['traverse_array']="";                                                       //Debug
-
-            //Now, build the exercise_RUBRICS record structure
-            $rubric->exerciseid = $exercise_id;
-            $rubric->elementno = $elementno;
-            $rubric->rubricno = backup_todb($rub_info['#']['RUBRICNO']['0']['#']);
-            $rubric->description = backup_todb($rub_info['#']['DESCRIPTION']['0']['#']);
-
-            //The structure is equal to the db, so insert the exercise_rubrics
-            $newid = insert_record ("exercise_rubrics",$rubric);
-
-            //Do some output
-            if (($i+1) % 10 == 0) {
-                echo ".";
-                if (($i+1) % 200 == 0) {
-                    echo "<br>";
+        //Get the exercise_rubrics array (optional)
+        if (isset($info['#']['RUBRICS']['0']['#']['RUBRIC'])) {
+            $rubrics = $info['#']['RUBRICS']['0']['#']['RUBRIC'];
+
+            //Iterate over exercise_rubrics
+            for($i = 0; $i < sizeof($rubrics); $i++) {
+                $rub_info = $rubrics[$i];
+                //traverse_xmlize($rub_info);                                  //Debug
+                //print_object ($GLOBALS['traverse_array']);                   //Debug
+                //$GLOBALS['traverse_array']="";                               //Debug
+
+                //Now, build the exercise_RUBRICS record structure
+                $rubric->exerciseid = $exercise_id;
+                $rubric->elementno = $elementno;
+                $rubric->rubricno = backup_todb($rub_info['#']['RUBRICNO']['0']['#']);
+                $rubric->description = backup_todb($rub_info['#']['DESCRIPTION']['0']['#']);
+
+                //The structure is equal to the db, so insert the exercise_rubrics
+                $newid = insert_record ("exercise_rubrics",$rubric);
+
+                //Do some output
+                if (($i+1) % 10 == 0) {
+                    echo ".";
+                    if (($i+1) % 200 == 0) {
+                        echo "<br>";
+                    }
+                    backup_flush(300);
                 }
-                backup_flush(300);
-            }
 
-            if (!$newid) {
-                $status = false;
+                if (!$newid) {
+                    $status = false;
+                }
             }
         }
         return $status;
     }
 
 
-    //This function restores the exercise_submissions
-    function exercise_submissions_restore_mods($old_exercise_id, $new_exercise_id,$info,$restore) {
+    //This function restores the submissions
+    function exercise_submissions_restore($old_exercise_id, $new_exercise_id,$info,$restore) {
 
         global $CFG;
 
             $submission->mailed = backup_todb($sub_info['#']['MAILED']['0']['#']);
             $submission->isexercise = backup_todb($sub_info['#']['ISEXERCISE']['0']['#']);
 
-            //We have to recode the userid field
-            $user = backup_getid($restore->backup_unique_code,"user",$olduserid);
-            if ($user) {
-                $submission->userid = $user->new_id;
-            }
+            //test if this is from teacher or we restoring student submissions
+            if ($submission->isexercise or $restore->mods['exercise']->userinfo) {
+                //We have to recode the userid field
+                $user = backup_getid($restore->backup_unique_code,"user",$olduserid);
+                if ($user) {
+                    $submission->userid = $user->new_id;
+                }
 
-            //The structure is equal to the db, so insert the exercise_submission
-            $newid = insert_record ("exercise_submissions",$submission);
+                //The structure is equal to the db, so insert the exercise_submission
+                $newid = insert_record ("exercise_submissions",$submission);
 
-            //Do some output
-            if (($i+1) % 50 == 0) {
-                echo ".";
-                if (($i+1) % 1000 == 0) {
-                    echo "<br>";
+                //Do some output
+                if (($i+1) % 50 == 0) {
+                    echo ".";
+                    if (($i+1) % 1000 == 0) {
+                        echo "<br>";
+                    }
+                    backup_flush(300);
                 }
-                backup_flush(300);
-            }
 
-            if ($newid) {
-                //We have the newid, update backup_ids
-                backup_putid($restore->backup_unique_code,"exercise_submissions",$oldid,
-                             $newid);
-
-                //Now copy moddata associated files
-                $status = exercise_restore_files ($oldid, $newid,$restore); 
-                //Now we need to restore exercise_assessments (user level table)
-                if ($status) {
-                    $status = exercise_assessments_restore_mods ($new_exercise_id, $newid,$sub_info,$restore);
+                if ($newid) {
+                    //We have the newid, update backup_ids
+                    backup_putid($restore->backup_unique_code,"exercise_submissions",$oldid,
+                            $newid);
+
+                    //Now copy moddata associated files
+                    $status = exercise_restore_files($oldid, $newid,$restore); 
+                    //Now we need to restore exercise_assessments (user level table)
+                    if ($status and $restore->mods['exercise']->userinfo) {
+                        $status = exercise_assessments_restore($new_exercise_id, $newid,$sub_info,$restore);
+                    }
+                } else {
+                    $status = false;
                 }
-            } else {
-                $status = false;
             }
         }
 
-        return $status;
+    return $status;
     }
 
     //This function restores the exercise_assessments       
-    function exercise_assessments_restore_mods($new_exercise_id, $new_submission_id,$info,$restore) {
+    function exercise_assessments_restore($new_exercise_id, $new_submission_id,$info,$restore) {
 
         global $CFG;
 
         $status = true;
 
-        //Get the assessments array
-        $assessments = $info['#']['ASSESSMENTS']['0']['#']['ASSESSMENT'];
-
-        //Iterate over assessments
-        for($i = 0; $i < sizeof($assessments); $i++) {
-            $ass_info = $assessments[$i];
-            //traverse_xmlize($ass_info);                                                         //Debug
-            //print_object ($GLOBALS['traverse_array']);                                          //Debug
-            //$GLOBALS['traverse_array']="";                                                      //Debug
-
-            //We'll need this later!!
-            $oldid = backup_todb($ass_info['#']['ID']['0']['#']);
-            $olduserid = backup_todb($ass_info['#']['USERID']['0']['#']);
-
-            //Now, build the exercise_ASSESSMENTS record structure
-            $assessment->exerciseid = $new_exercise_id;
-            $assessment->submissionid = $new_submission_id;
-            $assessment->userid = backup_todb($ass_info['#']['USERID']['0']['#']);
-            $assessment->timecreated = backup_todb($ass_info['#']['TIMECREATED']['0']['#']);
-            $assessment->timegraded = backup_todb($ass_info['#']['TIMEGRADED']['0']['#']);
-            $assessment->grade = backup_todb($ass_info['#']['GRADE']['0']['#']);
-            $assessment->gradinggrade = backup_todb($ass_info['#']['GRADINGGRADE']['0']['#']);
-            $assessment->mailed = backup_todb($ass_info['#']['MAILED']['0']['#']);
-            $assessment->generalcomment = backup_todb($ass_info['#']['GENERALCOMMENT']['0']['#']);
-            $assessment->teachercomment = backup_todb($ass_info['#']['TEACHERCOMMENT']['0']['#']);
-
-            //We have to recode the userid field
-            $user = backup_getid($restore->backup_unique_code,"user",$olduserid);
-            if ($user) {
-                $assessment->userid = $user->new_id;
-            }
+        //Get the assessments array (optional)
+        if (isset($info['#']['ASSESSMENTS']['0']['#']['ASSESSMENT'])) {
+            $assessments = $info['#']['ASSESSMENTS']['0']['#']['ASSESSMENT'];
+
+            //Iterate over assessments
+            for($i = 0; $i < sizeof($assessments); $i++) {
+                $ass_info = $assessments[$i];
+                //traverse_xmlize($ass_info);                                                         //Debug
+                //print_object ($GLOBALS['traverse_array']);                                          //Debug
+                //$GLOBALS['traverse_array']="";                                                      //Debug
+
+                //We'll need this later!!
+                $oldid = backup_todb($ass_info['#']['ID']['0']['#']);
+                $olduserid = backup_todb($ass_info['#']['USERID']['0']['#']);
+
+                //Now, build the exercise_ASSESSMENTS record structure
+                $assessment->exerciseid = $new_exercise_id;
+                $assessment->submissionid = $new_submission_id;
+                $assessment->userid = backup_todb($ass_info['#']['USERID']['0']['#']);
+                $assessment->timecreated = backup_todb($ass_info['#']['TIMECREATED']['0']['#']);
+                $assessment->timegraded = backup_todb($ass_info['#']['TIMEGRADED']['0']['#']);
+                $assessment->grade = backup_todb($ass_info['#']['GRADE']['0']['#']);
+                $assessment->gradinggrade = backup_todb($ass_info['#']['GRADINGGRADE']['0']['#']);
+                $assessment->mailed = backup_todb($ass_info['#']['MAILED']['0']['#']);
+                $assessment->generalcomment = backup_todb($ass_info['#']['GENERALCOMMENT']['0']['#']);
+                $assessment->teachercomment = backup_todb($ass_info['#']['TEACHERCOMMENT']['0']['#']);
+
+                //We have to recode the userid field
+                $user = backup_getid($restore->backup_unique_code,"user",$olduserid);
+                if ($user) {
+                    $assessment->userid = $user->new_id;
+                }
 
-            //The structure is equal to the db, so insert the exercise_assessment
-            $newid = insert_record ("exercise_assessments",$assessment);
+                //The structure is equal to the db, so insert the exercise_assessment
+                $newid = insert_record ("exercise_assessments",$assessment);
 
-            //Do some output
-            if (($i+1) % 50 == 0) {
-                echo ".";
-                if (($i+1) % 1000 == 0) {
-                    echo "<br>";
+                //Do some output
+                if (($i+1) % 50 == 0) {
+                    echo ".";
+                    if (($i+1) % 1000 == 0) {
+                        echo "<br>";
+                    }
+                    backup_flush(300);
                 }
-                backup_flush(300);
-            }
-
-            if ($newid) {
-                //We have the newid, update backup_ids
-                backup_putid($restore->backup_unique_code,"exercise_assessments",$oldid,
-                             $newid);
 
-                //Now we need to restore exercise_grades (user level table)   
-                if ($status) {
-                    $status = exercise_grades_restore_mods ($new_exercise_id, $newid,$ass_info,$restore);   
+                if ($newid) {
+                    //We have the newid, update backup_ids
+                    backup_putid($restore->backup_unique_code,"exercise_assessments",$oldid,
+                            $newid);
+
+                    //Now we need to restore exercise_grades (user level table)   
+                    if ($status) {
+                        $status = exercise_grades_restore_mods ($new_exercise_id, $newid,$ass_info,$restore);   
+                    }
+                } else {
+                    $status = false;
                 }
-            } else {
-                $status = false;
             }
         }
 
 
         $status = true;
 
-        //Get the grades array
-        $grades = $info['#']['GRADES']['0']['#']['GRADE'];
-
-        //Iterate over grades
-        for($i = 0; $i < sizeof($grades); $i++) {
-            $gra_info = $grades[$i];
-            //traverse_xmlize($gra_info);                                                            //Debug
-            //print_object ($GLOBALS['traverse_array']);                                             //Debug
-            //$GLOBALS['traverse_array']="";                                                         //Debug
-
-            //Now, build the exercise_GRADES record structure
-            $grade->exerciseid = $new_exercise_id;
-            $grade->assessmentid = $new_assessment_id;
-            $grade->elementno = backup_todb($gra_info['#']['ELEMENTNO']['0']['#']);
-            $grade->feedback = backup_todb($gra_info['#']['FEEDBACK']['0']['#']);
-            $grade->grade = backup_todb($gra_info['#']['GRADE_VALUE']['0']['#']);
-
-            //The structure is equal to the db, so insert the exercise_grade
-            $newid = insert_record ("exercise_grades",$grade);
-
-            //Do some output
-            if (($i+1) % 50 == 0) {
-                echo ".";
-                if (($i+1) % 1000 == 0) {
-                    echo "<br>";
+        //Get the grades array (optional)
+        if (isset($info['#']['GRADES']['0']['#']['GRADE'])) {
+            $grades = $info['#']['GRADES']['0']['#']['GRADE'];
+
+            //Iterate over grades
+            for($i = 0; $i < sizeof($grades); $i++) {
+                $gra_info = $grades[$i];
+                //traverse_xmlize($gra_info);                           //Debug
+                //print_object ($GLOBALS['traverse_array']);            //Debug
+                //$GLOBALS['traverse_array']="";                        //Debug
+
+                //Now, build the exercise_GRADES record structure
+                $grade->exerciseid = $new_exercise_id;
+                $grade->assessmentid = $new_assessment_id;
+                $grade->elementno = backup_todb($gra_info['#']['ELEMENTNO']['0']['#']);
+                $grade->feedback = backup_todb($gra_info['#']['FEEDBACK']['0']['#']);
+                $grade->grade = backup_todb($gra_info['#']['GRADE_VALUE']['0']['#']);
+
+                //The structure is equal to the db, so insert the exercise_grade
+                $newid = insert_record ("exercise_grades",$grade);
+
+                //Do some output
+                if (($i+1) % 50 == 0) {
+                    echo ".";
+                    if (($i+1) % 1000 == 0) {
+                        echo "<br>";
+                    }
+                    backup_flush(300);
                 }
-                backup_flush(300);
-            }
 
-            if (!$newid) {
-                $status = false;
+                if (!$newid) {
+                    $status = false;
+                }
             }
         }