if (!isset($$var)) {
$$var = 1;
}
+ //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 = 1;
}
+ //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;
}
}
if (!isset($backup_users)) {
$backup_users = 1;
}
+ $preferences->backup_users = $backup_users;
if (!isset($backup_logs)) {
$backup_logs = 1;
}
+ $preferences->backup_logs = $backup_logs;
if (!isset($backup_user_files)) {
$backup_user_files = 1;
}
+ $preferences->backup_user_files = $backup_user_files;
if (!isset($backup_course_files)) {
$backup_course_files = 2;
}
+ $preferences->backup_course_files = $backup_course_files;
if (!isset($id)) {
error ("Course not specified");
}
+ $preferences->backup_course = $id;
if (!isset($backup_name)) {
error ("Backup name not specified");
}
+ $preferences->backup_name = $backup_name;
if (!isset($backup_unique_code)) {
error ("Backup unique code not specified");
}
+ $preferences->backup_unique_code = $backup_unique_code;
+
+ //Another Info
+ $preferences->moodle_version = $version;
+ $preferences->moodle_release = $release;
+ $preferences->backup_version = $backup_version;
+ $preferences->backup_release = $backup_release;
if ($count == 0) {
notice("No backupable modules are installed!");
//Start the main tr, where all the backup progress is done
echo "<tr>";
echo "<td colspan=\"2\">";
+
+ //Start the main ul
+ echo "<ul>";
//Delete old_entries from backup tables
echo "<li>Deteting old data";
if ($status) {
$status = clear_backup_dir($backup_unique_code);
}
+
+ //Create the moodle.xml file
+ if ($status) {
+ echo "<li>Creating xml file";
+ //Begin a new list to xml contents
+ echo "<ul>";
+ echo "<li>Writing header";
+ //Obtain the xml file (create and open) and print prolog information
+ $backup_file = backup_open_xml($backup_unique_code);
+ echo "<li>Writing info";
+ //Prints general info about backup to file
+ if ($backup_file) {
+ $status = backup_general_info($backup_file,$preferences);
+ }
+
+
+ //Close the xml file and xml data
+ if ($backup_file) {
+ $status = backup_close_xml($backup_file);
+ }
+
+ //End xml contents (close ul)
+ echo "</ul>";
+ }
+
if (!$status) {
error ("An error has ocurred");
}
+ //Ends th main ul
+ echo "</ul>";
//End the main tr, where all the backup is done
+ echo "</td></tr>";
//End the main table
echo "</table>";
global $CFG;
//Change this if you want !!
- $days = 2;
+ $days = 1;
//End change this
$seconds = $days * 24 * 60 * 60;
$delete_from = time()-$seconds;
$status = execute_sql("DELETE FROM {$CFG->prefix}backup_files
WHERE backup_code < '$delete_from'",false);
}
+ //Now, delete old directory (if exists)
+ if ($status) {
+ $status = backup_delete_old_dirs($delete_from);
+ }
return($status);
}
+ //Function to delete dirs/files into temp/backup directory
+ //older than $delete_from
+ function backup_delete_old_dirs($delete_from) {
+
+ global $CFG;
+
+ $status = true;
+ $list = get_directory_list($CFG->dataroot."/temp/backup", "", false);
+ foreach ($list as $file) {
+ $file_path = $CFG->dataroot."/temp/backup/".$file;
+ $moddate = filemtime($file_path);
+ if ($status and $moddate < $delete_from) {
+ $status = delete_dir_contents($file_path);
+ //There is nothing, delete the directory itself
+ if ($status) {
+ $status = rmdir($file_path);
+ }
+ }
+ }
+
+ return $status;
+ }
+
//Function to check if a directory exists
//and, optionally, create it
function check_dir_exists($dir,$create=false) {
if (filetype($fullfile) == "dir") {
delete_dir_contents($fullfile);
if (!rmdir($fullfile)) {
- $status = false;;
+ $status = false;
}
} else {
if (!unlink("$fullfile")) {
- $status = false;;
+ $status = false;
}
}
}
return $status;
}
+
+ //Function to create, open and write header of the xml file
+ function backup_open_xml($backup_unique_code) {
+
+ global $CFG;
+
+ $status = true;
+
+ //Open for writing
+ $file = $CFG->dataroot."/temp/backup/".$backup_unique_code."/moodle.xml";
+ $backup_file = fopen($file,"w");
+ //Writes the header
+ $status = fwrite ($backup_file,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ if ($status) {
+ $status = fwrite ($backup_file,start_tag("MOODLE_BACKUP",0,true));
+ }
+ if ($status) {
+ return $backup_file;
+ } else {
+ return false;
+ }
+ }
+
+ //Close the file
+ function backup_close_xml($backup_file) {
+ $status = fwrite ($backup_file,end_tag("MOODLE_BACKUP",0,true));
+ return fclose($backup_file);
+ }
+
+ //Return the xml start tag
+ function start_tag($tag,$level=0,$endline=false) {
+ if ($endline) {
+ $endchar = "\n";
+ } else {
+ $endchar = "";
+ }
+ return str_repeat(" ",$level*2)."<".strtoupper($tag).">".$endchar;
+ }
+
+ //Return the xml end tag
+ function end_tag($tag,$level=0,$endline=true) {
+ if ($endline) {
+ $endchar = "\n";
+ } else {
+ $endchar = "";
+ }
+ return str_repeat(" ",$level*2)."</".strtoupper($tag).">".$endchar;
+ }
+
+ //Return the start tag, the contents and the end tag
+ function full_tag($tag,$level=0,$endline=true,$content,$to_utf=true) {
+ $st = start_tag($tag,$level,$endline);
+ $co="";
+ if ($to_utf) {
+ $co = $content;
+ } else {
+ $co = $content;
+ }
+ $et = end_tag($tag,0,true);
+ return $st.$co.$et;
+ }
+
+ //Prints General info about the course
+ //name, moodle_version (internal and release), backup_version, date, info in file...
+ function backup_general_info ($bf,$preferences) {
+ global $CFG;
+
+ fwrite ($bf,start_tag("INFO",1,true));
+
+ //The name of the backup
+ fwrite ($bf,full_tag("NAME",2,false,$preferences->backup_name));
+ //The moodle_version
+ fwrite ($bf,full_tag("MOODLE_VERSION",2,false,$preferences->moodle_version));
+ fwrite ($bf,full_tag("MOODLE_RELEASE",2,false,$preferences->moodle_release));
+ //The backup_version
+ fwrite ($bf,full_tag("BACKUP_VERSION",2,false,$preferences->backup_version));
+ fwrite ($bf,full_tag("BACKUP_RELEASE",2,false,$preferences->backup_release));
+ //The date
+ fwrite ($bf,full_tag("DATE",2,false,$preferences->backup_unique_code));
+ //Te includes tag
+ fwrite ($bf,start_tag("DETAILS",2,true));
+ //Now, go to mod element of preferences to print its status
+ foreach ($preferences->mods as $element) {
+ //Calculate info
+ $included = "false";
+ $userinfo = "false";
+ if ($element->backup) {
+ $included = "true";
+ if ($element->userinfo) {
+ $userinfo = "true";
+ }
+ }
+ //Prints the mod start
+ fwrite ($bf,start_tag("MOD",3,true));
+ fwrite ($bf,full_tag("NAME",4,false,$element->name));
+ fwrite ($bf,full_tag("INCLUDED",4,false,$included));
+ fwrite ($bf,full_tag("USERINFO",4,false,$userinfo));
+
+ //Print the end
+ fwrite ($bf,end_tag("MOD",3,true));
+ }
+ //The user in backup
+ if ($preferences->backup_users == 1) {
+ fwrite ($bf,full_tag("USERS",3,false,"COURSE"));
+ } else {
+ fwrite ($bf,full_tag("USERS",3,false,"ALL"));
+ }
+ //The logs in backup
+ if ($preferences->backup_logs == 1) {
+ fwrite ($bf,full_tag("LOGS",3,false,"true"));
+ } else {
+ fwrite ($bf,full_tag("LOGS",3,false,"false"));
+ }
+ //The user files
+ if ($preferences->backup_user_files == 1) {
+ fwrite ($bf,full_tag("USERFILES",3,false,"true"));
+ } else {
+ fwrite ($bf,full_tag("USERFILES",3,false,"false"));
+ }
+ //The course files
+ if ($preferences->backup_course_files == 1) {
+ fwrite ($bf,full_tag("COURSEFILES",3,false,"true"));
+ } else {
+ fwrite ($bf,full_tag("COURSEFILES",3,false,"false"));
+ }
+
+ fwrite ($bf,end_tag("DETAILS",2,true));
+
+
+ fwrite ($bf,end_tag("INFO",1,true));
+ }
?>