* Handles the sending of file data to the user's browser, including support for
* byteranges etc.
*
+ * The $options parameter supports the following keys:
+ * (string|null) preview - send the preview of the file (e.g. "thumb" for a thumbnail)
+ * (string|null) filename - overrides the implicit filename
+ * (bool) dontdie - return control to caller afterwards. this is not recommended and only used for cleanup tasks.
+ * if this is passed as true, ignore_user_abort is called. if you don't want your processing to continue on cancel,
+ * you must detect this case when control is returned using connection_aborted. Please not that session is closed
+ * and should not be reopened.
+ *
* @category files
* @global stdClass $CFG
* @global stdClass $COURSE
* @param int $lifetime Number of seconds before the file should expire from caches (default 24 hours)
* @param int $filter 0 (default)=no filtering, 1=all files, 2=html files only
* @param bool $forcedownload If true (default false), forces download of file rather than view in browser/plugin
- * @param string $filename Override filename
- * @param bool $dontdie - return control to caller afterwards. this is not recommended and only used for cleanup tasks.
- * if this is passed as true, ignore_user_abort is called. if you don't want your processing to continue on cancel,
- * you must detect this case when control is returned using connection_aborted. Please not that session is closed
- * and should not be reopened.
- * @return null script execution stopped unless $dontdie is true
+ * @param array $options additional options affecting the file serving
+ * @return null script execution stopped unless $options['dontdie'] is true
*/
-function send_stored_file($stored_file, $lifetime=86400 , $filter=0, $forcedownload=false, $filename=null, $dontdie=false) {
+function send_stored_file($stored_file, $lifetime=86400 , $filter=0, $forcedownload=false, array $options=array()) {
global $CFG, $COURSE, $SESSION;
+ if (empty($options['filename'])) {
+ $filename = null;
+ } else {
+ $filename = $options['filename'];
+ }
+
+ if (empty($options['dontdie'])) {
+ $dontdie = false;
+ } else {
+ $dontdie = true;
+ }
+
if (!$stored_file or $stored_file->is_directory()) {
// nothing to serve
if ($dontdie) {
send_file_not_found();
}
- send_stored_file($file, 10*60, 0, true); // download MUST be forced - security!
+ send_stored_file($file, 10*60, 0, true, array('preview' => $preview)); // download MUST be forced - security!
// ========================================================================================================================
} else if ($component === 'grade') {
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'feedback' and $context->contextlevel == CONTEXT_COURSE) {
//TODO: nobody implemented this yet in grade edit form!!
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else {
send_file_not_found();
}
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, true);
+ send_stored_file($file, 60*60, 0, true, array('preview' => $preview));
} else {
send_file_not_found();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'event_description' and $context->contextlevel == CONTEXT_USER) {
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'event_description' and $context->contextlevel == CONTEXT_COURSE) {
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else {
send_file_not_found();
$theme = theme_config::load($themename);
redirect($theme->pix_url('u/'.$filename, 'moodle'));
}
- send_stored_file($file, 60*60*24); // enable long caching, there are many images on each page
+ send_stored_file($file, 60*60*24, 0, false, array('preview' => $preview)); // enable long caching, there are many images on each page
} else if ($filearea === 'private' and $context->contextlevel == CONTEXT_USER) {
require_login();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 0, 0, true); // must force download - security!
+ send_stored_file($file, 0, 0, true, array('preview' => $preview)); // must force download - security!
} else if ($filearea === 'profile' and $context->contextlevel == CONTEXT_USER) {
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 0, 0, true); // must force download - security!
+ send_stored_file($file, 0, 0, true, array('preview' => $preview)); // must force download - security!
} else if ($filearea === 'profile' and $context->contextlevel == CONTEXT_COURSE) {
$userid = (int)array_shift($args);
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 0, 0, true); // must force download - security!
+ send_stored_file($file, 0, 0, true, array('preview' => $preview)); // must force download - security!
} else if ($filearea === 'backup' and $context->contextlevel == CONTEXT_USER) {
require_login();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 0, 0, true); // must force download - security!
+ send_stored_file($file, 0, 0, true, array('preview' => $preview)); // must force download - security!
} else {
send_file_not_found();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else {
send_file_not_found();
}
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'section') {
if ($CFG->forcelogin) {
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else {
send_file_not_found();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'icon') {
$filename = array_pop($args);
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60);
+ send_stored_file($file, 60*60, 0, false, array('preview' => $preview));
} else {
send_file_not_found();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else {
send_file_not_found();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 0, 0, $forcedownload);
+ send_stored_file($file, 0, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'section' and $context->contextlevel == CONTEXT_COURSE) {
require_login($course);
}
session_get_instance()->write_close();
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'activity' and $context->contextlevel == CONTEXT_MODULE) {
require_login($course, false, $cm);
}
session_get_instance()->write_close();
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
} else if ($filearea === 'automated' and $context->contextlevel == CONTEXT_COURSE) {
// Backup files that were generated by the automated backup systems.
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 0, 0, $forcedownload);
+ send_stored_file($file, 0, 0, $forcedownload, array('preview' => $preview));
} else {
send_file_not_found();
}
session_get_instance()->write_close(); // unlock session during fileserving
- send_stored_file($file, 60*60, 0, $forcedownload);
+ send_stored_file($file, 60*60, 0, $forcedownload, array('preview' => $preview));
}
// ========================================================================================================================
$lifetime = isset($CFG->filelifetime) ? $CFG->filelifetime : 86400;
// finally send the file
- send_stored_file($file, $lifetime, 0);
+ send_stored_file($file, $lifetime, 0, false, array('preview' => $preview));
}
$filefunction = $component.'_pluginfile';