diff --git a/lib/filelib.php b/lib/filelib.php
index 8a384d7eda8..131c96649a5 100644
--- a/lib/filelib.php
+++ b/lib/filelib.php
@@ -4,6 +4,40 @@ require_once($CFG->libdir.'/libcurlemu/libcurlemu.inc.php'); // might be moved t
define('BYTESERVING_BOUNDARY', 's1k2o3d4a5k6s7'); //unique string constant
+function get_file_url($path, $options=null, $type='coursefile') {
+ global $CFG;
+
+ $path = trim($path, '/'); // no leading and trailing slashes
+
+ // type of file
+ switch ($type) {
+ case 'coursefile':
+ default:
+ $url = "$CFG->wwwroot/file.php";
+ }
+
+ if ($CFG->slasharguments) {
+ $parts = explode('/', $path);
+ $parts = array_map('urlencode', $parts);
+ $path = implode('/', $parts);
+ $ffurl = "$CFG->wwwroot/file.php/$path";
+ $separator = '?';
+ } else {
+ $path = urlencode("/$path");
+ $ffurl = "$CFG->wwwroot/file.php?file=$path";
+ $separator = '&';
+ }
+
+ if ($options) {
+ foreach ($options as $name=>$value) {
+ $ffurl = $ffurl.$separator.$name.'='.$value;
+ $separator = '&';
+ }
+ }
+
+ return $ffurl;
+}
+
/**
* Fetches content of file from Internet (using proxy if defined).
*
diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php
index e6f607e614b..b359978c6f1 100644
--- a/mod/assignment/lib.php
+++ b/mod/assignment/lib.php
@@ -1494,12 +1494,8 @@ class assignment_base {
$icon = mimeinfo('icon', $file);
- if ($CFG->slasharguments) {
- $ffurl = "$CFG->wwwroot/file.php/$filearea/$file";
- } else {
- $ffurl = "$CFG->wwwroot/file.php?file=/$filearea/$file";
- }
-
+ $ffurl = get_file_url("$filearea/$file", array('forcedownload'=>1));
+
$output .= '
'.
''.$file.'
';
}
diff --git a/mod/assignment/type/upload/assignment.class.php b/mod/assignment/type/upload/assignment.class.php
index bd5acaec03d..51ac9c82e3e 100644
--- a/mod/assignment/type/upload/assignment.class.php
+++ b/mod/assignment/type/upload/assignment.class.php
@@ -265,10 +265,10 @@ class assignment_upload extends assignment_base {
}
if ($files = get_directory_list($basedir, 'responses')) {
+ require_once($CFG->libdir.'/filelib.php');
foreach ($files as $key => $file) {
- require_once($CFG->libdir.'/filelib.php');
$icon = mimeinfo('icon', $file);
- $ffurl = "$CFG->wwwroot/file.php?file=/$filearea/$file";
+ $ffurl = get_file_url("$filearea/$file");
$output .= '
'.$file.' ';
}
}
@@ -326,9 +326,7 @@ class assignment_upload extends assignment_base {
foreach ($files as $key => $file) {
$icon = mimeinfo('icon', $file);
-
- $ffurl = "$CFG->wwwroot/file.php?file=/$filearea/$file";
-
+ $ffurl = get_file_url("$filearea/$file");
$output .= '
'.$file.'';
@@ -381,8 +379,7 @@ class assignment_upload extends assignment_base {
foreach ($files as $key => $file) {
$icon = mimeinfo('icon', $file);
-
- $ffurl = "$CFG->wwwroot/file.php?file=/$filearea/$file";
+ $ffurl = get_file_url("$filearea/$file");
$output .= '
'.$file.'';
diff --git a/mod/assignment/type/uploadsingle/assignment.class.php b/mod/assignment/type/uploadsingle/assignment.class.php
index 853422d1d1f..2ebfc6ed0bb 100644
--- a/mod/assignment/type/uploadsingle/assignment.class.php
+++ b/mod/assignment/type/uploadsingle/assignment.class.php
@@ -16,17 +16,12 @@ class assignment_uploadsingle extends assignment_base {
if ($basedir = $this->file_area($userid)) {
if ($files = get_directory_list($basedir)) {
-
+ require_once($CFG->libdir.'/filelib.php');
foreach ($files as $key => $file) {
- require_once($CFG->libdir.'/filelib.php');
$icon = mimeinfo('icon', $file);
-
- if ($CFG->slasharguments) {
- $ffurl = "$CFG->wwwroot/file.php/$filearea/$file";
- } else {
- $ffurl = "$CFG->wwwroot/file.php?file=/$filearea/$file";
- }
+ $ffurl = get_file_url("$filearea/$file");
+
//died right here
//require_once($ffurl);
$output = '
'.