MDL-11905 - Users with the capability to export questions may not have the capability to access backupdata. Therefore we need to change where question export files are stored. I know this is after the 1.9.2 code freeze, but I discussed this fix with Petr, and he reviewed it last night and we decided it was better to commit it before the 1.9.2 release.
This commit is contained in:
@@ -91,4 +91,5 @@ $string['tofilecontext'] = 'Write context to file';
|
||||
$string['unknown'] = 'Unknown';
|
||||
$string['unknownquestiontype'] = 'Unknown question type: $a.';
|
||||
$string['unpublished'] = 'unshared';
|
||||
$string['yourfileshoulddownload'] = 'Your export file should start to download shortly. If not, please <a href=\"$a\">click here</a>.';
|
||||
?>
|
||||
|
||||
+40
-33
@@ -17,20 +17,7 @@
|
||||
|
||||
|
||||
// get display strings
|
||||
$txt = new object;
|
||||
$txt->category = get_string('category', 'quiz');
|
||||
$txt->download = get_string('download', 'quiz');
|
||||
$txt->downloadextra = get_string('downloadextra', 'quiz');
|
||||
$txt->exporterror = get_string('exporterror', 'quiz');
|
||||
$txt->exportname = get_string('exportname', 'quiz');
|
||||
$txt->exportquestions = get_string('exportquestions', 'quiz');
|
||||
$txt->fileformat = get_string('fileformat', 'quiz');
|
||||
$txt->exportcategory = get_string('exportcategory', 'quiz');
|
||||
$txt->modulename = get_string('modulename', 'quiz');
|
||||
$txt->modulenameplural = get_string('modulenameplural', 'quiz');
|
||||
$txt->tofile = get_string('tofile', 'quiz');
|
||||
|
||||
|
||||
$strexportquestions = get_string('exportquestions', 'quiz');
|
||||
|
||||
// make sure we are using the user's most recent category choice
|
||||
if (empty($categoryid)) {
|
||||
@@ -52,9 +39,9 @@
|
||||
$navlinks = array();
|
||||
$navlinks[] = array('name' => get_string('modulenameplural', $cm->modname), 'link' => "$CFG->wwwroot/mod/{$cm->modname}/index.php?id=$COURSE->id", 'type' => 'activity');
|
||||
$navlinks[] = array('name' => format_string($module->name), 'link' => "$CFG->wwwroot/mod/{$cm->modname}/view.php?id={$cm->id}", 'type' => 'title');
|
||||
$navlinks[] = array('name' => $txt->exportquestions, 'link' => '', 'type' => 'title');
|
||||
$navlinks[] = array('name' => $strexportquestions, 'link' => '', 'type' => 'title');
|
||||
$navigation = build_navigation($navlinks);
|
||||
print_header_simple($txt->exportquestions, '', $navigation, "", "", true, $strupdatemodule);
|
||||
print_header_simple($strexportquestions, '', $navigation, "", "", true, $strupdatemodule);
|
||||
|
||||
$currenttab = 'edit';
|
||||
$mode = 'export';
|
||||
@@ -63,10 +50,10 @@
|
||||
} else {
|
||||
// Print basic page layout.
|
||||
$navlinks = array();
|
||||
$navlinks[] = array('name' => $txt->exportquestions, 'link' => '', 'type' => 'title');
|
||||
$navlinks[] = array('name' => $strexportquestions, 'link' => '', 'type' => 'title');
|
||||
$navigation = build_navigation($navlinks);
|
||||
|
||||
print_header_simple($txt->exportquestions, '', $navigation);
|
||||
print_header_simple($strexportquestions, '', $navigation);
|
||||
// print tabs
|
||||
$currenttab = 'export';
|
||||
include('tabs.php');
|
||||
@@ -100,42 +87,62 @@
|
||||
$from_form->exportfilename = default_export_filename($COURSE, $category);
|
||||
}
|
||||
$qformat->setFilename($from_form->exportfilename);
|
||||
$canaccessbackupdata = has_capability('moodle/site:backup', $contexts->lowest());
|
||||
$qformat->set_can_access_backupdata($canaccessbackupdata);
|
||||
$qformat->setCattofile(!empty($from_form->cattofile));
|
||||
$qformat->setContexttofile(!empty($from_form->contexttofile));
|
||||
|
||||
if (! $qformat->exportpreprocess()) { // Do anything before that we need to
|
||||
error($txt->exporterror, $thispageurl->out());
|
||||
error(get_string('exporterror', 'quiz'), $thispageurl->out());
|
||||
}
|
||||
|
||||
if (! $qformat->exportprocess()) { // Process the export data
|
||||
error($txt->exporterror, $thispageurl->out());
|
||||
error(get_string('exporterror', 'quiz'), $thispageurl->out());
|
||||
}
|
||||
|
||||
if (! $qformat->exportpostprocess()) { // In case anything needs to be done after
|
||||
error($txt->exporterror, $thispageurl->out());
|
||||
error(get_string('exporterror', 'quiz'), $thispageurl->out());
|
||||
}
|
||||
echo "<hr />";
|
||||
|
||||
// link to download the finished file
|
||||
$file_ext = $qformat->export_file_extension();
|
||||
if ($CFG->slasharguments) {
|
||||
$efile = "{$CFG->wwwroot}/file.php/".$qformat->question_get_export_dir()."/$from_form->exportfilename".$file_ext."?forcedownload=1";
|
||||
}
|
||||
else {
|
||||
$efile = "{$CFG->wwwroot}/file.php?file=/".$qformat->question_get_export_dir()."/$from_form->exportfilename".$file_ext."&forcedownload=1";
|
||||
}
|
||||
echo "<p><div class=\"boxaligncenter\"><a href=\"$efile\">$txt->download</a></div></p>";
|
||||
echo "<p><div class=\"boxaligncenter\"><font size=\"-1\">$txt->downloadextra</font></div></p>";
|
||||
$filename = $from_form->exportfilename . $file_ext;
|
||||
if ($canaccessbackupdata) {
|
||||
$efile = get_file_url($qformat->question_get_export_dir() . '/' . $filename,
|
||||
array('forcedownload' => 1));
|
||||
echo '<p><div class="boxaligncenter"><a href="' . $efile . '">' .
|
||||
get_string('download', 'quiz') . '</a></div></p>';
|
||||
echo '<p><div class="boxaligncenter"><font size="-1">' .
|
||||
get_string('downloadextra', 'quiz') . '</font></div></p>';
|
||||
} else {
|
||||
if ($CFG->slasharguments) {
|
||||
$efile = $CFG->wwwroot . '/question/exportfile.php/' . rawurlencode($filename);
|
||||
} else {
|
||||
$efile = $CFG->wwwroot . '/question/exportfile.php/?file=' . rawurlencode($filename);
|
||||
}
|
||||
|
||||
echo '<p><div class="boxaligncenter">' .
|
||||
get_string('yourfileshoulddownload', 'question', $efile) . '</a></div></p>';
|
||||
echo '
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
|
||||
print_continue("edit.php?".$thispageurl->get_query_string());
|
||||
function redirect() {
|
||||
document.location.replace("' . addslashes_js($efile) . '");
|
||||
}
|
||||
setTimeout("redirect()", 1000);
|
||||
//]]>
|
||||
</script>';
|
||||
}
|
||||
|
||||
print_continue('edit.php?' . $thispageurl->get_query_string());
|
||||
print_footer($COURSE);
|
||||
exit;
|
||||
}
|
||||
|
||||
/// Display export form
|
||||
|
||||
|
||||
print_heading_with_help($txt->exportquestions, 'export', 'quiz');
|
||||
print_heading_with_help($strexportquestions, 'export', 'quiz');
|
||||
|
||||
$export_form->display();
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
require_once(dirname(__FILE__) . '/../config.php');
|
||||
require_once($CFG->libdir . '/filelib.php');
|
||||
|
||||
// Note: file.php always calls require_login() with $setwantsurltome=false
|
||||
// in order to avoid messing redirects. MDL-14495
|
||||
require_login(0, true, null, false);
|
||||
|
||||
$relativepath = get_file_argument('question/exportfile.php');
|
||||
if (!$relativepath) {
|
||||
error('No valid arguments supplied or incorrect server configuration');
|
||||
}
|
||||
|
||||
$pathname = $CFG->dataroot . '/temp/questionexport/' . $USER->id . '/' . $relativepath;
|
||||
|
||||
send_temp_file($pathname, $relativepath);
|
||||
?>
|
||||
+16
-2
@@ -24,6 +24,7 @@ class qformat_default {
|
||||
var $importerrors = 0;
|
||||
var $stoponerror = true;
|
||||
var $translator = null;
|
||||
var $canaccessbackupdata = true;
|
||||
|
||||
|
||||
// functions to indicate import/export functionality
|
||||
@@ -134,6 +135,14 @@ class qformat_default {
|
||||
$this->stoponerror = $stoponerror;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $canaccess Whether the current use can access the backup data folder. Determines
|
||||
* where export files are saved.
|
||||
*/
|
||||
function set_can_access_backupdata($canaccess) {
|
||||
$this->canaccessbackupdata = $canaccess;
|
||||
}
|
||||
|
||||
/***********************
|
||||
* IMPORTING FUNCTIONS
|
||||
***********************/
|
||||
@@ -767,8 +776,13 @@ class qformat_default {
|
||||
* @return string file path
|
||||
*/
|
||||
function question_get_export_dir() {
|
||||
$dirname = get_string("exportfilename","quiz");
|
||||
$path = $this->course->id.'/backupdata/'.$dirname; // backupdata is protected directory
|
||||
global $USER;
|
||||
if ($this->canaccessbackupdata) {
|
||||
$dirname = get_string("exportfilename","quiz");
|
||||
$path = $this->course->id.'/backupdata/'.$dirname; // backupdata is protected directory
|
||||
} else {
|
||||
$path = 'temp/questionexport/' . $USER->id;
|
||||
}
|
||||
return $path;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user