From d997d2d44e8dfe51010163fb412230ea4e9b246f Mon Sep 17 00:00:00 2001 From: stronk7 Date: Mon, 15 Dec 2003 00:54:16 +0000 Subject: [PATCH] Now an email is sent to the admin when some course backup is excecuted. TODO: - View logs - Language strings --- backup/STATUS.txt | 4 +- backup/backup_scheduled.php | 85 ++++++++++++++++++++++++++++++++++--- backup/version.php | 2 +- 3 files changed, 81 insertions(+), 10 deletions(-) diff --git a/backup/STATUS.txt b/backup/STATUS.txt index 3721588601..fc733699de 100644 --- a/backup/STATUS.txt +++ b/backup/STATUS.txt @@ -119,8 +119,8 @@ Backup Details: - Build a configuration inteface..........................DONE - Create the script.......................................DONE - Integrate it in cron....................................DONE - - View logs...............................................NOT EXISTS - - Send email..............................................NOT EXISTS + - View logs...............................................IN PROGRESS + - Send email..............................................DONE - Select manually the desired activities to backup...........NOT EXISTS - Modify the backup frontend..............................NOT EXISTS - Modify the backup of course_sections and course_modules.NOT EXISTS diff --git a/backup/backup_scheduled.php b/backup/backup_scheduled.php index da783f27a7..50ea51b974 100644 --- a/backup/backup_scheduled.php +++ b/backup/backup_scheduled.php @@ -9,6 +9,8 @@ function schedule_backup_cron() { $status = true; + $emailpending = false; + //Get now $now = time(); @@ -61,9 +63,12 @@ function schedule_backup_cron() { //Now we backup every course with nextstarttime < now if ($backup_course->nextstarttime > 0 && $backup_course->nextstarttime < $now) { //Set laststarttime - set_field("backup_courses","laststarttime",time(),"id",$backup_course->courseid); + $starttime = time(); + set_field("backup_courses","laststarttime",$starttime,"id",$backup_course->courseid); //Launch backup - $course_status = schedule_backup_launch_backup($course); + $course_status = schedule_backup_launch_backup($course,$starttime); + //We have to send a email because we have included at least one backup + $emailpending = true; //Set lastendtime set_field("backup_courses","lastendtime",time(),"id",$backup_course->courseid); //Set laststatus @@ -95,6 +100,27 @@ function schedule_backup_cron() { delete_records_select("backup_log", "laststarttime < '$loglifetime'"); } + //Send email to admin + if ($emailpending) { + echo " Sending email to admin\n"; + $message = ""; + //Build the message text (future versions should handle html messages too!!) + $logs = get_records_select ("backup_log","laststarttime >= '$now'","id"); + if ($logs) { + $currentcourse = 1; + foreach ($logs as $log) { + if ($currentcourse != $log->courseid) { + $message .= "\n==================================================\n\n"; + $currentcourse = $log->courseid; + } + $message .= userdate($log->time,"%T",$admin->timezone)." ".$log->info."\n"; + } + } + //Send the message + email_to_user($admin,$admin,get_string("scheduledbackupstatus"),$message); + } + + //Everything is finished stop backup_sche_running backup_set_config("backup_sche_running","0"); @@ -103,25 +129,45 @@ function schedule_backup_cron() { //This function executes the ENTIRE backup of a course (passed as parameter) //using all the scheduled backup preferences -function schedule_backup_launch_backup($course) { +function schedule_backup_launch_backup($course,$starttime = 0) { $preferences = false; $status = false; echo " Executing backup\n"; - $preferences = schedule_backup_course_configure($course); + schedule_backup_log($starttime,$course->id,"Start backup course $course->fullname"); + schedule_backup_log($starttime,$course->id," Phase 1: Checking and counting:"); + $preferences = schedule_backup_course_configure($course,$starttime); if ($preferences) { - $status = schedule_backup_course_execute($preferences); + schedule_backup_log($starttime,$course->id," Phase 2: Executing and copying:"); + $status = schedule_backup_course_execute($preferences,$starttime); } if ($status && $preferences) { echo " End backup OK\n"; + schedule_backup_log($starttime,$course->id,"End backup course $course->fullname - OK"); } else { echo " End backup with ERROR\n"; + schedule_backup_log($starttime,$course->id,"End backup course $course->fullname - ERROR!!"); } return $status && $preferences; } +//This function saves to backup_log all the needed process info +//to use it later. NOTE: If $starttime = 0 no info in saved +function schedule_backup_log($starttime,$courseid,$message) { + + if ($starttime) { + $log->courseid = $courseid; + $log->time = time(); + $log->laststarttime = $starttime; + $log->info = $message; + + insert_record ("backup_log",$log); + } + +} + //This function returns the next future GMT time to execute the course based in the //configuration of the scheduled backups function schedule_backup_next_execution ($backup_course,$backup_config,$now,$timezone) { @@ -161,12 +207,14 @@ function schedule_backup_next_execution ($backup_course,$backup_config,$now,$tim //This function implements all the needed code to prepare a course //to be in backup (insert temp info into backup temp tables). -function schedule_backup_course_configure($course) { +function schedule_backup_course_configure($course,$starttime = 0) { global $CFG; $status = true; + schedule_backup_log($starttime,$course->id," checking parameters"); + //Check the required variable if (empty($course->id)) { $status = false; @@ -263,6 +311,7 @@ function schedule_backup_course_configure($course) { //Calculate the backup string if ($status) { + schedule_backup_log($starttime,$course->id," calculating backup name"); //Take off some characters in the filename !! $takeoff = array(" ", ":", "/", "\\", "|"); $backup_name = str_replace($takeoff,"_",strtolower(get_string("backupfilename"))); @@ -289,6 +338,7 @@ function schedule_backup_course_configure($course) { //Calculate necesary info to backup modules if ($status) { + schedule_backup_log($starttime,$course->id," calculating modules data"); if ($allmods = get_records("modules") ) { foreach ($allmods as $mod) { $modname = $mod->name; @@ -303,6 +353,7 @@ function schedule_backup_course_configure($course) { $var = "backup_user_info_".$modname; //Call the check function to show more info $modcheckbackup = $modname."_check_backup_mods"; + schedule_backup_log($starttime,$course->id," $modname"); $modcheckbackup($course->id,$$var,$backup_unique_code); } } @@ -312,12 +363,14 @@ function schedule_backup_course_configure($course) { //Now calculate the users if ($status) { + schedule_backup_log($starttime,$course->id," calculating users"); user_check_backup($course->id,$backup_unique_code,$preferences->backup_users); } //Now calculate the logs if ($status) { if ($preferences->backup_logs) { + schedule_backup_log($starttime,$course->id," calculating logs"); log_check_backup($course->id); } } @@ -325,6 +378,7 @@ function schedule_backup_course_configure($course) { //Now calculate the userfiles if ($status) { if ($preferences->backup_user_files) { + schedule_backup_log($starttime,$course->id," calculating user files"); user_files_check_backup($course->id,$preferences->backup_unique_code); } } @@ -332,6 +386,7 @@ function schedule_backup_course_configure($course) { //Now calculate the coursefiles if ($status) { if ($preferences->backup_course_files) { + schedule_backup_log($starttime,$course->id," calculating course files"); course_files_check_backup($course->id,$preferences->backup_unique_code); } } @@ -346,7 +401,7 @@ function schedule_backup_course_configure($course) { //This function implements all the needed code to backup a course //copying it to the desired destination (default if not specified) -function schedule_backup_course_execute($preferences) { +function schedule_backup_course_execute($preferences,$starttime = 0) { global $CFG; @@ -360,9 +415,11 @@ function schedule_backup_course_execute($preferences) { //Check for temp and backup and backup_unique_code directory //Create them as needed + schedule_backup_log($starttime,$preferences->backup_course," checking temp structures"); $status = check_and_create_backup_dir($preferences->backup_unique_code); //Empty dir if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," cleaning old data"); $status = clear_backup_dir($preferences->backup_unique_code); } @@ -373,10 +430,12 @@ function schedule_backup_course_execute($preferences) { //Create the moodle.xml file if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," creating backup file"); //Obtain the xml file (create and open) and print prolog information $backup_file = backup_open_xml($preferences->backup_unique_code); //Prints general info about backup to file if ($backup_file) { + schedule_backup_log($starttime,$preferences->backup_course," general info"); $status = backup_general_info($backup_file,$preferences); } else { $status = false; @@ -389,29 +448,34 @@ function schedule_backup_course_execute($preferences) { //Section info if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," sections info"); $status = backup_course_sections($backup_file,$preferences); } //User info if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," user info"); $status = backup_user_info($backup_file,$preferences); } //If we have selected to backup quizzes, backup categories and //questions structure (step 1). See notes on mod/quiz/backuplib.php if ($status and $preferences->mods['quiz']->backup) { + schedule_backup_log($starttime,$preferences->backup_course," categories & questions"); $status = quiz_backup_question_categories($backup_file,$preferences); } //Print logs if selected if ($status) { if ($preferences->backup_logs) { + schedule_backup_log($starttime,$preferences->backup_course," logs"); $status = backup_log_info($backup_file,$preferences); } } //Print scales info if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," scales"); $status = backup_scales_info($backup_file,$preferences); } @@ -427,11 +491,13 @@ function schedule_backup_course_execute($preferences) { } //If we have to backup some module if ($mods_to_backup) { + schedule_backup_log($starttime,$preferences->backup_course," modules"); //Start modules tag $status = backup_modules_start ($backup_file,$preferences); //Iterate over modules and call backup foreach ($preferences->mods as $module) { if ($module->backup and $status) { + schedule_backup_log($starttime,$preferences->backup_course," $module->name"); $status = backup_module($backup_file,$preferences,$module->name); } } @@ -454,6 +520,7 @@ function schedule_backup_course_execute($preferences) { //Now, if selected, copy user files if ($status) { if ($preferences->backup_user_files) { + schedule_backup_log($starttime,$preferences->backup_course," copying user files"); $status = backup_copy_user_files ($preferences); } } @@ -461,22 +528,26 @@ function schedule_backup_course_execute($preferences) { //Now, if selected, copy course files if ($status) { if ($preferences->backup_course_files) { + schedule_backup_log($starttime,$preferences->backup_course," copying course files"); $status = backup_copy_course_files ($preferences); } } //Now, zip all the backup directory contents if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," zipping files"); $status = backup_zip ($preferences); } //Now, copy the zip file to course directory if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," copying backup"); $status = copy_zip_to_course_dir ($preferences); } //Now, clean temporary data (db and filesystem) if ($status) { + schedule_backup_log($starttime,$preferences->backup_course," cleaning temp data"); $status = clean_temp_data ($preferences); } diff --git a/backup/version.php b/backup/version.php index 03e20cecf9..6cce558464 100644 --- a/backup/version.php +++ b/backup/version.php @@ -5,6 +5,6 @@ // database (backup_version) to determine whether upgrades should // be performed (see db/backup_*.php) -$backup_version = 2003121400; // The current version is a date (YYYYMMDDXX) +$backup_version = 2003121500; // The current version is a date (YYYYMMDDXX) $backup_release = "1.2 development"; // User-friendly version number -- 2.39.5