Example #1
0
function schedule_inc_backup_course_execute($preferences, $starttime = 0)
{
    global $CFG;
    $status = true;
    //Some parts of the backup doesn't know about $preferences, so we
    //put a copy of it inside that CFG (always global) to be able to
    //use it. Then, when needed I search for preferences inside CFG
    //Used to avoid some problems in full_tag() when preferences isn't
    //set globally (i.e. in scheduled backups)
    $CFG->backup_preferences = $preferences;
    //Check for temp and backup and backup_unique_code directory
    //Create them as needed
    backup_add_to_log($starttime, $preferences->backup_course, "    checking temp structures", 'incrementalbackup');
    $status = check_and_create_backup_dir($preferences->backup_unique_code);
    //Empty backup dir
    if ($status) {
        backup_add_to_log($starttime, $preferences->backup_course, "    cleaning current dir", 'incrementalbackup');
        $status = clear_backup_dir($preferences->backup_unique_code);
    }
    //Create the moodle.xml file
    if ($status) {
        backup_add_to_log($starttime, $preferences->backup_course, "    creating backup file", 'incrementalbackup');
        //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) {
            backup_add_to_log($starttime, $preferences->backup_course, "      general info", 'incrementalbackup');
            $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);
        }
        //Metacourse information
        if ($status && $preferences->backup_metacourse) {
            backup_add_to_log($starttime, $preferences->backup_course, "      metacourse info", 'incrementalbackup');
            $status = backup_course_metacourse($backup_file, $preferences);
        }
        //Block info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      blocks info", 'incrementalbackup');
            $status = backup_course_blocks($backup_file, $preferences);
        }
        //Section info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      sections info", 'incrementalbackup');
            $status = backup_course_sections($backup_file, $preferences);
        }
        //User info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      user info", 'incrementalbackup');
            $status = backup_user_info($backup_file, $preferences);
        }
        //If we have selected to backup messages and we are
        //doing a SITE backup, let's do it
        if ($status && $preferences->backup_messages && $preferences->backup_course == SITEID) {
            backup_add_to_log($starttime, $preferences->backup_course, "      messages", 'incrementalbackup');
            if (!($status = backup_messages($backup_file, $preferences))) {
                notify("An error occurred while backing up messages");
            }
        }
        //If we have selected to backup blogs and we are
        //doing a SITE backup, let's do it
        if ($status && isset($preferences->backup_blogs) && isset($preferences->backup_course) && $preferences->backup_blogs && $preferences->backup_course == SITEID) {
            schedule_backup_log($starttime, $preferences->backup_course, "      blogs", 'incrementalbackup');
            $status = backup_blogs($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 isset($preferences->mods['quiz']->backup)) {
            backup_add_to_log($starttime, $preferences->backup_course, "      categories & questions", 'incrementalbackup');
            $status = backup_question_categories($backup_file, $preferences);
        }
        //Print logs if selected
        if ($status) {
            if ($preferences->backup_logs) {
                backup_add_to_log($starttime, $preferences->backup_course, "      logs", 'incrementalbackup');
                $status = backup_log_info($backup_file, $preferences);
            }
        }
        //Print scales info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      scales", 'incrementalbackup');
            $status = backup_scales_info($backup_file, $preferences);
        }
        //Print groups info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      groups", 'incrementalbackup');
            $status = backup_groups_info($backup_file, $preferences);
        }
        //Print groupings info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      groupings", 'incrementalbackup');
            $status = backup_groupings_info($backup_file, $preferences);
        }
        //Print groupings_groups info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      groupings_groups", 'incrementalbackup');
            $status = backup_groupings_groups_info($backup_file, $preferences);
        }
        //Print events info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      events", 'incrementalbackup');
            $status = backup_events_info($backup_file, $preferences);
        }
        //Print gradebook info
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      gradebook", 'incrementalbackup');
            $status = backup_gradebook_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
            if (!empty($preferences->mods)) {
                foreach ($preferences->mods as $module) {
                    if ($module->backup) {
                        $mods_to_backup = true;
                    }
                }
            }
            //If we have to backup some module
            if ($mods_to_backup) {
                backup_add_to_log($starttime, $preferences->backup_course, "      modules", 'incrementalbackup');
                //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) {
                        backup_add_to_log($starttime, $preferences->backup_course, "        {$module->name}", 'incrementalbackup');
                        $status = backup_module($backup_file, $preferences, $module->name);
                    }
                }
                //Close modules tag
                $status = backup_modules_end($backup_file, $preferences);
            }
        }
        //Backup course format data, if any.
        if ($status) {
            backup_add_to_log($starttime, $preferences->backup_course, "      course format data", 'incrementalbackup');
            $status = backup_format_data($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) {
            backup_add_to_log($starttime, $preferences->backup_course, "    copying user files", 'incrementalbackup');
            $status = backup_copy_user_files($preferences);
        }
    }
    //Now, if selected, copy course files
    if ($status) {
        if ($preferences->backup_course_files) {
            backup_add_to_log($starttime, $preferences->backup_course, "    copying course files", 'incrementalbackup');
            $status = backup_copy_course_files($preferences);
        }
    }
    //Now, if selected, copy site files
    if ($status) {
        if ($preferences->backup_site_files) {
            backup_add_to_log($starttime, $preferences->backup_course, "    copying site files", 'incrementalbackup');
            $status = backup_copy_site_files($preferences);
        }
    }
    //Now, zip all the backup directory contents
    if ($status) {
        backup_add_to_log($starttime, $preferences->backup_course, "    zipping files", 'incrementalbackup');
        $status = backup_zip($preferences);
    }
    //Now, copy the zip file to course directory
    if ($status) {
        backup_add_to_log($starttime, $preferences->backup_course, "    copying backup", 'incrementalbackup');
        $status = copy_zip_to_course_dir($preferences);
    }
    //Now, clean temporary data (db and filesystem)
    if ($status) {
        backup_add_to_log($starttime, $preferences->backup_course, "    cleaning temp data", 'incrementalbackup');
        $status = clean_temp_data($preferences);
    }
    //Unset CFG->backup_preferences only needed in scheduled backups
    unset($CFG->backup_preferences);
    return $status;
}
Example #2
0
function schedule_backup_course_delete_old_files($preferences, $starttime = 0)
{
    global $CFG;
    $status = true;
    //Calculate the directory to check
    $dirtocheck = "";
    //if $preferences->backup_destination isn't empty, then check that directory
    if (!empty($preferences->backup_destination)) {
        $dirtocheck = $preferences->backup_destination;
        //else calculate standard backup directory location
    } else {
        $dirtocheck = $CFG->dataroot . "/" . $preferences->backup_course . "/backupdata";
    }
    schedule_backup_log($starttime, $preferences->backup_course, "    checking {$dirtocheck}");
    if ($CFG->debug > 7) {
        mtrace("            Keeping backup files in {$dirtocheck}");
    }
    //Get all the files in $dirtocheck
    $files = get_directory_list($dirtocheck, "", false);
    //Get all matching files ($preferences->keep_name) from $files
    $matchingfiles = array();
    foreach ($files as $file) {
        if (substr($file, 0, strlen($preferences->keep_name)) == $preferences->keep_name) {
            $modifieddate = filemtime($dirtocheck . "/" . $file);
            $matchingfiles[$modifieddate] = $file;
        }
    }
    //Sort by key (modified date) to get the oldest first (instead of doing that by name
    //because it could give us problems in some languages with different format names).
    ksort($matchingfiles);
    //Count matching files
    $countmatching = count($matchingfiles);
    schedule_backup_log($starttime, $preferences->backup_course, "        found {$countmatching} backup files");
    mtrace("                found {$countmatching} backup files");
    if ($preferences->backup_keep < $countmatching) {
        schedule_backup_log($starttime, $preferences->backup_course, "        keep limit ({$preferences->backup_keep}) reached. Deleting old files");
        mtrace("                keep limit ({$preferences->backup_keep}) reached. Deleting old files");
        $filestodelete = $countmatching - $preferences->backup_keep;
        $filesdeleted = 0;
        foreach ($matchingfiles as $matchfile) {
            if ($filesdeleted < $filestodelete) {
                schedule_backup_log($starttime, $preferences->backup_course, "        {$matchfile} deleted");
                mtrace("                {$matchfile} deleted");
                $filetodelete = $dirtocheck . "/" . $matchfile;
                unlink($filetodelete);
                $filesdeleted++;
            }
        }
    }
    return $status;
}