mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
761 lines
32 KiB
HTML
761 lines
32 KiB
HTML
<?php //$Id$
|
|
//This page prints the restore form to select everything yo want
|
|
//to restore. Form is dinamically buid, depending of "info" object
|
|
//that contains the backup contents and depending of every mod
|
|
//capabilities.
|
|
|
|
//Get objects from session
|
|
if (!($info = $SESSION->info)) {
|
|
error( 'info object missing from session' );
|
|
}
|
|
if (!($course_header = $SESSION->course_header)) {
|
|
error( 'course_header object missing from session' );
|
|
}
|
|
|
|
$restore_gradebook_history = optional_param('restore_gradebook_history', 0, PARAM_INT);
|
|
|
|
//Check that we have all we need
|
|
//backup_unique_code
|
|
$backup_unique_code = required_param( 'backup_unique_code' );
|
|
//file
|
|
$file = required_param( 'file' );
|
|
|
|
//Check login
|
|
require_login();
|
|
|
|
//Check admin
|
|
if (!empty($id)) {
|
|
if (!has_capability('moodle/site:restore', get_context_instance(CONTEXT_COURSE, $id))) {
|
|
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:restore', get_context_instance(CONTEXT_SYSTEM))) {
|
|
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!");
|
|
}
|
|
|
|
//Checks for the required files/functions to restore every mod
|
|
$count = 0;
|
|
if ($allmods = get_records("modules") ) {
|
|
foreach ($allmods as $mod) {
|
|
$modname = $mod->name;
|
|
$modfile = "$CFG->dirroot/mod/$modname/restorelib.php";
|
|
$modrestore = $modname."_restore_mods";
|
|
if (file_exists($modfile)) {
|
|
include_once($modfile);
|
|
if (function_exists($modrestore)) {
|
|
$var = "exists_".$modname;
|
|
$$var = true;
|
|
$count++;
|
|
}
|
|
}
|
|
//Check data
|
|
//Check module info
|
|
$var = "restore_".$modname;
|
|
if (!isset($$var)) {
|
|
$$var = 1;
|
|
}
|
|
//Check include user info
|
|
$var = "restore_user_info_".$modname;
|
|
if (!isset($$var)) {
|
|
$$var = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Check other parameters
|
|
if (!isset($restore_metacourse)) {
|
|
$restore_metacourse = 1;
|
|
}
|
|
|
|
if (!isset($restore_users)) {
|
|
$restore_users = 1;
|
|
}
|
|
|
|
if (!isset($restore_groups)) {
|
|
if (empty($CFG->enablegroupings)) {
|
|
$restore_groups = RESTORE_GROUPS_ONLY;
|
|
} else {
|
|
$restore_groups = RESTORE_GROUPS_GROUPINGS;
|
|
}
|
|
}
|
|
|
|
if (!isset($restore_logs)) {
|
|
$restore_logs = 1;
|
|
}
|
|
|
|
if (!isset($restore_user_files)) {
|
|
$restore_user_files = 1;
|
|
}
|
|
|
|
if (!isset($restore_course_files)) {
|
|
$restore_course_files = 1;
|
|
}
|
|
|
|
if (!isset($restore_site_files)) {
|
|
$restore_site_files = 1;
|
|
}
|
|
|
|
if (!isset($restore_messages)) {
|
|
$restore_messages = 1;
|
|
}
|
|
|
|
if (!isset($restore_restoreto)) {
|
|
if (!user_can_create_courses()) {
|
|
$restore_restoreto = 1;
|
|
} else {
|
|
$restore_restoreto = 2;
|
|
}
|
|
}
|
|
|
|
if (!isset($course_header->category->id)) {
|
|
$course_header->category->id = 0;
|
|
}
|
|
|
|
if(!isset($form1->startdate)) {
|
|
$form1->startdate = $course_header->course_startdate; //$course_header->course_startdate;
|
|
}
|
|
|
|
if (empty($form1->shortname)) {
|
|
$form1->shortname = $course_header->course_shortname; //'_shortname'; //$course_header->course_shortname;
|
|
}
|
|
|
|
if (empty($form1->fullname)) {
|
|
$form1->fullname = $course_header->course_fullname; // '_fullname'; //$course_header->course_fullname;
|
|
}
|
|
|
|
if ($count == 0) {
|
|
notice("No restorable modules are installed!");
|
|
}
|
|
|
|
?>
|
|
|
|
<script type="text/javascript">
|
|
<!--
|
|
function selectItemInMenuByName(formId, menuName, selectIndex ) {
|
|
myForm = document.getElementById(formId)
|
|
for (i=0,n=myForm.elements.length;i<n;i++) {
|
|
myLen = menuName.length;
|
|
myName = myForm.elements[i].name;
|
|
myType = myForm.elements[i].type;
|
|
if (myName.substring(0,myLen) == menuName && myType == "select-one") {
|
|
myForm.elements[i].options[selectIndex].selected = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
function selectItemInRadioByName(formId, radioName, selectIndex ) {
|
|
myForm = document.getElementById(formId)
|
|
for (i=0,n=myForm.elements.length;i<n;i++) {
|
|
myLen = radioName.length;
|
|
myName = myForm.elements[i].name;
|
|
myType = myForm.elements[i].type;
|
|
if (myName.substring(0,myLen) == radioName && myType == "radio") {
|
|
myRadioGroup = myForm.elements[myName];
|
|
myRadioGroup[selectIndex].checked = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
function selectItemInCheckboxByName(formId, checkName, checked ) {
|
|
myForm = document.getElementById(formId)
|
|
for (i=0,n=myForm.elements.length;i<n;i++) {
|
|
myLen = checkName.length;
|
|
myName = myForm.elements[i].name;
|
|
myType = myForm.elements[i].type;
|
|
if (myName.substring(0,myLen) == checkName && myType == "checkbox") {
|
|
myForm.elements[i].checked = checked;
|
|
}
|
|
}
|
|
}
|
|
-->
|
|
</script>
|
|
|
|
<form id="form1" method="post" action="restore.php">
|
|
<div>
|
|
<table cellpadding="5" class="boxaligncenter">
|
|
<?php
|
|
|
|
//First, course destination
|
|
//Print the full tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\"><b>";
|
|
echo '<label for="menurestore_restoreto">'.get_string ('restoreto').'</label>';
|
|
echo "</b>";
|
|
echo "</td><td colspan=\"3\">";
|
|
|
|
|
|
// permission should have been checked already
|
|
|
|
/**
|
|
* if user has manageactivities in any course, we show
|
|
* existingcoursedeleting
|
|
* existingcourseadding
|
|
* else we show
|
|
* currentcoursedeleting
|
|
* currentcourse
|
|
* if user has course:create in any category, we show
|
|
* newcourse
|
|
*/
|
|
|
|
// Non-cached - get accessinfo
|
|
if (isset($USER->access)) {
|
|
$accessinfo = $USER->access;
|
|
} else {
|
|
$accessinfo = get_user_access_sitewide($USER->id);
|
|
}
|
|
|
|
$mycourses = get_user_courses_bycap($USER->id, 'moodle/site:restore', $accessinfo, true);
|
|
// if the user can manage 2 or more courses,
|
|
// or if the only course the user can manage is not the current course
|
|
// we show options for existing courses
|
|
|
|
if (count($mycourses) > 1) {
|
|
// if user can manage more than 1 course, or if user can restore to a single different course
|
|
$restore_restoreto_options[0] = get_string("existingcoursedeleting");
|
|
$restore_restoreto_options[1] = get_string("existingcourseadding");
|
|
// else if the user can write to current course
|
|
} else if (has_capability('moodle/site:restore', get_context_instance(CONTEXT_COURSE, $id))){
|
|
$restore_restoreto_options[0] = get_string("currentcoursedeleting");
|
|
$restore_restoreto_options[1] = get_string("currentcourseadding");
|
|
}
|
|
|
|
// if user can create any course at all, give the option
|
|
if (user_can_create_courses()) {
|
|
$restore_restoreto_options[2] = get_string("newcourse");
|
|
}
|
|
|
|
/// Acummulator for hidden options and proper XHTML output
|
|
$hidden_options = '';
|
|
|
|
choose_from_menu($restore_restoreto_options, "restore_restoreto", $restore_restoreto, "");
|
|
echo "</td></tr>";
|
|
if (user_can_create_courses()) { //display these fields conditionally
|
|
|
|
// find the list of cates user can edit
|
|
echo "<tr valign=\"top\" >";
|
|
echo "<td align=\"right\">";
|
|
echo '<label for="menurestore_restorecatto">'.get_string ('category').'</label>';
|
|
echo "</td>";
|
|
echo "<td>";
|
|
make_categories_list($categories, $parents);
|
|
choose_from_menu($categories, "restore_restorecatto", $course_header->category->id, "");
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr valign=\"top\" >";
|
|
echo "<td align=\"right\">";
|
|
echo '<label for="shortnamefield">'.get_string ('shortname').'</label>';
|
|
echo "</td>";
|
|
echo "<td><input type=\"text\" id=\"shortnamefield\" name=\"shortname\" maxlength=\"100\" size=\"20\" value=\"$form1->shortname\" alt=\"".get_string("shortname")."\" />" ;
|
|
helpbutton("courseshortname", get_string("shortname")) ;
|
|
if (isset($err["shortname"])) formerr($err["shortname"]);
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
echo "<tr valign=\"top\" >";
|
|
echo "<td align=\"right\">";
|
|
echo '<label for="fullnamefield">'.get_string ('fullname').'</label>';
|
|
echo "</td>";
|
|
echo "<td><input type=\"text\" id=\"fullnamefield\" name=\"fullname\" maxlength=\"254\" size=\"50\" value=\"$form1->fullname\" alt=\" ".get_string("fullname")."\" />" ;
|
|
helpbutton("coursefullname", get_string("fullname")) ;
|
|
if (isset($err["fullname"])) formerr($err["fullname"]);
|
|
echo"</td></tr>";
|
|
echo "<tr valign=\"top\"> ";
|
|
echo "<td align=\"right\"> ";
|
|
print_string("startdate");
|
|
echo "</td><td>";
|
|
/// Show the roll dates option only if the backup course has a start date
|
|
/// (some formats like main page, social..., haven't it and rolling dates
|
|
/// from 0 produces crazy dates. MDL-10125
|
|
if ($form1->startdate) {
|
|
print_date_selector("startday", "startmonth", "startyear", $form1->startdate);
|
|
} else {
|
|
print_string('notavailable');
|
|
echo '<input type="hidden" name="startyear" value="0" />';
|
|
echo '<input type="hidden" name="startmonth" value="0" />';
|
|
echo '<input type="hidden" name="startday" value="0" />';
|
|
}
|
|
helpbutton("coursestartdate", get_string("startdate"));
|
|
echo "</td></tr>";
|
|
}
|
|
//Line
|
|
echo "<tr><td colspan=\"4\"><hr /></td></tr>";
|
|
//Now, check modules and info and show posibilities
|
|
if ($allmods = get_records("modules") ) {
|
|
//Print option to select/deselect everything with 1 click.
|
|
echo "<tr>";
|
|
echo "<td align=\"right\">";
|
|
echo '<b>'.get_string("include")."</b>";
|
|
echo "</td><td>";
|
|
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_', true);\">".
|
|
get_string("all")."</a>/";
|
|
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_', false);\">".
|
|
get_string("none")."</a>";
|
|
echo "</td>";
|
|
echo "<td align=\"right\">";
|
|
echo '<b> </b>';
|
|
echo "</td><td>";
|
|
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_user_info_', true);\">".
|
|
get_string("all")."</a>/";
|
|
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_user_info_', false);\">".
|
|
get_string("none")."</a>";
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
echo "<tr><td colspan=\"4\"><hr /></td></tr>";
|
|
$currentrow = 0;
|
|
$nonrestmod = '';
|
|
foreach ($allmods as $mod) {
|
|
$modname = $mod->name;
|
|
$modrestore = $modname."_restore_mods";
|
|
//If exists the lib & function
|
|
$exist = "exists_".$modname;
|
|
$restore_var = "restore_".$modname;
|
|
$user_info_var = "restore_user_info_".$modname;
|
|
if (isset($$exist)) {
|
|
if ($$exist) {
|
|
//Now check that we have that module info in the backup file
|
|
if (isset($info->mods[$modname]) && $info->mods[$modname]->backup == "true") {
|
|
//Print the full tr
|
|
echo "<tr class=\"r".$currentrow."\">";
|
|
echo "<td align=\"right\"> ";
|
|
echo "</td><td>";
|
|
$restore_options[1] = get_string("yes");
|
|
$restore_options[0] = get_string("no");
|
|
//choose_from_menu($restore_options, $restore_var, $$restore_var, "");
|
|
//choose_from_radio($restore_options, $restore_var, $$restore_var);
|
|
//Print the checkbox
|
|
print_checkbox($restore_var, $$restore_var, $$restore_var, get_string("modulenameplural",$modname),'','selectItemInCheckboxByName(\'form1\',\'restore_'.$modname.'\',this.checked)');
|
|
//If backup contains user data, then show menu, else fix it to
|
|
//without user data
|
|
echo "</td><td align=\"right\"> ";
|
|
echo "</td><td>";
|
|
if ($info->mods[$modname]->userinfo == "true") {
|
|
$restore_user_options[1] = get_string("yes");
|
|
$restore_user_options[0] = get_string("no");
|
|
//choose_from_menu($restore_user_options, $user_info_var, $$user_info_var, "");
|
|
//choose_from_radio($restore_user_options, $user_info_var, $$user_info_var);
|
|
print_checkbox($user_info_var, $$user_info_var, $$user_info_var, get_string("userdata"),'','selectItemInCheckboxByName(\'form1\',\'restore_user_info_'.$modname.'\',this.checked)');
|
|
} else {
|
|
//Module haven't userdata
|
|
echo get_string("withoutuserdata");
|
|
echo "<input type=\"hidden\" name=\"$user_info_var\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
if (isset($info->mods[$modname]->instances)) {
|
|
$instances = $info->mods[$modname]->instances;
|
|
}
|
|
if (!empty($instances) && is_array($instances)) {
|
|
echo '<tr><td></td><td colspan="3"><table class="restore-form-instances">';
|
|
foreach ($instances as $instance) {
|
|
echo '<tr><td>';
|
|
$var = 'restore_'.$modname.'_instance_'.$instance->id;
|
|
$$var = optional_param($var,1);
|
|
print_checkbox($var,$$var,$$var,$instance->name,$instance->name,'this.form.elements[\'restore_'.$modname.'\'].checked=1;');
|
|
echo '</td><td align="right"> ';
|
|
$var = 'restore_user_info_'.$modname.'_instance_'.$instance->id;
|
|
$$var = optional_param($var,1);
|
|
if ($info->mods[$modname]->instances[$instance->id]->userinfo == 'true') {
|
|
print_checkbox($var,$$var,$$var,get_string('userdata'),'','this.form.elements[\'restore_user_info_'.$modname.'\'].checked=1;');
|
|
} else {
|
|
echo '<input type="hidden" name="'.$var.'" value="0" />';
|
|
}
|
|
echo '</td></tr>';
|
|
}
|
|
echo '</table></td></tr>';
|
|
}
|
|
} else {
|
|
//Module isn't restorable
|
|
$nonrestmod .= "<input type=\"hidden\" name=\"$restore_var\" value=\"0\" />";
|
|
$nonrestmod .= "<input type=\"hidden\" name=\"$user_info_var\" value=\"0\" />";
|
|
}
|
|
} else {
|
|
//Module isn't restorable
|
|
$nonrestmod .= "<input type=\"hidden\" name=\"$restore_var\" value=\"0\" />";
|
|
$nonrestmod .= "<input type=\"hidden\" name=\"$user_info_var\" value=\"0\" />";
|
|
}
|
|
} else {
|
|
//Module isn't restorable
|
|
$nonrestmod .= "<input type=\"hidden\" name=\"$restore_var\" value=\"0\" />";
|
|
$nonrestmod .= "<input type=\"hidden\" name=\"$user_info_var\" value=\"0\" />";
|
|
}
|
|
$currentrow = ($currentrow + 1) % 2;
|
|
}
|
|
//Line
|
|
echo "<tr><td colspan=\"4\">$nonrestmod<hr /></td></tr>";
|
|
|
|
//Now print the Metacourse tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_metacourse">'.get_string ("metacourse").'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
//If metacourse are in the backup file, show menu, else fixed to no
|
|
if ($info->backup_metacourse == "true") {
|
|
$metacourse_options = array();
|
|
$metacourse_options[0] = get_string("no");
|
|
$metacourse_options[1] = get_string("yes");
|
|
choose_from_menu($metacourse_options, "restore_metacourse", $restore_metacourse, "");
|
|
} else {
|
|
echo get_string("no");
|
|
echo "<input type=\"hidden\" id=\"menurestore_metacourse\" name=\"restore_metacourse\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
//Now print the Users tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_users">'.get_string ("users").'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
//If some user is present in the backup file
|
|
if ($info->backup_users == "all" or $info->backup_users == "course") {
|
|
$user_options = array();
|
|
//If all users are in the backup file
|
|
if ($info->backup_users == "all") {
|
|
$user_options[0] = get_string("all");
|
|
}
|
|
$user_options[1] = get_string("course");
|
|
$user_options[2] = get_string("none");
|
|
choose_from_menu($user_options, "restore_users", $restore_users, "");
|
|
} else {
|
|
echo get_string("none");
|
|
echo "<input type=\"hidden\" id=\"menurestore_users\" name=\"restore_users\" value=\"2\" />";
|
|
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
//Now print the Groups tr (assume there is no $info->backup_groups)
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
$helplink = helpbutton('grouprestore', get_string('groups'), '', true, false, '', true);
|
|
if (empty($CFG->enablegroupings)) {
|
|
echo '<label for="menurestore_groups">'.get_string ("groups").'</label>'.$helplink;
|
|
echo "</b></td><td colspan=\"2\">";
|
|
$group_options[RESTORE_GROUPS_NONE] = get_string('no');
|
|
$group_options[RESTORE_GROUPS_ONLY] = get_string('yes');
|
|
} else {
|
|
echo '<label for="menurestore_groups">'.get_string ('groupsgroupings', 'group').'</label>'.$helplink;
|
|
echo "</b></td><td colspan=\"2\">";
|
|
$group_options[RESTORE_GROUPS_NONE] = get_string('none');
|
|
$group_options[RESTORE_GROUPS_ONLY] = get_string('groups');
|
|
$group_options[RESTORE_GROUPINGS_ONLY] = get_string('groupingsonly', 'group');
|
|
$group_options[RESTORE_GROUPS_GROUPINGS] = get_string('groupsgroupings', 'group'); //all.
|
|
|
|
} /*else {
|
|
echo get_string('none');
|
|
echo "<input type=\"hidden\" name=\"restore_groups\" value=\"2\" />";
|
|
}*/
|
|
choose_from_menu($group_options, 'restore_groups', $restore_groups, '');
|
|
echo "</td></tr>";
|
|
|
|
//Now print the Logs tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_logs">'.get_string ("logs").'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
//If logs are in the backup file, show menu, else fixed to no
|
|
if ($info->backup_logs == "true") {
|
|
$log_options = array();
|
|
$log_options[0] = get_string("no");
|
|
$log_options[1] = get_string("yes");
|
|
choose_from_menu($log_options, "restore_logs", $restore_logs, "");
|
|
} else {
|
|
echo get_string("no");
|
|
echo "<input type=\"hidden\" id=\"menurestore_logs\" name=\"restore_logs\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
//Now print the User Files tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_user_files">'.get_string ("userfiles").'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
//If user files are in the backup file, show menu, else fixed to no
|
|
if ($info->backup_user_files == "true") {
|
|
$user_file_options = array();
|
|
$user_file_options[0] = get_string("no");
|
|
$user_file_options[1] = get_string("yes");
|
|
choose_from_menu($user_file_options, "restore_user_files", $restore_user_files, "");
|
|
} else {
|
|
echo get_string("no");
|
|
echo "<input type=\"hidden\" id=\"menurestore_user_files\" name=\"restore_user_files\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
//Now print the Course Files tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_course_files">'.get_string ("coursefiles").'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
echo "<input type=\"hidden\" name=\"backup_unique_code\" value=\"$backup_unique_code\" />";
|
|
echo "<input type=\"hidden\" name=\"file\" value=\"$file\" />";
|
|
//If course files are in the backup file, show menu, else fixed to no
|
|
if ($info->backup_course_files == "true") {
|
|
$course_file_options = array();
|
|
$course_file_options[0] = get_string("no");
|
|
$course_file_options[1] = get_string("yes");
|
|
choose_from_menu($course_file_options, "restore_course_files", $restore_course_files, "");
|
|
} else {
|
|
echo get_string("no");
|
|
echo "<input type=\"hidden\" id=\"menurestore_course_files\" name=\"restore_course_files\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
|
|
//Now print the Site Files tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_site_files">'.get_string ("sitefiles").'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
//If site files are in the backup file, show menu, else fixed to no
|
|
if (isset($info->backup_site_files) && $info->backup_site_files == "true") {
|
|
$site_file_options = array();
|
|
$site_file_options[0] = get_string("no");
|
|
$site_file_options[1] = get_string("yes");
|
|
choose_from_menu($site_file_options, "restore_site_files", $restore_site_files, "");
|
|
} else {
|
|
echo get_string("no");
|
|
echo "<input type=\"hidden\" id=\"menurestore_site_files\" name=\"restore_site_files\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
// do you want grade histories to be restored?
|
|
if (empty($CFG->disablegradehistory)) {
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_gradebook_history">'.get_string ('gradebookhistories', 'grades').'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
if (isset($info->gradebook_histories) && $info->gradebook_histories == "true") {
|
|
$gradebook_history_options = array();
|
|
$gradebook_history_options[0] = get_string("no");
|
|
$gradebook_history_options[1] = get_string("yes");
|
|
choose_from_menu($gradebook_history_options, "restore_gradebook_history", $restore_gradebook_history, "");
|
|
} else {
|
|
echo get_string("no");
|
|
echo "<input type=\"hidden\" id=\"menurestore_gradebook_history\" name=\"restore_gradebook_history\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
} else {
|
|
$hidden_options .= '<input type="hidden" name="restore_gradebook_history" value="0" />';
|
|
}
|
|
|
|
|
|
//This tr is slighty different. Everything becomes hidden if
|
|
//we haven't messages is the backup, to avoid confusions to users.
|
|
//If messages are in the backup file, show menu, else fixed to no and show nothing
|
|
if (isset($info->backup_messages) && $info->backup_messages == "true") {
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo '<label for="menurestore_messages">'.get_string ('messages', 'messages').'</label>';
|
|
echo "</b></td><td colspan=\"2\">";
|
|
$message_options = array();
|
|
$message_options[0] = get_string("no");
|
|
$message_options[1] = get_string("yes");
|
|
choose_from_menu($message_options, "restore_messages", $restore_messages, "");
|
|
echo "</td></tr>";
|
|
} else {
|
|
$hidden_options .= '<input type="hidden" name="restore_messages" value="0" />';
|
|
}
|
|
|
|
}
|
|
?>
|
|
</table>
|
|
|
|
<hr />
|
|
<?php
|
|
|
|
print_heading(get_string('rolemappings'));
|
|
$xml_file = $CFG->dataroot."/temp/backup/".$backup_unique_code."/moodle.xml";
|
|
|
|
$info = restore_read_xml_info($xml_file);
|
|
|
|
// fix for MDL-9068, front page course is just a normal course
|
|
$siterolesarray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course->id), "shortname");
|
|
$siterolesnamearray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course->id), "name");
|
|
$allroles = get_records('role');
|
|
|
|
echo ('<table width="100%" class="restore-form-instances">');
|
|
echo ('<tr><td align="right" style="width:50%"><b>'.get_string('sourcerole').'</b></td><td align="left" style="width:50%"><b>'.get_string('targetrole').'</b></td></tr>');
|
|
|
|
if ($info->backup_moodle_version < 2006092801) {
|
|
// 1.6 and below backup
|
|
|
|
/// Editting teacher
|
|
echo ('<tr><td align="right">');
|
|
echo '<label for="menudefaultteacheredit">'.get_string ('defaultcourseteacher').'</label>';
|
|
echo ('</td><td algin="left">');
|
|
|
|
// get the first teacheredit legacy
|
|
$roles = get_roles_with_capability('moodle/legacy:editingteacher', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM));
|
|
|
|
$editteacher = reset($roles);
|
|
choose_from_menu ($siterolesarray, "defaultteacheredit", $editteacher->id, 'new role', '', '0');
|
|
echo ('</td></tr>');
|
|
|
|
/// Non-editting teacher
|
|
echo ('<tr><td align="right">');
|
|
echo '<label for="menudefaultteacher">'.get_string ('noneditingteacher').'</label>';
|
|
print_string('noneditingteacher');
|
|
echo ('</td><td algin="left">');
|
|
|
|
// get the first teacheredit legacy
|
|
$roles = get_roles_with_capability('moodle/legacy:teacher', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM));
|
|
$teacher = reset($roles);
|
|
|
|
choose_from_menu ($siterolesarray, "defaultteacher", $teacher->id, 'new role', '', '0');
|
|
echo ('</td></tr>');
|
|
|
|
|
|
/// Student
|
|
echo ('<tr><td align="right">');
|
|
echo '<label for="menudefaultstudent">'.get_string ('defaultcoursestudent').'</label>';
|
|
echo ('</td><td algin="left">');
|
|
|
|
// get the first teacheredit legacy
|
|
$roles = get_roles_with_capability('moodle/legacy:student', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM));
|
|
$studentrole = array_shift($roles);
|
|
|
|
choose_from_menu ($siterolesarray, "defaultstudent", $studentrole->id, 'new role', '', '0');
|
|
echo ('</td></tr>');
|
|
|
|
} else {
|
|
// 1.7 and above backup
|
|
$roles = restore_read_xml_roles($xml_file);
|
|
|
|
if (!empty($roles->roles)) { // possible to have course with no roles
|
|
foreach ($siterolesarray as $siteroleid=>$siteroleshortname) {
|
|
$siteroleschoicearray[$siteroleid] = $siterolesnamearray[$siteroleid]." (". $siterolesarray[$siteroleid].")";
|
|
}
|
|
|
|
foreach ($roles->roles as $roleid=>$role) {
|
|
|
|
$mappableroles = $siteroleschoicearray;
|
|
|
|
echo ('<tr><td align="right">');
|
|
echo '<label for="menuroles_'.$roleid.'">'.$role->name." (".($role->shortname).")".'</label>';
|
|
echo ('</td><td align="left">');
|
|
|
|
/// first, we see if any exact role definition is found
|
|
/// if found, that is the only option of restoring to
|
|
|
|
if ($samerole = restore_samerole($roleid, $role)) {
|
|
$matchrole = $samerole->id;
|
|
// if an exact role is found, it does not matter whether this user can assign this role or not,
|
|
// this will be presented as a valid option regardless
|
|
$mappableroles[$samerole->id] = $allroles[$samerole->id]->name." (". $allroles[$samerole->id]->shortname.")";
|
|
} else {
|
|
// no exact role found, let's try to match shortname
|
|
// this is useful in situations where basic roles differ slightly in definition
|
|
$matchrole = 0;
|
|
foreach ($siterolesarray as $siteroleid=>$siteroleshortname) {
|
|
if ($siteroleshortname == $role->shortname) {
|
|
$matchrole = $siteroleid;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
choose_from_menu ($mappableroles, "roles_".$roleid, $matchrole, 'new role', '', '0');
|
|
echo ('</td></tr>');
|
|
}
|
|
}
|
|
|
|
} // end else
|
|
|
|
echo ('</table>'); // end of role mappings table
|
|
|
|
?>
|
|
<br />
|
|
<div style="text-align:center">
|
|
<?php
|
|
/// Print captured hidden options, now that we have closed the table
|
|
echo $hidden_options;
|
|
?>
|
|
<input type="hidden" name="id" value="<?php p($id) ?>" />
|
|
<input type="hidden" name="launch" value="check" />
|
|
<input type="hidden" name="fromform" value="1" />
|
|
<input type="submit" value="<?php print_string("continue") ?>" />
|
|
<input type="submit" name="cancel" value="<?php print_string("cancel") ?>" />
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<?php
|
|
|
|
/**
|
|
* Look for a role in the database with exactly the same definition as the one in the backup file.
|
|
*
|
|
* @param integer $roleid the id that the role in the backup files had on the old server.
|
|
* @param object $role the rest of the definition of the role from the backup file.
|
|
*/
|
|
function restore_samerole($roleid, $rolefromxml) {
|
|
global $CFG;
|
|
|
|
// First we try some intelligent guesses, then, if none of those work, we do a more extensive
|
|
// search.
|
|
|
|
// First guess, try let's use the id
|
|
if (restore_is_samerole($roleid, $rolefromxml)) {
|
|
return get_record('role', 'id', $roleid);
|
|
}
|
|
|
|
// Second guess, try the shortname
|
|
$testroleid = get_field('role', 'id', 'shortname', $rolefromxml->shortname);
|
|
if ($testroleid && restore_is_samerole($testroleid, $rolefromxml)) {
|
|
return get_record('role', 'id', $testroleid);
|
|
}
|
|
|
|
// Finally, search all other roles. In orter to speed things up, we exclude the ones we have
|
|
// already tested, and we only search roles with the same number of capabilities set in their
|
|
// definition.
|
|
$extracondition = '';
|
|
if ($testroleid) {
|
|
$extracondition = "AND roleid <> $testroleid";
|
|
}
|
|
$candidateroleids = get_records_sql("SELECT roleid
|
|
FROM {$CFG->prefix}role_capabilities
|
|
WHERE roleid <> $roleid $extracondition
|
|
GROUP BY roleid
|
|
HAVING COUNT(capability) = ".count($rolefromxml->capabilities));
|
|
if (!empty($candidateroleids)) {
|
|
foreach ($candidateroleids as $testroleid => $notused) {
|
|
if (restore_is_samerole($testroleid, $rolefromxml)) {
|
|
return get_record('role', 'id', $testroleid);
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Compare a role in the database with one loaded from the backup file, and determine whether
|
|
* they have identical permissions for each capability.
|
|
* @param integer $testroleid the id of the role from the database to test against.
|
|
* @param object $rolefromxml the role definition loaded from the backup file.
|
|
* @return boolean true if the two roles are identical.
|
|
*/
|
|
function restore_is_samerole($testroleid, $rolefromxml) {
|
|
// Load the role definition from the databse.
|
|
$rolefromdb = get_records('role_capabilities', 'roleid', $testroleid, '', 'capability,permission');
|
|
if (!$rolefromdb) {
|
|
return false;
|
|
}
|
|
|
|
// Quick check, do they have the permissions on the same number of capabilities?
|
|
if (count($rolefromdb) != count($rolefromxml->capabilities)) {
|
|
return false;
|
|
}
|
|
|
|
// If they do, check each one.
|
|
foreach ($rolefromdb as $capability => $permissions) {
|
|
if (!isset($rolefromxml->capabilities[$capability]) ||
|
|
$permissions->permission != $rolefromxml->capabilities[$capability]->permission) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
?>
|