Index: question/export.php =================================================================== RCS file: /cvsroot/moodle/moodle/question/export.php,v retrieving revision 1.43.2.1 diff -u -r1.43.2.1 export.php --- question/export.php 2 Nov 2007 16:20:19 -0000 1.43.2.1 +++ question/export.php 7 Jul 2008 16:35:07 -0000 @@ -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 "
"; // 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"; + $filename = $from_form->exportfilename . $file_ext; + if ($canaccessbackupdata) { + $efile = get_file_url($qformat->question_get_export_dir() . '/' . $filename, + array('forcedownload' => 1)); + echo '

' . + get_string('download', 'quiz') . '

'; + echo '

' . + get_string('downloadextra', 'quiz') . '

'; + } else { + if ($CFG->slasharguments) { + $efile = $CFG->wwwroot . '/question/exportfile.php/' . rawurlencode($filename); + } else { + $efile = $CFG->wwwroot . '/question/exportfile.php/?file=' . rawurlencode($filename); + } + + echo '

' . + get_string('yourfileshoulddownload', 'question', $efile) . '

'; + echo ' +'; } - echo "

$txt->download

"; - echo "

$txt->downloadextra

"; - print_continue("edit.php?".$thispageurl->get_query_string()); + 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(); Index: question/format.php =================================================================== RCS file: /cvsroot/moodle/moodle/question/format.php,v retrieving revision 1.35.2.9 diff -u -r1.35.2.9 format.php --- question/format.php 3 Jul 2008 14:47:09 -0000 1.35.2.9 +++ question/format.php 7 Jul 2008 16:35:07 -0000 @@ -24,6 +24,7 @@ var $importerrors = 0; var $stoponerror = true; var $translator = null; + var $canaccessbackupdata = true; // functions to indicate import/export functionality @@ -134,6 +135,14 @@ $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 @@ * @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; } Index: lang/en_utf8/question.php =================================================================== RCS file: /cvsroot/moodle/moodle/lang/en_utf8/question.php,v retrieving revision 1.7.2.4 diff -u -r1.7.2.4 question.php --- lang/en_utf8/question.php 2 Jul 2008 09:14:57 -0000 1.7.2.4 +++ lang/en_utf8/question.php 7 Jul 2008 16:35:07 -0000 @@ -91,4 +91,5 @@ $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 click here.'; ?> Index: question/exportfile.php =================================================================== RCS file: question/exportfile.php diff -N question/exportfile.php --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ question/exportfile.php 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,17 @@ +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); +?>