diff --git a/file.php b/file.php index e8501000d5910..3448ee0d83417 100644 --- a/file.php +++ b/file.php @@ -34,9 +34,7 @@ } // security: limit access to existing course subdirectories - // note: course ID must be specified - // note: the lang field is needed for the course language switching hack in weblib.php - if (!$course = get_record_sql("SELECT id, lang FROM {$CFG->prefix}course WHERE id='".(int)$args[0]."'")) { + if (!$course = get_record_sql("SELECT * FROM {$CFG->prefix}course WHERE id='".(int)$args[0]."'")) { error('Invalid course ID'); } diff --git a/lib/filelib.php b/lib/filelib.php index 963dd53440a2e..eeb2eb3942aed 100644 --- a/lib/filelib.php +++ b/lib/filelib.php @@ -216,10 +216,12 @@ function get_mimetype_description($mimetype,$capitalise=false) { function send_file($path, $filename, $lifetime=86400 , $filter=0, $pathisstring=false, $forcedownload=false, $mimetype='') { global $CFG; - // Use given MIME type if specified, otherwise guess it using mimeinfo. - // Always use application/x-forcedownload if that's requested. - $mimetype = $forcedownload ? 'application/x-forcedownload' : - ($mimetype ? $mimetype : mimeinfo('type', $filename)); + // Use given MIME type if specified, otherwise guess it using mimeinfo. + // IE, Konqueror and Opera open html file directly in browser from web even when directed to save it to disk :-O + // only Firefox saves all files locally before opening when content-disposition: attachment stated + $isFF = check_browser_version('Firefox', '1.5'); // only FF > 1.5 properly tested + $mimetype = ($forcedownload and !$isFF) ? 'application/x-forcedownload' : + ($mimetype ? $mimetype : mimeinfo('type', $filename)); $lastmodified = $pathisstring ? time() : filemtime($path); $filesize = $pathisstring ? strlen($path) : filesize($path); diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 6443057425f9d..9448ce2436b8e 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -5126,6 +5126,16 @@ function check_browser_version($brand='MSIE', $version=5.5) { switch ($brand) { + case 'Firefox': /// Mozilla Firefox browsers + + if (preg_match("/Firefox\/([0-9\.]+)/i", $agent, $match)) { + if (version_compare($match[1], $version) >= 0) { + return true; + } + } + break; + + case 'Gecko': /// Gecko based browsers if (substr_count($agent, 'Camino')) {