diff --git a/backup/backup_execute.html b/backup/backup_execute.html index 02d7ff43b24..eea9099b907 100644 --- a/backup/backup_execute.html +++ b/backup/backup_execute.html @@ -270,6 +270,14 @@ } } + //Print gradebook info + if ($status) { + echo "
  • ".get_string("writinggradebookinfo").'
  • '; + if (!$status = backup_gradebook_info($backup_file,$preferences)) { + notify("An error occurred while backing up gradebook"); + } + } + //Module info, this unique function makes all the work!! //db export and module fileis copy if ($status) { diff --git a/backup/backup_scheduled.php b/backup/backup_scheduled.php index 41ef78426e6..b353d4ee7a4 100644 --- a/backup/backup_scheduled.php +++ b/backup/backup_scheduled.php @@ -634,6 +634,12 @@ function schedule_backup_course_execute($preferences,$starttime = 0) { $status = backup_events_info($backup_file,$preferences); } + //Print gradebook info + if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," gradebook"); + $status = backup_gradebook_info($backup_file,$preferences); + } + //Module info, this unique function makes all the work!! //db export and module fileis copy if ($status) { diff --git a/backup/backuplib.php b/backup/backuplib.php index 2677ec3b84c..c32b7bb798f 100644 --- a/backup/backuplib.php +++ b/backup/backuplib.php @@ -1313,6 +1313,191 @@ return $status; } + //Backup gradebook info + function backup_gradebook_info($bf,$preferences) { + + global $CFG; + + $status = true; + + //Gradebook header + fwrite ($bf,start_tag("GRADEBOOK",2,true)); + + //Output grade_preferences + $grade_preferences = get_records("grade_preferences", "courseid", $preferences->backup_course); + if ($grade_preferences) { + //Begin grade_preferences tag + fwrite ($bf,start_tag("GRADE_PREFERENCES",3,true)); + //Iterate for each preference + foreach ($grade_preferences as $grade_preference) { + //Begin grade_preference + fwrite ($bf,start_tag("GRADE_PREFERENCE",4,true)); + //Output individual fields + fwrite ($bf,full_tag("PREFERENCE",5,false,$grade_preference->preference)); + fwrite ($bf,full_tag("VALUE",5,false,$grade_preference->value)); + //End grade_preference + fwrite ($bf,end_tag("GRADE_PREFERENCE",4,true)); + } + //End grade_preferences tag + $status = fwrite ($bf,end_tag("GRADE_PREFERENCES",3,true)); + } + + //Output grade_letter + $grade_letters = get_records("grade_letter", "courseid", $preferences->backup_course); + if ($grade_letters) { + //Begin grade_letters tag + fwrite ($bf,start_tag("GRADE_LETTERS",3,true)); + //Iterate for each letter + foreach ($grade_letters as $grade_letter) { + //Begin grade_letter + fwrite ($bf,start_tag("GRADE_LETTER",4,true)); + //Output individual fields + fwrite ($bf,full_tag("LETTER",5,false,$grade_letter->letter)); + fwrite ($bf,full_tag("GRADE_HIGH",5,false,$grade_letter->grade_high)); + fwrite ($bf,full_tag("GRADE_LOW",5,false,$grade_letter->grade_low)); + //End grade_letter + fwrite ($bf,end_tag("GRADE_LETTER",4,true)); + } + //End grade_letters tag + $status = fwrite ($bf,end_tag("GRADE_LETTERS",3,true)); + } + + //Output grade_category + $grade_categories = get_records("grade_category", "courseid", $preferences->backup_course); + if ($grade_categories) { + //Begin grade_categories tag + fwrite ($bf,start_tag("GRADE_CATEGORIES",3,true)); + //Iterate for each category + foreach ($grade_categories as $grade_category) { + //Begin grade_category + fwrite ($bf,start_tag("GRADE_CATEGORY",4,true)); + //Output individual fields + fwrite ($bf,full_tag("NAME",5,false,$grade_category->name)); + fwrite ($bf,full_tag("DROP_X_LOWEST",5,false,$grade_category->drop_x_lowest)); + fwrite ($bf,full_tag("BONUS_POINTS",5,false,$grade_category->bonus_points)); + fwrite ($bf,full_tag("HIDDEN",5,false,$grade_category->hidden)); + fwrite ($bf,full_tag("WEIGHT",5,false,$grade_category->weight)); + + //Now backup grade_item (inside grade_category) + $status = backup_gradebook_item_info($bf,$preferences,$grade_category->id); + + //End grade_category + fwrite ($bf,end_tag("GRADE_CATEGORY",4,true)); + } + //End grade_categories tag + $status = fwrite ($bf,end_tag("GRADE_CATEGORIES",3,true)); + } + //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,$gradecategoryid) { + + global $CFG; + + $status = true; + + //Output grade_item (only for modules included in backup) + $grade_items = get_records_sql("SELECT * + FROM {$CFG->prefix}grade_item + WHERE courseid = $preferences->backup_course AND + category = $gradecategoryid"); + //Filter items about modules not included in backup + $inc_grade_items = array(); + if ($grade_items) { + foreach ($grade_items as $grade_item) { + //Get modulename + $rec_module = get_record("modules", "id", $grade_item->modid); + //If it exists and it's included in backup + if ($rec_module && $preferences->mods[$rec_module->name]->backup == 1) { + //Set the name and add it + $grade_item->module_name = $rec_module->name; + $inc_grade_items[] = $grade_item; + } else { + if ($CFG->debug > 7) { + echo "skipping $grade_item->modid"."-"."$rec_module->name
    "; + } + } + } + } + if ($inc_grade_items) { + //Begin grade_items tag + fwrite ($bf,start_tag("GRADE_ITEMS",5,true)); + //Iterate for each item + foreach ($inc_grade_items as $grade_item) { + //Begin grade_item + fwrite ($bf,start_tag("GRADE_ITEM",6,true)); + //Output individual fields + fwrite ($bf,full_tag("MODULE_NAME",7,false,$grade_item->module_name)); + fwrite ($bf,full_tag("CMINSTANCE",7,false,$grade_item->cminstance)); + fwrite ($bf,full_tag("SCALE_GRADE",7,false,$grade_item->scale_grade)); + fwrite ($bf,full_tag("EXTRA_CREDIT",7,false,$grade_item->extra_credit)); + fwrite ($bf,full_tag("SORT_ORDER",7,false,$grade_item->sort_order)); + + //Now backup grade_exceptions (inside grade_item) + $status = backup_gradebook_exceptions_info($bf,$preferences,$grade_item->id); + + //End grade_item + fwrite ($bf,end_tag("GRADE_ITEM",6,true)); + } + //End grade_items tag + $status = fwrite ($bf,end_tag("GRADE_ITEMS",5,true)); + } + + return $status; + } + + //Backup gradebook_exceptions (called from backup_gradebook_item_info + function backup_gradebook_exceptions_info($bf,$preferences,$gradeitemid) { + + global $CFG; + + $status = true; + + //Output grade_exceptions (only for users included in backup) + $grade_exceptions = get_records_sql("SELECT * + FROM {$CFG->prefix}grade_exceptions + WHERE courseid = $preferences->backup_course AND + grade_itemid = $gradeitemid"); + //Filter exceptions about users not included in backup + $inc_grade_exceptions = array(); + if ($grade_exceptions) { + foreach ($grade_exceptions as $grade_exception) { + //Check if user has been included in backup + $rec_user = get_record ("backup_ids","backup_code",$preferences->backup_unique_code, + "table_name","user", + "old_id",$grade_exception->userid); + //If it's included in backup + if ($rec_user) { + //Add it + $inc_grade_exceptions[] = $grade_exception; + } else { + if ($CFG->debug > 7) { + echo "skipping $grade_exception->userid"."-user
    "; + } + } + } + } + if ($inc_grade_exceptions) { + //Begin grade_exceptions tag + fwrite ($bf,start_tag("GRADE_EXCEPTIONS",7,true)); + //Iterate for each exception + foreach ($inc_grade_exceptions as $grade_exception) { + //Begin grade_exception + fwrite ($bf,start_tag("GRADE_EXCEPTION",8,true)); + //Output individual fields + fwrite ($bf,full_tag("USERID",9,false,$grade_exception->userid)); + //End grade_exception + fwrite ($bf,end_tag("GRADE_EXCEPTION",8,true)); + } + //End grade_exceptions tag + $status = fwrite ($bf,end_tag("GRADE_EXCEPTIONS",7,true)); + } + + return $status; + } //Backup scales info (common and course scales) function backup_scales_info($bf,$preferences) {