Now an email is sent to the admin when some course backup is excecuted.
TODO: - View logs - Language strings
This commit is contained in:
+2
-2
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user