]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-11905 - Users with the capability to export questions may not have the capability...
authortjhunt <tjhunt>
Tue, 8 Jul 2008 11:23:31 +0000 (11:23 +0000)
committertjhunt <tjhunt>
Tue, 8 Jul 2008 11:23:31 +0000 (11:23 +0000)
Note that once the file API is finished, this will have to be redone. I have created MDL-15573 for that.

lang/en_utf8/question.php
question/export.php
question/exportfile.php [new file with mode: 0644]
question/format.php

index dc8163ccea234d07715cea18d549402f20970b2e..bd140aac963712e406ce704920609c4e63f1ac61 100644 (file)
@@ -139,5 +139,6 @@ $string['unknown'] = 'Unknown';
 $string['unknownquestiontype'] = 'Unknown question type: $a.';
 $string['unknowntolerance'] = 'Unknown tolerance type $a';
 $string['unpublished'] = 'unshared';
+$string['yourfileshoulddownload'] = 'Your export file should start to download shortly. If not, please <a href=\"$a\">click here</a>.';
 $string['wrongprefix'] = 'Wrongly formatted nameprefix $a';
 ?>
index d0738298a4e6e9b151b544b71096d245cc6a61a9..0406b3b08ae0e4d41ad2eb3bbe80b003d7e39e72 100644 (file)
 
 
     // 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';
     } 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');
             $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));
 
 
         // 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 '<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[
+
+  function redirect() {
+      document.location.replace("' .  addslashes_js($efile) . '");
+  }
+  setTimeout("redirect()", 1000);
+//]]>
+</script>';
         }
-        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>";
 
-        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();
 
diff --git a/question/exportfile.php b/question/exportfile.php
new file mode 100644 (file)
index 0000000..a3947fe
--- /dev/null
@@ -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);
+?>
index ad5a9d4b5f19bcbd66183fa5cb05ce7b96eba086..5448a6bbe51e4749ae66ea2e88e2f563698950d9 100644 (file)
@@ -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
  ***********************/
@@ -769,8 +778,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;
     }