MDL-68665 assignfeedback_editpdf: Improve caching on stamps
This commit is contained in:
@@ -47,7 +47,24 @@ function assignfeedback_editpdf_pluginfile($course,
|
||||
|
||||
require_once($CFG->dirroot . '/mod/assign/locallib.php');
|
||||
|
||||
if ($context->contextlevel == CONTEXT_MODULE) {
|
||||
if ($filearea === 'stamps' && $context->contextlevel === CONTEXT_SYSTEM) {
|
||||
|
||||
$itemid = (int)array_shift($args);
|
||||
|
||||
$relativepath = implode('/', $args);
|
||||
|
||||
$fullpath = "/{$context->id}/assignfeedback_editpdf/$filearea/$itemid/$relativepath";
|
||||
|
||||
$fs = get_file_storage();
|
||||
if (!$file = $fs->get_file_by_hash(sha1($fullpath)) or $file->is_directory()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$options['cacheability'] = 'public';
|
||||
$options['immutable'] = true;
|
||||
|
||||
send_stored_file($file, 0, 0, true, $options);
|
||||
} else if ($context->contextlevel == CONTEXT_MODULE) {
|
||||
|
||||
require_login($course, false, $cm);
|
||||
$itemid = (int)array_shift($args);
|
||||
|
||||
@@ -69,6 +69,7 @@ class assign_feedback_editpdf extends assign_feedback_plugin {
|
||||
$attempt);
|
||||
|
||||
$stampfiles = array();
|
||||
$systemfiles = array();
|
||||
$fs = get_file_storage();
|
||||
$syscontext = context_system::instance();
|
||||
|
||||
@@ -82,13 +83,17 @@ class assign_feedback_editpdf extends assign_feedback_plugin {
|
||||
foreach ($files as $file) {
|
||||
$filename = $file->get_filename();
|
||||
if ($filename !== '.') {
|
||||
$systemfiles[] = $filename;
|
||||
|
||||
$existingfile = $fs->file_exists(
|
||||
$this->assignment->get_context()->id,
|
||||
'assignfeedback_editpdf',
|
||||
'stamps',
|
||||
$grade->id,
|
||||
'/',
|
||||
$file->get_filename()
|
||||
);
|
||||
|
||||
$existingfile = $fs->get_file($this->assignment->get_context()->id,
|
||||
'assignfeedback_editpdf',
|
||||
'stamps',
|
||||
$grade->id,
|
||||
'/',
|
||||
$file->get_filename());
|
||||
if (!$existingfile) {
|
||||
$newrecord = new stdClass();
|
||||
$newrecord->contextid = $this->assignment->get_context()->id;
|
||||
@@ -109,13 +114,24 @@ class assign_feedback_editpdf extends assign_feedback_plugin {
|
||||
foreach ($files as $file) {
|
||||
$filename = $file->get_filename();
|
||||
if ($filename !== '.') {
|
||||
$url = moodle_url::make_pluginfile_url($this->assignment->get_context()->id,
|
||||
'assignfeedback_editpdf',
|
||||
'stamps',
|
||||
$grade->id,
|
||||
'/',
|
||||
$file->get_filename(),
|
||||
false);
|
||||
|
||||
// Check to see if the file exists in system context.
|
||||
$insystemfiles = in_array($filename, $systemfiles);
|
||||
|
||||
// If stamp is available in the system context, use that copy.
|
||||
// If not then fall back to file saved in the files table.
|
||||
$context = $insystemfiles ? $syscontext->id : $this->assignment->get_context()->id;
|
||||
$itemid = $insystemfiles ? 0 : $grade->id;
|
||||
|
||||
$url = moodle_url::make_pluginfile_url(
|
||||
$context,
|
||||
'assignfeedback_editpdf',
|
||||
'stamps',
|
||||
$itemid,
|
||||
'/',
|
||||
$file->get_filename(),
|
||||
false
|
||||
);
|
||||
array_push($stampfiles, $url->out());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user