mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
2960a5525a
There is something _weird_ about the table setup on this page and I cannot figure it out. This change "fixes" it in that FF stops complaining. However, the fix looks very broken to me.
675 lines
27 KiB
HTML
675 lines
27 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', 1, 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, 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!");
|
|
}
|
|
|
|
//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_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 get_string("restoreto").":</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
|
|
*/
|
|
|
|
$mycourses = get_capability_courses('moodle/site:restore');
|
|
|
|
// 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 || !in_array($id, $mycourses)) {
|
|
// 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");
|
|
}
|
|
|
|
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\">";
|
|
print_string('category');
|
|
echo " :</td>";
|
|
echo "<td>";
|
|
choose_from_menu(get_creatable_categories(), "restore_restorecatto", $course_header->category->id, "");
|
|
echo "</td>";
|
|
echo "</tr>";
|
|
|
|
echo "<tr valign=\"top\" >";
|
|
echo "<td align=\"right\">";
|
|
print_string("shortname");
|
|
echo " :</td>";
|
|
echo "<td><input type=\"text\" 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\">";
|
|
print_string("fullname");
|
|
echo " :</td>";
|
|
echo "<td><input type=\"text\" 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 get_string("metacourse").":";
|
|
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[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\" name=\"restore_metacourse\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
//Now print the Users tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo get_string("users").":";
|
|
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") {
|
|
//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\" name=\"restore_users\" value=\"2\" />";
|
|
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
//Now print the Logs tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo get_string("logs").":";
|
|
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[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\" name=\"restore_logs\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
//Now print the User Files tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo get_string ("userfiles").":";
|
|
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[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\" 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 get_string ("coursefiles").":";
|
|
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[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\" 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 get_string ("sitefiles").":";
|
|
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[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\" name=\"restore_site_files\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
// do you want grade histories to be restored?
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
echo get_string ('gradebookhistories', 'grades').":";
|
|
echo "</b></td><td colspan=\"2\">";
|
|
$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, "");
|
|
echo "</td></tr>";
|
|
|
|
//Now print the Messages tr
|
|
echo "<tr>";
|
|
echo "<td align=\"right\" colspan=\"2\"><b>";
|
|
|
|
//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 ($info->backup_messages == "true") {
|
|
echo get_string ('messages','message').":";
|
|
echo "</b></td><td colspan=\"2\">";
|
|
$message_options[0] = get_string("no");
|
|
$message_options[1] = get_string("yes");
|
|
choose_from_menu($message_options, "restore_messages", $restore_messages, "");
|
|
} else {
|
|
echo " </b></td><td colspan=\"2\">";
|
|
echo "<input type=\"hidden\" name=\"restore_messages\" value=\"0\" />";
|
|
}
|
|
echo "</td></tr>";
|
|
|
|
|
|
}
|
|
?>
|
|
</td></tr></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">');
|
|
print_string('defaultcourseteacher');
|
|
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, SITEID));
|
|
|
|
$editteacher = array_shift($roles);
|
|
choose_from_menu ($siterolesarray, "defaultteacheredit", $editteacher->id, 'new role', '', '0');
|
|
echo ('</td></tr>');
|
|
|
|
/// Non-editting teacher
|
|
echo ('<tr><td align="right">');
|
|
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, SITEID));
|
|
$teacher = array_shift($roles);
|
|
|
|
choose_from_menu ($siterolesarray, "defaultteacher", $teacher->id, 'new role', '', '0');
|
|
echo ('</td></tr>');
|
|
|
|
|
|
/// Student
|
|
echo ('<tr><td align="right">');
|
|
print_string('defaultcoursestudent');
|
|
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, SITEID));
|
|
$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 $role->name." (".($role->shortname).")";
|
|
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">
|
|
<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
|
|
|
|
/*
|
|
* If there is a role with exactly the same definition, we pull it out from db
|
|
*/
|
|
function restore_samerole($roleid, $role) {
|
|
global $CFG;
|
|
|
|
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
|
|
// first let's use the id
|
|
|
|
if ($trole = get_records_sql("SELECT roleid,capability,permission
|
|
FROM {$CFG->prefix}role_capabilities
|
|
WHERE roleid = $roleid")) {
|
|
|
|
if (restore_is_samerole($trole, $role)) {
|
|
$firstcap = array_shift($trole);
|
|
return get_record('role', 'id', $firstcap->roleid);
|
|
}
|
|
}
|
|
|
|
// unfortunately then we have to loop all roles with the same number of capabiltiies
|
|
if ($proles = get_records_sql("SELECT roleid, roleid
|
|
FROM {$CFG->prefix}role_capabilities
|
|
GROUP BY roleid
|
|
HAVING COUNT(capability) = ".count($role->capabilities))) {
|
|
foreach ($proles as $proleid=>$proleobj) {
|
|
if ($prole = get_records('role_capabilities', 'roleid', $proleid)) {
|
|
if (restore_is_samerole($prole, $role)) {
|
|
return get_record('role', 'id', $proleid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* rolea from db, roleb from xml
|
|
*/
|
|
function restore_is_samerole($rolea, $roleb) {
|
|
|
|
if (count($rolea) != count($roleb->capabilities)) {
|
|
return false;
|
|
}
|
|
|
|
foreach ($rolea as $cap) {
|
|
if ($cap->permission != $roleb->capabilities[$cap->capability]->permission) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
?> |