From 7d3ebf4c1945485db13323a3edc6211c711abae2 Mon Sep 17 00:00:00 2001 From: Marina Glancy Date: Thu, 9 Feb 2012 13:55:41 +0800 Subject: [PATCH] MDL-30709: Fixed bug with inserting files from Recent files repository Two parts of changes: in assignment module function assignment_get_file_info was missing and when populating the list of recent files the function get_file_info was not called, which caused populating the list of recent files with the files that could not later be inserted --- mod/assignment/lib.php | 39 +++++++++++++++++++++++++++++++++++++++ repository/recent/lib.php | 22 +++++++++++++--------- 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index 0da882757dd..6ef703d660c 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -3940,6 +3940,45 @@ function assignment_get_file_areas($course, $cm, $context) { return $areas; } +/** + * File browsing support for assignment module. + * + * @param object $browser + * @param object $areas + * @param object $course + * @param object $cm + * @param object $context + * @param string $filearea + * @param int $itemid + * @param string $filepath + * @param string $filename + * @return object file_info instance or null if not found + */ +function assignment_get_file_info($browser, $areas, $course, $cm, $context, $filearea, $itemid, $filepath, $filename) { + global $CFG, $DB, $USER; + + if ($context->contextlevel != CONTEXT_MODULE || $filearea != 'submission') { + return null; + } + if (!$submission = $DB->get_record('assignment_submissions', array('id' => $itemid))) { + return null; + } + if (!(($submission->userid == $USER->id && has_capability('mod/assignment:view', $context)) + || has_capability('mod/assignment:grade', $context))) { + // no permission to view this submission + return null; + } + + $fs = get_file_storage(); + $filepath = is_null($filepath) ? '/' : $filepath; + $filename = is_null($filename) ? '.' : $filename; + if (!($storedfile = $fs->get_file($context->id, 'mod_assignment', $filearea, $itemid, $filepath, $filename))) { + return null; + } + $urlbase = $CFG->wwwroot.'/pluginfile.php'; + return new file_info_stored($browser, $context, $storedfile, $urlbase, $filearea, $itemid, true, true, false); +} + /** * Return a list of page types * @param string $pagetype current page type diff --git a/repository/recent/lib.php b/repository/recent/lib.php index da4e61f0de9..e9756dd73f4 100644 --- a/repository/recent/lib.php +++ b/repository/recent/lib.php @@ -97,7 +97,7 @@ class repository_recent extends repository { * @return mixed */ public function get_listing($encodedpath = '', $page = '') { - global $CFG, $USER, $OUTPUT; + global $OUTPUT; $ret = array(); $ret['dynload'] = true; $ret['nosearch'] = true; @@ -108,14 +108,18 @@ class repository_recent extends repository { try { foreach ($files as $file) { $params = base64_encode(serialize($file)); - $node = array( - 'title' => $file['filename'], - 'size' => 0, - 'date' => '', - 'source'=> $params, - 'thumbnail' => $OUTPUT->pix_url(file_extension_icon($file['filename'], 32))->out(false), - ); - $list[] = $node; + // Check that file exists and accessible + $filesize = $this->get_file_size($params); + if (!empty($filesize)) { + $node = array( + 'title' => $file['filename'], + 'size' => $filesize, + 'date' => '', + 'source'=> $params, + 'thumbnail' => $OUTPUT->pix_url(file_extension_icon($file['filename'], 32))->out(false), + ); + $list[] = $node; + } } } catch (Exception $e) { throw new repository_exception('emptyfilelist', 'repository_recent');