mirror of
https://github.com/moodle/moodle.git
synced 2025-01-22 08:11:26 +01:00
329 lines
11 KiB
PHP
329 lines
11 KiB
PHP
|
<?PHP //$Id$
|
||
|
//This file contains all the code needed to execute scheduled backups
|
||
|
|
||
|
//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) {
|
||
|
|
||
|
global $CFG;
|
||
|
|
||
|
$status = true;
|
||
|
|
||
|
//Check the required variable
|
||
|
if (empty($course->id)) {
|
||
|
$status = false;
|
||
|
}
|
||
|
//Get scheduled backup preferences
|
||
|
$backup_config = backup_get_config();
|
||
|
|
||
|
//Checks backup_config pairs exist
|
||
|
if ($status) {
|
||
|
if (!isset($backup_config->backup_sche_modules)) {
|
||
|
$backup_config->backup_sche_modules = 1;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_withuserdata)) {
|
||
|
$backup_config->backup_sche_withuserdata = 1;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_users)) {
|
||
|
$backup_config->backup_sche_users = 1;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_logs)) {
|
||
|
$backup_config->backup_sche_logs = 0;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_userfiles)) {
|
||
|
$backup_config->backup_sche_userfiles = 1;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_coursefiles)) {
|
||
|
$backup_config->backup_sche_coursefiles = 1;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_active)) {
|
||
|
$backup_config->backup_sche_active = 0;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_weekdays)) {
|
||
|
$backup_config->backup_sche_weekdays = "0000000";
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_hour)) {
|
||
|
$backup_config->backup_sche_hour = 00;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_minute)) {
|
||
|
$backup_config->backup_sche_minute = 00;
|
||
|
}
|
||
|
if (!isset($backup_config->backup_sche_destination)) {
|
||
|
$backup_config->backup_sche_destination = "";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($status) {
|
||
|
//Checks for the required files/functions to backup every mod
|
||
|
//And check if there is data about it
|
||
|
$count = 0;
|
||
|
if ($allmods = get_records("modules") ) {
|
||
|
foreach ($allmods as $mod) {
|
||
|
$modname = $mod->name;
|
||
|
$modfile = "$CFG->dirroot/mod/$modname/backuplib.php";
|
||
|
$modbackup = $modname."_backup_mods";
|
||
|
$modcheckbackup = $modname."_check_backup_mods";
|
||
|
if (file_exists($modfile)) {
|
||
|
include_once($modfile);
|
||
|
if (function_exists($modbackup) and function_exists($modcheckbackup)) {
|
||
|
$var = "exists_".$modname;
|
||
|
$$var = true;
|
||
|
$count++;
|
||
|
}
|
||
|
}
|
||
|
//Check data
|
||
|
//Check module info
|
||
|
$var = "backup_".$modname;
|
||
|
if (!isset($$var)) {
|
||
|
$$var = $backup_config->backup_sche_modules;
|
||
|
}
|
||
|
//Now stores all the mods preferences into an array into preferences
|
||
|
$preferences->mods[$modname]->backup = $$var;
|
||
|
|
||
|
//Check include user info
|
||
|
$var = "backup_user_info_".$modname;
|
||
|
if (!isset($$var)) {
|
||
|
$$var = $backup_config->backup_sche_withuserdata;
|
||
|
}
|
||
|
//Now stores all the mods preferences into an array into preferences
|
||
|
$preferences->mods[$modname]->userinfo = $$var;
|
||
|
//And the name of the mod
|
||
|
$preferences->mods[$modname]->name = $modname;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Convert other parameters
|
||
|
if ($status) {
|
||
|
$preferences->backup_users = $backup_config->backup_sche_users;
|
||
|
$preferences->backup_logs = $backup_config->backup_sche_logs;
|
||
|
$preferences->backup_user_files = $backup_config->backup_sche_userfiles;
|
||
|
$preferences->backup_course_files = $backup_config->backup_sche_coursefiles;
|
||
|
$preferences->backup_course = $course->id;
|
||
|
$preferences->backup_destination = $backup_config->backup_sche_destination;
|
||
|
}
|
||
|
|
||
|
//Calculate the backup string
|
||
|
if ($status) {
|
||
|
//Take off some characters in the filename !!
|
||
|
$takeoff = array(" ", ":", "/", "\\", "|");
|
||
|
$backup_name = str_replace($takeoff,"_",strtolower(get_string("backupfilename")));
|
||
|
//If non-translated, use "backup"
|
||
|
if (substr($backup_name,0,1) == "[") {
|
||
|
$backup_name = "backup";
|
||
|
}
|
||
|
//Calculate the format string
|
||
|
$backup_name_format = str_replace(" ","_",get_string("backupnameformat"));
|
||
|
//If non-translated, use "%Y%m%d-%H%M"
|
||
|
if (substr($backup_name_format,0,1) == "[") {
|
||
|
$backup_name_format = "%%Y%%m%%d-%%H%%M";
|
||
|
}
|
||
|
$backup_name .= str_replace($takeoff,"_","-".strtolower($course->shortname)."-".userdate(time(),$backup_name_format,99,false).".zip");
|
||
|
$preferences->backup_name = $backup_name;
|
||
|
}
|
||
|
|
||
|
//Calculate the backup unique code to allow simultaneus backups (to define
|
||
|
//the temp-directory name and records in backup temp tables
|
||
|
if ($status) {
|
||
|
$backup_unique_code = time();
|
||
|
$preferences->backup_unique_code = $backup_unique_code;
|
||
|
}
|
||
|
|
||
|
//Calculate necesary info to backup modules
|
||
|
if ($status) {
|
||
|
if ($allmods = get_records("modules") ) {
|
||
|
foreach ($allmods as $mod) {
|
||
|
$modname = $mod->name;
|
||
|
$modbackup = $modname."_backup_mods";
|
||
|
//If exists the lib & function
|
||
|
$var = "exists_".$modname;
|
||
|
if (isset($$var) && $$var) {
|
||
|
//Add hidden fields
|
||
|
$var = "backup_".$modname;
|
||
|
//Only if selected
|
||
|
if ($$var == 1) {
|
||
|
$var = "backup_user_info_".$modname;
|
||
|
//Call the check function to show more info
|
||
|
$modcheckbackup = $modname."_check_backup_mods";
|
||
|
$modcheckbackup($course->id,$$var,$backup_unique_code);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Now calculate the users
|
||
|
if ($status) {
|
||
|
user_check_backup($course->id,$backup_unique_code,$preferences->backup_users);
|
||
|
}
|
||
|
|
||
|
//Now calculate the logs
|
||
|
if ($status) {
|
||
|
if ($preferences->backup_logs) {
|
||
|
log_check_backup($course->id);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Now calculate the userfiles
|
||
|
if ($status) {
|
||
|
if ($preferences->backup_user_files) {
|
||
|
user_files_check_backup($course->id,$preferences->backup_unique_code);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Now calculate the coursefiles
|
||
|
if ($status) {
|
||
|
if ($preferences->backup_course_files) {
|
||
|
course_files_check_backup($course->id,$preferences->backup_unique_code);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//If everything is ok, return calculated preferences
|
||
|
if ($status) {
|
||
|
$status = $preferences;
|
||
|
}
|
||
|
|
||
|
return $status;
|
||
|
}
|
||
|
|
||
|
//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) {
|
||
|
|
||
|
global $CFG;
|
||
|
|
||
|
$status = true;
|
||
|
|
||
|
//Another Info to add
|
||
|
$preferences->moodle_version = $CFG->version;
|
||
|
$preferences->moodle_release = $CFG->release;
|
||
|
$preferences->backup_version = $CFG->backup_version;
|
||
|
$preferences->backup_release = $CFG->backup_release;
|
||
|
|
||
|
//Check for temp and backup and backup_unique_code directory
|
||
|
//Create them as needed
|
||
|
$status = check_and_create_backup_dir($preferences->backup_unique_code);
|
||
|
//Empty dir
|
||
|
if ($status) {
|
||
|
$status = clear_backup_dir($preferences->backup_unique_code);
|
||
|
}
|
||
|
|
||
|
//Delete old_entries from backup tables
|
||
|
if ($status) {
|
||
|
$status = backup_delete_old_data();
|
||
|
}
|
||
|
|
||
|
//Create the moodle.xml file
|
||
|
if ($status) {
|
||
|
//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) {
|
||
|
$status = backup_general_info($backup_file,$preferences);
|
||
|
} else {
|
||
|
$status = false;
|
||
|
}
|
||
|
|
||
|
//Prints course start (tag and general info)
|
||
|
if ($status) {
|
||
|
$status = backup_course_start($backup_file,$preferences);
|
||
|
}
|
||
|
|
||
|
//Section info
|
||
|
if ($status) {
|
||
|
$status = backup_course_sections($backup_file,$preferences);
|
||
|
}
|
||
|
|
||
|
//User info
|
||
|
if ($status) {
|
||
|
$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) {
|
||
|
$status = quiz_backup_question_categories($backup_file,$preferences);
|
||
|
}
|
||
|
|
||
|
//Print logs if selected
|
||
|
if ($status) {
|
||
|
if ($preferences->backup_logs) {
|
||
|
$status = backup_log_info($backup_file,$preferences);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Print scales info
|
||
|
if ($status) {
|
||
|
$status = backup_scales_info($backup_file,$preferences);
|
||
|
}
|
||
|
|
||
|
//Module info, this unique function makes all the work!!
|
||
|
//db export and module fileis copy
|
||
|
if ($status) {
|
||
|
$mods_to_backup = false;
|
||
|
//Check if we have any mod to backup
|
||
|
foreach ($preferences->mods as $module) {
|
||
|
if ($module->backup) {
|
||
|
$mods_to_backup = true;
|
||
|
}
|
||
|
}
|
||
|
//If we have to backup some module
|
||
|
if ($mods_to_backup) {
|
||
|
//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) {
|
||
|
$status = backup_module($backup_file,$preferences,$module->name);
|
||
|
}
|
||
|
}
|
||
|
//Close modules tag
|
||
|
$status = backup_modules_end ($backup_file,$preferences);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Prints course end
|
||
|
if ($status) {
|
||
|
$status = backup_course_end($backup_file,$preferences);
|
||
|
}
|
||
|
|
||
|
//Close the xml file and xml data
|
||
|
if ($backup_file) {
|
||
|
backup_close_xml($backup_file);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Now, if selected, copy user files
|
||
|
if ($status) {
|
||
|
if ($preferences->backup_user_files) {
|
||
|
$status = backup_copy_user_files ($preferences);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Now, if selected, copy course files
|
||
|
if ($status) {
|
||
|
if ($preferences->backup_course_files) {
|
||
|
$status = backup_copy_course_files ($preferences);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Now, zip all the backup directory contents
|
||
|
if ($status) {
|
||
|
$status = backup_zip ($preferences);
|
||
|
}
|
||
|
|
||
|
//Now, copy the zip file to course directory
|
||
|
if ($status) {
|
||
|
$status = copy_zip_to_course_dir ($preferences);
|
||
|
}
|
||
|
|
||
|
//Now, clean temporary data (db and filesystem)
|
||
|
if ($status) {
|
||
|
$status = clean_temp_data ($preferences);
|
||
|
}
|
||
|
|
||
|
return $status;
|
||
|
}
|
||
|
|
||
|
?>
|