]> git.mjollnir.org Git - moodle.git/commitdiff
some fixes for gradebook backup/restore, still buggy when viewing outcomes/report...
authortoyomoyo <toyomoyo>
Tue, 31 Jul 2007 08:26:17 +0000 (08:26 +0000)
committertoyomoyo <toyomoyo>
Tue, 31 Jul 2007 08:26:17 +0000 (08:26 +0000)
backup/backuplib.php
backup/restorelib.php

index 81789a6d31e95d36a22b3eb09c2c8246ec1186b1..de4d39a0031888a67a2b8b152325569a11eaadb5 100644 (file)
                 //Output individual fields
 
                 fwrite ($bf,full_tag("ID",5,false,$grade_item->id));
+                fwrite ($bf,full_tag("CATEGORYID",5,false,$grade_item->categoryid));
                 fwrite ($bf,full_tag("ITEMNAME",5,false,$grade_item->itemname));
                 fwrite ($bf,full_tag("ITEMTYPE",5,false,$grade_item->itemtype));
                 fwrite ($bf,full_tag("ITEMMODULE",5,false,$grade_item->itemmodule));
 
         $status = true;
 
-        // get all the grade_items
-        // might need to do it using sortorder
-        if ($grade_outcomes = get_records('grade_outcomes', 'courseid', $preferences->backup_course)) {
+        // get all global outcomes (used in this course) 
+        // and course specific outcomes
+        // we don't need to backup all the outcomes in this case        
+        $grade_outcomes = get_records_sql('SELECT go.*
+                                       FROM '.$CFG->prefix.'grade_outcomes_courses goc,
+                                            '.$CFG->prefix.'grade_outcomes go
+                                        WHERE goc.courseid = '.$preferences->backup_course.'
+                                       AND goc.outcomeid = go.id');
 
-            //Begin grade_items tag
+        if (empty($grade_outcomes)) {
+            $grade_outcomes = get_records('grade_outcomes', 'courseid', $preferences->backup_course);
+        } elseif ($mcourseoutcomes = get_records('grade_outcomes', 'courseid', $preferences->backup_course)) {
+            $grade_outcomes += $mcourseoutcomes;
+        }
+
+        if (!empty($grade_outcomes)) {
+            //Begin grade_outcomes tag
             fwrite ($bf,start_tag("GRADE_OUTCOMES",3,true));
-            //Iterate for each item
+            //Iterate for each outcome
             foreach ($grade_outcomes as $grade_outcome) {
-                //Begin grade_item
+                //Begin grade_outcome
                 fwrite ($bf,start_tag("GRADE_OUTCOME",4,true));
                 //Output individual fields
 
                 fwrite ($bf,full_tag("ID",5,false,$grade_outcome->id));
+                fwrite ($bf,full_tag("COURSEID",5,false,$grade_outcome->courseid));             
                 fwrite ($bf,full_tag("SHORTNAME",5,false,$grade_outcome->shortname));
                 fwrite ($bf,full_tag("FULLNAME",5,false,$grade_outcome->fullname));
                 fwrite ($bf,full_tag("SCALEID",5,false,$grade_outcome->scaleid));
                 fwrite ($bf,full_tag("USERMODIFIED",5,false,$grade_outcome->usermodified));
 
-                //End grade_item
+                //End grade_outcome
                 fwrite ($bf,end_tag("GRADE_OUTCOME",4,true));
             }
-            //End grade_items tag
+            //End grade_outcomes tag
             $status = fwrite ($bf,end_tag("GRADE_OUTCOMES",3,true));
         }
-
         return $status;
     }
 
index 4a328cb869d52710152132d75c520d49cec40365..bee9b2c8eb9f8df7f81c991dcda3ccc3604010df 100644 (file)
                             //print_object ($GLOBALS['traverse_array']);         //Debug
                             //$GLOBALS['traverse_array']="";                     //Debug
                             //Now build the GRADE_PREFERENCES record structure
-
-                            $dbrec->courseid   = $restore->course_id;
+                            if ($info['GRADE_OUTCOME']['#']['COURSEID']['0']['#']) {
+                                $dbrec->courseid   = $restore->course_id;  
+                            } else {
+                                $dbrec->courseid   = NULL;
+                            }
                             $dbrec->shortname =  backup_todb($info['GRADE_OUTCOME']['#']['SHORTNAME']['0']['#']);
                             $dbrec->fullname =  backup_todb($info['GRADE_OUTCOME']['#']['FULLNAME']['0']['#']);
 
 
                             // Structure is equal to db, insert record
                             // If the shortname doesn't exist
-                            if (!$prerec = get_record('grade_outcomes','courseid',$dbrec->courseid,'shortname',$dbrec->shortname)) {
-                                $status = insert_record('grade_outcomes',$dbrec);
+                            
+                              
+                            if (!empty($dbrec->courseid)) {
+                                $course_to_search = 0;
+                            } else {
+                                $course_to_search = $restore->course_id;
+                            }
+                            
+                            if (!$prerec = get_record('grade_outcomes','courseid',$course_to_search,'shortname',$dbrec->shortname)) {
+                                $newid = insert_record('grade_outcomes',$dbrec);
+                            } else {
+                                $newid = $prerec->id;  
+                            }
+                            
+                            if ($newid) {
+                                backup_putid($restore->backup_unique_code,"grade_outcomes", $rec->old_id, $newid);
                             }
                         }
                         //Increment counters
                             $dbrec->courseid = $restore->course_id;
 
                             if (!empty($info['GRADE_ITEM']['#']['CATEGORYID']['0']['#'])) {
-
                                 $category = backup_getid($restore->backup_unique_code,'grade_categories',backup_todb($info['GRADE_ITEM']['#']['CATEGORYID']['0']['#']));
                                 $dbrec->categoryid = $category->new_id;
                             }
                             } elseif ($dbrec->itemtype == 'course') { // We don't restore course type to avoid duplicate course items
                                 if ($restoreall) {
                                     // TODO any special code needed here to restore course item without duplicating it?
+                                    // find the course category with depth 1, and course id = current course id
+                                    // this would have been already restored                                    
+                                    
+                                    $cat = get_record('grade_categories', 'depth', 1, 'courseid', $restore->course_id);
+                                    $dbrec->iteminstance = $cat->id;
+                                    
                                 } else {
                                     continue;
                                 }
 
                             if ($info['GRADE_ITEM']['#']['SCALEID']['0']['#']) {
                                 $scale = backup_getid($restore->backup_unique_code,"scale",backup_todb($info['GRADE_ITEM']['#']['SCALEID']['0']['#']));
-                                $derec->scaleid = $scale->new_id;
+                                $dbrec->scaleid = $scale->new_id;
                             }
 
                             /// needs to be restored first
-                            $dbrec->outcomeid = backup_todb($info['GRADE_ITEM']['#']['OUTCOMEID']['0']['#']);
+                            $dbrec->outcomeid = backup_getid($restore->backup_unique_code,"grade_outcomes",backup_todb($info['GRADE_ITEM']['#']['OUTCOMEID']['0']['#']));                            
+                            
                             $dbrec->gradepass = backup_todb($info['GRADE_ITEM']['#']['GRADEPASS']['0']['#']);
                             $dbrec->multfactor = backup_todb($info['GRADE_ITEM']['#']['MULTFACTOR']['0']['#']);
                             $dbrec->plusfactor = backup_todb($info['GRADE_ITEM']['#']['PLUSFACTOR']['0']['#']);
                                 $dbrec->sortorder = $lastitem->sortorder + 1;
                             } else {
                                 // this is the first grade_item
-                                $dbrec->sortorder = 0;
+                                $dbrec->sortorder = 1;
                             }
 
                             $itemid = insert_record('grade_items',$dbrec);
                                     $grade->overridden = backup_todb($ite_info['#']['OVERRIDDEN']['0']['#']);
                                     $grade->excluded = backup_todb($ite_info['#']['EXCLUDED']['0']['#']);
 
-                                    insert_record('grade_grades', $grade);
-
+                                    $newid = insert_record('grade_grades', $grade);
+                                    backup_putid($restore->backup_unique_code,"grade_grades", backup_todb($ite_info['#']['ID']['0']['#']), $newid);
                                     $counter++;
                                     if ($counter % 20 == 0) {
                                         if (!defined('RESTORE_SILENTLY')) {
                                     //print_object ($GLOBALS['traverse_array']);                                                  //Debug
                                     //$GLOBALS['traverse_array']="";                                                              //Debug
                                     $grade = backup_getid($restore->backup_unique_code,"grade_grades", backup_todb($ite_info['#']['GRADEID']['0']['#']));
+                                    
                                     $text->gradeid = $grade->new_id;
                                     $text->information = backup_todb($ite_info['#']['INFORMATION']['0']['#']);
                                     $text->informationformat = backup_todb($ite_info['#']['INFORMATIONFORMAT']['0']['#']);