Better error message when invalid arguments are supplied.
[moodle.git] / file.php
index bd78762..78c3ecf 100644 (file)
--- a/file.php
+++ b/file.php
@@ -7,19 +7,29 @@
 
     $lifetime = 86400;
 
+    if (isset($file)) {     // workaround for situations where / syntax doesn't work
+        $PATH_INFO = $file;
+    }
+
     if (!$PATH_INFO) {
-        error("This script DEPENDS on $PATH_INFO being available.  Read the README.");
+        error("This script DEPENDS on PATH_INFO being available.  Read the README.");
     }
 
-    $args = get_slash_arguments();
-    $numargs = count($args);
+    if (! $args = get_slash_arguments()) {
+        error("No valid arguments supplied");
+    }
 
+    $numargs = count($args);
     $courseid = (integer)$args[0];
 
-    if ($courseid > 0) {
+    $course = get_record("course", "id", $courseid);
+
+    if ($course->category) {
         require_login($courseid);
     }
 
+    // it's OK to get here if no course was specified
+
     $pathname = "$CFG->dataroot$PATH_INFO";
     $filename = $args[$numargs-1];
 
         header("Expires: " . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT");
         header("Cache-control: max_age = $lifetime"); // a day
         header("Pragma: ");
-        header("Content-Length: ".filesize($pathname));
+        header("Content-disposition: inline; filename=$filename");
+        header("Content-length: ".filesize($pathname));
         header("Content-type: $mimetype");
         readfile("$pathname");
     } else {
-        error("Sorry, but the file you are looking for was not found", "/course/view.php?id=$courseid");
+        error("Sorry, but the file you are looking for was not found", "course/view.php?id=$courseid");
     }
 
     exit;