Merge branch 'wip-MDL-30709-master' of git://github.com/marinaglancy/moodle
authorSam Hemelryk <sam@moodle.com>
Tue, 14 Feb 2012 04:14:05 +0000 (17:14 +1300)
committerSam Hemelryk <sam@moodle.com>
Tue, 14 Feb 2012 04:14:05 +0000 (17:14 +1300)
mod/assignment/lib.php
repository/recent/lib.php

index 67feffa..7a5ab20 100644 (file)
@@ -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
index da4e61f..e9756dd 100644 (file)
@@ -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');