backup will not back up grade categories and grades if some grade items are not backed up. restore will not resotre grade categories and grades if some grade items are not being restored

This commit is contained in:
toyomoyo
2007-06-13 09:06:44 +00:00
parent a3701fdc05
commit 06e3e967af
2 changed files with 114 additions and 31 deletions
+52 -13
View File
@@ -1363,9 +1363,51 @@
$status = true;
// see if ALL grade items of type mod of this course are being backed up
// if not, we do not need to backup grade category and associated grade items/grades
$backupall = true;
if ($grade_items = get_records_sql("SELECT * FROM {$CFG->prefix}grade_items
WHERE courseid = $preferences->backup_course
ORDER BY sortorder ASC")) {
foreach ($grade_items as $grade_item) {
// do not restore if this grade_item is a mod, and
if ($grade_item->itemtype == 'mod') {
// get module information
// if no user data selected, we skip this grade_item
if (!backup_userdata_selected($preferences,$grade_item->itemmodule,$grade_item->iteminstance)) {
//print_object($grade_item);
$backupall = false;
break;
}
}
}
}
//Gradebook header
fwrite ($bf,start_tag("GRADEBOOK",2,true));
// Now backup grade_item (inside grade_category)
if ($backupall) {
$status = backup_gradebook_category_info($bf,$preferences);
}
$status = backup_gradebook_item_info($bf,$preferences, $backupall);
$status = backup_gradebook_outcomes_info($bf, $preferences);
// back up grade outcomes
//Gradebook footer
$status = fwrite ($bf,end_tag("GRADEBOOK",2,true));
return $status;
}
function backup_gradebook_category_info($bf,$preferences) {
global $CFG;
$status = true;
//Output grade_category
// getting grade categories, but make sure parents come before children
@@ -1399,18 +1441,13 @@
$status = fwrite ($bf,end_tag("GRADE_CATEGORIES",3,true));
}
// Now backup grade_item (inside grade_category)
$status = backup_gradebook_item_info($bf,$preferences);
$status = backup_gradebook_outcomes_info($bf, $preferences);
// back up grade outcomes
//Gradebook footer
$status = fwrite ($bf,end_tag("GRADEBOOK",2,true));
return $status;
}
//Backup gradebook_item (called from backup_gradebook_info
function backup_gradebook_item_info($bf,$preferences) {
function backup_gradebook_item_info($bf,$preferences, $backupall) {
global $CFG;
@@ -1431,14 +1468,16 @@
// do not restore if this grade_item is a mod, and
if ($grade_item->itemtype == 'mod') {
// get module information
$mod = get_record('course_modules', 'id', $grade_item->iteminstance);
$modt = get_record('modules', 'id', $mod->module);
// if no user data selected, we skip this grade_item
if (!backup_userdata_selected($preferences,$modt->name,$mod->id)) {
if (!backup_userdata_selected($preferences,$grade_item->itemmodule,$grade_item->iteminstance)) {
continue;
}
} else if ($grade_item->itemtype == 'category') {
// if not all grade items are being backed up
// we ignore this type of grade_item and grades associated
if (!$backupall) {
continue;
}
}
//Begin grade_item
+62 -18
View File
@@ -946,14 +946,19 @@
// Yu: This part is called repeatedly for every instance,
// so it is necessary to set the granular flag and check isset()
// when the first instance of this type of mod is processed.
if (!isset($restore->mods[$mod->type]->granular) && isset($restore->mods[$mod->type]->instances) && is_array($restore->mods[$mod->type]->instances)) {
// This defines whether we want to restore specific
// instances of the modules (granular restore), or
// whether we don't care and just want to restore
// all module instances (non-granular).
$restore->mods[$mod->type]->granular = true;
} else {
$restore->mods[$mod->type]->granular = false;
//if (!isset($restore->mods[$mod->type]->granular) && isset($restore->mods[$mod->type]->instances) && is_array($restore->mods[$mod->type]->instances)) {
if (!isset($restore->mods[$mod->type]->granular)) {
if (isset($restore->mods[$mod->type]->instances) && is_array($restore->mods[$mod->type]->instances)) {
// This defines whether we want to restore specific
// instances of the modules (granular restore), or
// whether we don't care and just want to restore
// all module instances (non-granular).
$restore->mods[$mod->type]->granular = true;
} else {
$restore->mods[$mod->type]->granular = false;
}
}
//Check if we've to restore this module (and instance)
@@ -1180,12 +1185,45 @@
$categoriescount = count_records ('backup_ids', 'backup_code', $restore->backup_unique_code, 'table_name', 'grade_categories');
$itemscount = count_records ('backup_ids', 'backup_code', $restore->backup_unique_code, 'table_name', 'grade_items');
$outcomecount = count_records ('backup_ids', 'backup_code', $restore->backup_unique_code, 'table_name', 'grade_outcomes');
// we need to know if all grade items that were backed up are being restored
// if that is not the case, we do not restore grade categories nor gradeitems of category type
// i.e. the aggregated grades of that category
$restoreall = true; // set to false if any grade_item is not selected/restored
if ($recs = get_records_select("backup_ids","table_name = 'grade_items' AND backup_code = '$restore->backup_unique_code'", "old_id", "old_id, old_id")) {
foreach ($recs as $rec) {
if ($data = backup_getid($restore->backup_unique_code,'grade_items',$rec->old_id)) {
$info = $data->info;
// do not restore if this grade_item is a mod, and
$itemtype = backup_todb($info['GRADE_ITEM']['#']['ITEMTYPE']['0']['#']);
if ($itemtype == 'mod') {
$iteminstance = backup_todb($info['GRADE_ITEM']['#']['ITEMINSTANCE']['0']['#']);
$itemmodule = backup_todb($info['GRADE_ITEM']['#']['ITEMMODULE']['0']['#']);
if (!restore_userdata_selected($restore, $itemmodule, $iteminstance)) {
// module instance not selected when restored using granular
// we are not restoring all grade items, set flag to false
// so that we do not process grade categories and related grade items/grades
$restoreall = false;
break;
}
}
}
}
}
// return if nothing to restore
if (!$itemscount && !$categoriescount && !outcomecount) {
return $status;
}
// Start ul
if (!defined('RESTORE_SILENTLY')) {
echo '<ul>';
@@ -1196,7 +1234,7 @@
$continue = true;
// Process categories
if ($categoriescount && $continue) {
if ($categoriescount && $continue && $restoreall) {
if (!defined('RESTORE_SILENTLY')) {
echo '<li>'.get_string('gradecategories','grades').'</li>';
}
@@ -1377,12 +1415,8 @@
// do not restore if this grade_item is a mod, and
if ($dbrec->itemtype == 'mod') {
// get the old mod
$mod = get_record('course_modules', 'id', $iteminstance);
$modt = get_record('modules', 'id', $mod->module);
if (!restore_userdata_selected($restore, $modt->name, $mod->id)) {
if (!restore_userdata_selected($restore, $dbrec->itemmodule, $iteminstance)) {
// module instance not selected when restored using granular
// skip this item
$counteritems++;
@@ -1396,8 +1430,16 @@
} else if ($dbrec->itemtype == 'category') {
// the item instance should point to the new grade category
$category = backup_getid($restore->backup_unique_code,'grade_categories', $iteminstance);
$dbrec->iteminstance = $category->new_id;
// only proceed if we are restoring all grade items
if ($restoreall) {
$category = backup_getid($restore->backup_unique_code,'grade_categories', $iteminstance);
$dbrec->iteminstance = $category->new_id;
} else {
// otherwise we can safely ignore this grade item and subsequent
// grade_raws, grade_finals etc
continue;
}
}
$dbrec->itemnumber = backup_todb($info['GRADE_ITEM']['#']['ITEMNUMBER']['0']['#']);
@@ -5883,6 +5925,8 @@
return array_key_exists($modid,$restore->mods[$modname]->instances)
&& !empty($restore->mods[$modname]->instances[$modid]->userinfo);
}
print_object($restore->mods[$modname]);
return !empty($restore->mods[$modname]->userinfo);
}