MDL-68665 assignfeedback_editpdf: Improve caching on stamps

This commit is contained in:
Jamie Stamp
2020-10-01 16:59:42 +01:00
parent 5486b031ee
commit 1343d84cc7
2 changed files with 47 additions and 14 deletions
+18 -1
View File
@@ -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);
+29 -13
View File
@@ -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());
}
}