<?php //$Id: backup_execute.html,v 1.47 2007/01/20 09:29:19 nfreear Exp $
    //This page prints the backup todo list to see everything

    //Check login   
    require_login();

    if (!empty($course->id)) {
        if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_COURSE, $course->id))) {
            if (empty($to)) {
                error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
            } else {
                if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_COURSE, $to))) {
                    error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
                }
            }
        }
    } else {
        if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
            error("You need to be an admin user to use this page.", "$CFG->wwwroot/login/index.php");
        }
    }


    //Check site
    if (!$site = get_site()) {
        error("Site not found!");
    }

    $preferences = new StdClass;
    backup_fetch_prefs_from_request($preferences,$count,$course);
    //Another Info
    $preferences->moodle_version = $CFG->version;
    $preferences->moodle_release = $CFG->release;
    $preferences->backup_version = $CFG->backup_version;
    $preferences->backup_release = $CFG->backup_release;

    if ($count == 0) {
        notice("No backupable modules are installed!");
    }


    if (empty($to)) {
        //Start the main table
        echo "<table cellpadding=\"5\">";
        
        //Now print the Backup Name tr
        echo "<tr>";
        echo "<td align=\"right\"><b>";
        echo get_string("name").":";
        echo "</b></td><td>";
        echo $preferences->backup_name;
        echo "</td></tr>";
        
        //Start the main tr, where all the backup progress is done
        echo "<tr>";
        echo "<td colspan=\"2\">";
        
        //Start the main ul
        echo "<ul>";
    }
    //Check for temp and backup and backup_unique_code directory
    //Create them as needed
    echo "<li>".get_string("creatingtemporarystructures").'</li>';
    $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
    echo "<li>".get_string("deletingolddata").'</li>';
    $status = backup_delete_old_data();
    if (!$status) {
        error ("An error occurred deleting old backup data");
    }

    //Create the moodle.xml file
    if ($status) {
        echo "<li>".get_string("creatingxmlfile");
        //Begin a new list to xml contents
        echo "<ul>";
        echo "<li>".get_string("writingheader").'</li>';
        //Obtain the xml file (create and open) and print prolog information
        $backup_file = backup_open_xml($preferences->backup_unique_code);
        echo "<li>".get_string("writinggeneralinfo").'</li>';
        //Prints general info about backup to file
        if ($backup_file) {
            if (!$status = backup_general_info($backup_file,$preferences)) {
                notify("An error occurred while backing up general info");
            }
        }
        echo "<li>".get_string("writingcoursedata");

        //Start new ul (for course)
        echo "<ul>";

        echo "<li>".get_string("courseinfo").'</li>';
        //Prints course start (tag and general info)
        if ($status) {
            if (!$status = backup_course_start($backup_file,$preferences)) {
                notify("An error occurred while backing up course start");
            }
        }
        //Metacourse information
        if ($status && $preferences->backup_metacourse) {
            echo "<li>".get_string("metacourse").'</li>';
            if (!$status = backup_course_metacourse($backup_file,$preferences)) {
                notify("An error occurred while backing up metacourse info");
            }
        }
        echo "<li>".get_string("blocks").'</li>';
        //Blocks information
        if ($status) {
            if (!$status = backup_course_blocks($backup_file,$preferences)) {
                notify("An error occurred while backing up course blocks");
            }
        }
        echo "<li>".get_string("sections").'</li>';
        //Section info
        if ($status) {
            if (!$status = backup_course_sections($backup_file,$preferences)) {
                notify("An error occurred while backing up course sections");
            }
        }

        //End course contents (close ul)
        echo "</ul></li>";

        //User info
        if ($status) {
            echo "<li>".get_string("writinguserinfo").'</li>';
            if (!$status = backup_user_info($backup_file,$preferences)) {
                notify("An error occurred while backing up user info");
            }
        }

        //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) {
            echo "<li>".get_string("writingmessagesinfo").'</li>';
            if (!$status = backup_messages($backup_file,$preferences)) {
                notify("An error occurred while backing up messages");
            }
        }

        //If we have selected to backup quizzes, backup categories and
        //questions structure (step 1). See notes on mod/quiz/backuplib.php
        if ($status and !empty($preferences->mods['quiz']->backup)) {
            echo "<li>".get_string("writingcategoriesandquestions").'</li>';
            require_once($CFG->dirroot.'/mod/quiz/backuplib.php');
            if (!$status = backup_question_categories($backup_file,$preferences)) {
                notify("An error occurred while backing up quiz categories");
            }
        }
        
        //Print logs if selected
        if ($status) {
            if ($preferences->backup_logs) {  
                echo "<li>".get_string("writingloginfo").'</li>';
                if (!$status = backup_log_info($backup_file,$preferences)) {
                    notify("An error occurred while backing up log info");
                }
            }
        }

        //Print scales info
        if ($status) {
            echo "<li>".get_string("writingscalesinfo").'</li>';
            if (!$status = backup_scales_info($backup_file,$preferences)) {
                notify("An error occurred while backing up scales");
            }
        }

        //Print groupings info
        if ($status) {
            echo "<li>".get_string("writinggroupingsinfo").'</li>';
            if (!$status = backup_groupings_info($backup_file,$preferences)) {
                notify("An error occurred while backing up groupings");
            }
        }

        //Print groups info
        if ($status) {
            echo "<li>".get_string("writinggroupsinfo").'</li>';
            if (!$status = backup_groups_info($backup_file,$preferences)) {
                notify("An error occurred while backing up groups");
            }
        }

        //Print events info
        if ($status) { 
            echo "<li>".get_string("writingeventsinfo").'</li>';
            if (!$status = backup_events_info($backup_file,$preferences)) {
                notify("An error occurred while backing up events");
            }
        }

        //Print gradebook info
        if ($status) { 
            echo "<li>".get_string("writinggradebookinfo").'</li>';
            if (!$status = backup_gradebook_info($backup_file,$preferences)) {
                notify("An error occurred while backing up gradebook");
            }
        }

        //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) {
                echo "<li>".get_string("writingmoduleinfo");
                //Start modules tag
                if (!$status = backup_modules_start ($backup_file,$preferences)) {
                    notify("An error occurred while backing up module info");
                }
                //Open ul for module list
                echo "<ul>";
                //Iterate over modules and call backup
                foreach ($preferences->mods as $module) {
                    if ($module->backup and $status) {
                        echo "<li>".get_string("modulenameplural",$module->name).'</li>';
                        if (!$status = backup_module($backup_file,$preferences,$module->name)) {
                            notify("An error occurred while backing up '$module->name'");
                        }
                    }
                }
                //Close ul for module list
                echo "</ul></li>";
                //Close modules tag
                if (!$status = backup_modules_end ($backup_file,$preferences)) {
                    notify("An error occurred while finishing the module backups");
                }
            }
        }

        //Backup course format data, if any. 
        echo '<li>'.get_string("courseformatdata").'</li>';
        if($status) {
                if (!$status = backup_format_data($backup_file,$preferences)) {
                        notify("An error occurred while backing up the course format data");
                }
        }

        //Prints course end 
        if ($status) {
            if (!$status = backup_course_end($backup_file,$preferences)) {
                notify("An error occurred while closing the course backup");
            }
        }
        //Close the xml file and xml data
        if ($backup_file) {
            backup_close_xml($backup_file);
        }

        //End xml contents (close ul)
        echo "</ul></li>";
    }
    
    //Now, if selected, copy user files
    if ($status) {
        if ($preferences->backup_user_files) {
            echo "<li>".get_string("copyinguserfiles").'</li>';
            if (!$status = backup_copy_user_files ($preferences)) {
                notify("An error occurred while copying user files");
            }
        }
    }

    //Now, if selected, copy course files
    if ($status) {
        if ($preferences->backup_course_files) {
            echo "<li>".get_string("copyingcoursefiles").'</li>';
            if (!$status = backup_copy_course_files ($preferences)) {
                notify("An error occurred while copying course files");
            }
        }
    }

    //Now, zip all the backup directory contents
    if ($status) {
        echo "<li>".get_string("zippingbackup").'</li>';
        if (!$status = backup_zip ($preferences)) {
            notify("An error occurred while zipping the backup");
        }
    }

    //Now, copy the zip file to course directory
    if ($status) {
        echo "<li>".get_string("copyingzipfile").'</li>';
        if (!$status = copy_zip_to_course_dir ($preferences)) {
            notify("An error occurred while copying the zip file to the course directory");
        }
    }

    //Now, clean temporary data (db and filesystem)
    if ($status) {
        echo "<li>".get_string("cleaningtempdata").'</li>';
        if (!$status = clean_temp_data ($preferences)) {
            notify("An error occurred while cleaning up temporary data");
        }
    }

    //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>";
    
    if (!$status) {
        error ("The backup did not complete successfully", 
               "$CFG->wwwroot/course/view.php?id=$course->id");
    }

    if (empty($to)) {
        //Print final message
        print_simple_box(get_string("backupfinished"),"center");
        print_continue("$CFG->wwwroot/files/index.php?id=".$preferences->backup_course."&amp;wdir=/backupdata");    
    } else {
        print_simple_box(get_string('importdataexported'),"CENTER");
        if (!empty($preferences->backup_destination)) {
            $filename = $preferences->backup_destination."/".$preferences->backup_name;
        } else {
            $filename = $preferences->backup_course."/backupdata/".$preferences->backup_name;
        }
        error_log($filename);
        $SESSION->import_preferences = $preferences;
        print_continue($CFG->wwwroot.'/course/import/activities/index.php?id='.$to.'&fromcourse='.$id.'&filename='.$filename);
    }

    $SESSION->backupprefs[$course->id] = null; // unset it so we're clear next time.
?>
