From a51512c9bc474fb09adfc92c0588a436629fe80e Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Tue, 31 Jul 2007 08:26:17 +0000 Subject: [PATCH] some fixes for gradebook backup/restore, still buggy when viewing outcomes/report, fixing --- backup/backuplib.php | 31 +++++++++++++++++++++--------- backup/restorelib.php | 44 +++++++++++++++++++++++++++++++++---------- 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/backup/backuplib.php b/backup/backuplib.php index 81789a6d31..de4d39a003 100644 --- a/backup/backuplib.php +++ b/backup/backuplib.php @@ -1494,6 +1494,7 @@ //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)); @@ -1535,31 +1536,43 @@ $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; } diff --git a/backup/restorelib.php b/backup/restorelib.php index 4a328cb869..bee9b2c8eb 100644 --- a/backup/restorelib.php +++ b/backup/restorelib.php @@ -1347,8 +1347,11 @@ //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']['#']); @@ -1362,8 +1365,22 @@ // 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 @@ -1413,7 +1430,6 @@ $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; } @@ -1455,6 +1471,12 @@ } 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; } @@ -1470,11 +1492,12 @@ 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']['#']); @@ -1513,7 +1536,7 @@ $dbrec->sortorder = $lastitem->sortorder + 1; } else { // this is the first grade_item - $dbrec->sortorder = 0; + $dbrec->sortorder = 1; } $itemid = insert_record('grade_items',$dbrec); @@ -1548,8 +1571,8 @@ $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')) { @@ -1573,6 +1596,7 @@ //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']['#']); -- 2.39.5