moodle/backup/backup_form.html
Eloy Lafuente a89fcd7a2c MDL-9251 backup/restore *all* users - is now forbidden for users
lacking backup/restore permission at system level. Merged from 19_STABLE
2009-11-21 11:56:27 +00:00

380 lines
17 KiB
HTML

<?php
//This page prints the backup form to select everything
global $DB;
//Check login
require_login();
$loginurl = get_login_url();
//Init backupuserinfo
$backupuserinfo = false;
if (!empty($course->id)) {
if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_COURSE, $course->id))) {
if (empty($to)) {
print_error("cannotuseadminadminorteacher", '', $loginurl);
} else {
if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_COURSE, $to))) {
print_error("cannotuseadminadminorteacher", '', $loginurl);
}
}
}
$backupuserinfo = has_capability('moodle/backup:userinfo', get_context_instance(CONTEXT_COURSE, $course->id));
} else {
if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_SYSTEM))) {
print_error("cannotuseadmin", '', $loginurl);
}
$backupuserinfo = has_capability('moodle/backup:userinfo', get_context_instance(CONTEXT_SYSTEM));
}
//Check site
$site = get_site();
//Checks for the required files/functions to backup every mod
//And check if there is data about it
$count = 0;
if ($allmods = $DB->get_records('modules', array('visible'=>1)) ) {
foreach ($allmods as $mod) {
$modname = $mod->name;
$modfile = "$CFG->dirroot/mod/$modname/backuplib.php";
$modbackup = $modname."_backup_mods";
$modbackupone = $modname.'_backup_one_mod';
$modcheckbackup = $modname."_check_backup_mods";
if (file_exists($modfile)) {
include_once($modfile);
if (function_exists($modbackup) and function_exists($modcheckbackup)) {
$var = "exists_".$modname;
$$var = true;
$count++;
// check that there are instances and we can back them up individually
if ($DB->count_records('course_modules',array('course'=>$course->id,'module'=>$mod->id)) && function_exists($modbackupone)) {
$var = 'exists_one_'.$modname;
$$var = true;
}
}
}
//Check data
//Check module info
$var = "backup_".$modname;
$$var = optional_param( $var,1, PARAM_CLEAN);
//Check include user info
$var = "backup_user_info_".$modname;
$$var = optional_param( $var,1, PARAM_CLEAN);
}
}
//Check other parameters
$backup_metacourse = optional_param('backup_metacourse',1, PARAM_BOOL);
$backup_users = optional_param('backup_users',1, PARAM_BOOL);
$backup_logs = optional_param('backup_logs',0, PARAM_BOOL);
$backup_user_files = optional_param('backup_user_files',1, PARAM_BOOL);
$backup_course_files = optional_param('backup_course_files',1, PARAM_BOOL);
$backup_site_files = optional_param('backup_site_files',1, PARAM_BOOL);
$backup_gradebook_history = optional_param('backup_gradebook_history', 0, PARAM_INT);
$backup_messages = optional_param('backup_messages',1, PARAM_BOOL);
$backup_blogs = optional_param('backup_blogs',1, PARAM_BOOL);
if ($count == 0) {
notice("No backupable 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="backup.php">
<table cellpadding="5" style="margin-left:auto;margin-right:auto;">
<?php
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
/// Acummulator for hidden options and proper XHTML output
$hidden_options = '';
//Now, check modules and info and show posibilities
if ($allmods = $DB->get_records('modules', array('visible'=>1)) ) {
//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', 'backup_', true);\">". get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_', false);\">". get_string("none")."</a>";
echo "</td>";
if (empty($to) and $backupuserinfo) {
echo "<td align=\"right\">";
echo '<b>&nbsp;</b>';
echo "</td><td>";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', true);\">". get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', false);\">". get_string("none")."</a>";
echo "</td>";
} else {
echo "<td colspan=\"2\">&nbsp;</td>";
}
echo "</tr>";
echo "<tr><td colspan=\"4\"><hr /></td></tr>";
$currentrow = 0;
foreach ($allmods as $mod) {
$modname = $mod->name;
$modbackup = $modname."_backup_mods";
//If exists the lib & function
$var = 'exists_'.$modname;
$exvar = 'exists_one_'.$modname;
if (!empty($$var) and !empty($$exvar)) {
//Print the full tr
echo "<tr class=\"r".$currentrow."\">";
echo " <td align=\"right\">&nbsp;";
echo "</td><td>\n";
$backup_options[0] = get_string("no");
$backup_options[1] = get_string("yes");
$var = "backup_".$modname;
//Print the checkbox
print_checkbox($var, $$var, $$var, get_string("modulenameplural",$modname),'','selectItemInCheckboxByName(\'form1\',\'backup_'.$modname.'\',this.checked)');
echo "</td><td align=\"right\">&nbsp;";
echo "</td><td>";
$var = "backup_user_info_".$modname;
if (empty($to) and $backupuserinfo) {
$backup_user_options[0] = get_string("withoutuserdata");
$backup_user_options[1] = get_string("withuserdata");
print_checkbox($var, $$var, $$var, get_string("userdata"),'','selectItemInCheckboxByName(\'form1\',\'backup_user_info_'.$modname.'\',this.checked)');
} else {
echo '<input type="hidden" name="'.$var.'" value="0" />';
}
echo "</td></tr>\n";
echo '<tr><td></td><td colspan="3"><table class="backup-form-instances">';
$instances = get_all_instances_in_course($modname, $course, NULL, true);
$var = $exvar;
foreach ($instances as $instance) {
echo '<tr><td>';
$var = 'backup_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,1, PARAM_CLEAN);
print_checkbox($var,$$var,$$var,$instance->name,$instance->name,'this.form.elements[\'backup_'.$modname.'\'].checked=1;');
echo '</td><td align="right">&nbsp;';
$var = 'backup_user_info_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,1, PARAM_CLEAN);
if (empty($to) and $backupuserinfo) {
print_checkbox($var,$$var,$$var,get_string('userdata'),'','this.form.elements[\'backup_user_info_'.$modname.'\'].checked=1;');
} else {
echo '<input type="hidden" name="'.$var.'" value="0" />';
}
echo '</td></tr>';
}
echo '</table></td></tr>';
}
}
//Line
echo "<tr><td colspan=\"4\"><hr /></td></tr>\n";
if (empty($to) && !empty($course->metacourse)) {
//Now print the Metacourse tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_metacourse">'.get_string ("metacourse").'</label>';
echo "</b></td><td colspan=\"2\">";
$meta_options[0] = get_string("no");
$meta_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($meta_options, "backup_metacourse", $backup_metacourse, false));
echo "</td></tr>";
}
else {
$hidden_options .= '<input type="hidden" name="backup_metacourse" value="0" />';
}
if (empty($to) and $backupuserinfo) {
//Now print the Users tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_users">'.get_string ("users").'</label>';
echo "</b></td><td colspan=\"2\">";
if (has_capability('moodle/site:backup', get_context_instance(CONTEXT_SYSTEM))) {
$user_options[0] = get_string("all");
}
$user_options[1] = get_string("course");
$user_options[2] = get_string("none");
echo $OUTPUT->select(html_select::make($user_options, "backup_users", $backup_users, false));
echo "</td></tr>";
}
else {
$hidden_options .= '<input type="hidden" name="backup_users" value="2" />';
}
if (empty($to) and $backupuserinfo) {
//Now print the Logs tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_logs">'.get_string ("logs").'</label>';
echo "</b></td><td colspan=\"2\">";
$log_options[0] = get_string("no");
$log_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($log_options, "backup_logs", $backup_logs, false));
echo "</td></tr>";
}
else {
$hidden_options .= '<input type="hidden" name="backup_logs" value="0" />';
}
if (empty($to) and $backupuserinfo) {
//Now print the User Files tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_user_files">'.get_string ("userfiles").'</label>';
echo "</b></td><td colspan=\"2\">";
$user_file_options[0] = get_string("no");
$user_file_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($user_file_options, "backup_user_files", $backup_user_files, false));
echo "</td></tr>";
}
else {
$hidden_options .= '<input type="hidden" name="backup_user_files" value="0" />';
}
//Now print the Course Files tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_course_files">'.get_string ("coursefiles").'</label>';
echo "</b></td><td colspan=\"2\">";
$course_file_options[0] = get_string("no");
$course_file_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($course_file_options, "backup_course_files", $backup_course_files, false));
echo "</td></tr>";
if ($course->id != SITEID){
//Now print the site Files tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_site_files">'.get_string ("sitefilesused").'</label>';
echo $OUTPUT->help_icon(moodle_help_icon::make('sitefilesused', get_string('sitefilesused')));
echo "</b></td><td colspan=\"2\">";
$course_file_options[0] = get_string("no");
$course_file_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($course_file_options, "backup_site_files", $backup_site_files, false));
echo "</td></tr>";
}
// do you want grade histories to be backed up?
if (empty($to) and $backupuserinfo and empty($CFG->disablegradehistory)) {
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_gradebook_history">'.get_string ('gradebookhistories', 'grades').'</label>';
echo "</b></td><td colspan=\"2\">";
$gradebook_history_options[0] = get_string("no");
$gradebook_history_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($gradebook_history_options, "backup_gradebook_history", $backup_gradebook_history, false));
echo "</td></tr>";
} else {
$hidden_options .= '<input type="hidden" name="backup_gradebook_history" value="0" />';
}
if (empty($to) and $backupuserinfo and $course->id == SITEID) {
//If we are in a SITEID backup print the Messages tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo '<label for="menubackup_messages">'.get_string ('messages', 'message').'</label>';
echo "</b></td><td colspan=\"2\">";
$mess_options[0] = get_string("no");
$mess_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($mess_options, "backup_messages", $backup_messages, false));
echo "</td></tr>";
}
else {
$hidden_options .= '<input type="hidden" name="backup_messages" value="0" />';
}
if (empty($to) and $backupuserinfo and $course->id == SITEID and !empty($CFG->bloglevel)) {
//If we are in a SITEID backup and blogs are enabled print the Blogs tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo get_string ('blogs','blog').":";
echo "</b></td><td colspan=\"2\">";
$blog_options[0] = get_string("no");
$blog_options[1] = get_string("yes");
echo $OUTPUT->select(html_select::make($blog_options, "backup_blogs", $backup_blogs, false));
echo "</td></tr>";
}
else {
$hidden_options .= '<input type="hidden" name="backup_blogs" value="0" />';
}
}
//Now print a place to select which role assignments to back up.
if (empty($to) and $backupuserinfo) {
//Line
echo "<tr><td colspan=\"4\"><hr /></td></tr>\n";
echo "<tr>";
echo "<td align=\"right\" valign=\"top\" colspan=\"2\"><b>";
echo get_string("backuproleassignments");
echo "</b></td><td colspan=\"2\">";
$roles = get_all_roles();
foreach ($roles as $role) {
print_checkbox('backupassignments_' . $role->shortname, 1, true, strip_tags(format_string($role->name, true)));
echo "<br />";
}
echo "<a href=\"#\" onclick=\"selectItemInCheckboxByName('form1', 'backupassignments_', true); return false;\">". get_string("all")."</a>/";
echo "<a href=\"#\" onclick=\"selectItemInCheckboxByName('form1', 'backupassignments_', false); return false;\">". get_string("none")."</a>";
echo "</td></tr>";
}
$backup_unique_code = time();
//Calculate the backup string
//Calculate the backup unique code to allow simultaneus backups (to define
//the temp-directory name and records in backup temp tables
$backup_name = backup_get_zipfile_name($course, $backup_unique_code);
?>
</table>
<div style="text-align:center;margin-left:auto;margin-right:auto">
<?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="to" value="<?php p($to) ?>" />
<input type="hidden" name="backup_unique_code" value="<?php p($backup_unique_code); ?>" />
<input type="hidden" name="backup_name" value="<?php p($backup_name); ?>" />
<input type="hidden" name="launch" value="check" />
<input type="submit" value="<?php print_string("continue") ?>" />
<input type="submit" name="cancel" value="<?php print_string("cancel") ?>" />
</div>
</form>