From 1b225eaf65440bc56ff3912a8cdaa26555462e7a Mon Sep 17 00:00:00 2001 From: stronk7 Date: Mon, 1 Dec 2003 22:00:00 +0000 Subject: [PATCH] Wow !! Now backup of one course is ENTIRELY encapsulated inside backup_scheduled.php. And a backup of EVERY course can be executed invoking try.php. Backing up to a custom directory is working too !! They are preliminary versions, of course, but seem to work fine :-) Now I'm going to make all the necessay structures to support the cron system and to be able to inform the admin about every scheduled backup process. Ciao :-) --- backup/backup_scheduled.php | 328 ++++++++++++++++++++++++++++++++++++ backup/try.php | 42 +++++ 2 files changed, 370 insertions(+) create mode 100644 backup/backup_scheduled.php create mode 100644 backup/try.php diff --git a/backup/backup_scheduled.php b/backup/backup_scheduled.php new file mode 100644 index 0000000000..47bf7469a1 --- /dev/null +++ b/backup/backup_scheduled.php @@ -0,0 +1,328 @@ +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; +} + +?> diff --git a/backup/try.php b/backup/try.php new file mode 100644 index 0000000000..0c192679c3 --- /dev/null +++ b/backup/try.php @@ -0,0 +1,42 @@ +wwwroot/login/index.php"); + } + + //Check site + if (!$site = get_site()) { + error("Site not found!"); + } + + //Check necessary functions exists. Thanks to gregb@crowncollege.edu + backup_required_functions(); + + //Adjust some php variables to the execution of this script + ini_set("max_execution_time","3000"); + ini_set("memory_limit","56M"); + + echo "
\n";
+
+    $status = true;
+
+    $courses = get_records("course");
+    foreach ($courses as $course) {
+        echo "Start course ".$course->fullname;
+        $preferences = schedule_backup_course_configure($course);
+        if ($preferences && $status) {
+            $status = schedule_backup_course_execute($preferences);
+        }
+        if ($status && $preferences) {
+            echo "End course ".$course->fullname." OK\n\n";
+        } else {
+            echo "End course ".$course->fullname." FAIL\n\n";
+        }
+    }
+?>
-- 
2.39.5