MDL-32867 filemanager and repository
authorDongsheng Cai <dongsheng@moodle.com>
Wed, 16 May 2012 06:08:37 +0000 (14:08 +0800)
committerMarina Glancy <marina@moodle.com>
Mon, 21 May 2012 03:57:55 +0000 (11:57 +0800)
1. Allowing "." as filename, so filemanager can rename folder
2. Fixed import_external_file method
3. Disallow recent repository to list file references

lib/filestorage/file_storage.php
lib/filestorage/stored_file.php
repository/recent/lib.php

index 1610e29..fd3fb10 100644 (file)
@@ -1777,19 +1777,16 @@ class file_storage {
      * Convert file alias to local file
      *
      * @param stored_file $storedfile a stored_file instances
-     * @return stored_file|bool stored_file or return false when fail
+     * @return stored_file stored_file
      */
     public function import_external_file($storedfile) {
         global $CFG;
         require_once($CFG->dirroot.'/repository/lib.php');
         // sync external file
-        if (repository::sync_external_file($storedfile)) {
-            // Remove file references
-            $storedfile->delete_reference();
-            return $storedfile;
-        } else {
-            return false;
-        }
+        repository::sync_external_file($storedfile);
+        // Remove file references
+        $storedfile->delete_reference();
+        return $storedfile;
     }
 
     /**
index 6fa43f9..f20a528 100644 (file)
@@ -126,7 +126,10 @@ class stored_file {
                 }
 
                 if ($field == 'filename') {
-                    $value = clean_param($value, PARAM_FILE);
+                    // folder has filename == '.', so we pass this
+                    if ($value != '.') {
+                        $value = clean_param($value, PARAM_FILE);
+                    }
                     if ($value === '') {
                         throw new file_exception('storedfileproblem', 'Invalid file name');
                     }
index fa3b727..25abf00 100644 (file)
@@ -64,8 +64,12 @@ class repository_recent extends repository {
     private function get_recent_files($limitfrom = 0, $limit = DEFAULT_RECENT_FILES_NUM) {
         // XXX: get current itemid
         global $USER, $DB, $itemid;
+        // This SQL will ignore draft files if not owned by current user.
+        // Ignore all file references.
         $sql = 'SELECT files1.*
                   FROM {files} files1
+             LEFT JOIN {files_reference} r
+                       ON files1.referencefileid = r.id
                   JOIN (
                       SELECT contenthash, filename, MAX(id) AS id
                         FROM {files}
@@ -74,7 +78,8 @@ class repository_recent extends repository {
                          AND ((filearea = :filearea1 AND itemid = :itemid) OR filearea != :filearea2)
                     GROUP BY contenthash, filename
                   ) files2 ON files1.id = files2.id
-                ORDER BY files1.timemodified DESC';
+                 WHERE r.repositoryid is NULL
+              ORDER BY files1.timemodified DESC';
         $params = array(
             'userid' => $USER->id,
             'filename' => '.',