MDL-32639 files: Improved File Manager download and zip support
authorFrederic Massart <fred@moodle.com>
Tue, 6 Nov 2012 06:44:56 +0000 (14:44 +0800)
committerFrederic Massart <fred@moodle.com>
Wed, 12 Dec 2012 06:41:04 +0000 (14:41 +0800)
Conflicts:

lib/filestorage/zip_packer.php

lib/form/filemanager.js
repository/draftfiles_ajax.php
repository/draftfiles_manager.php
theme/base/style/filemanager.css

index cbd528a..c715811 100644 (file)
@@ -217,9 +217,9 @@ M.form_filemanager.init = function(Y, options) {
                 params: {'filepath':filepath},
                 callback: function(id, obj, args) {
                     scope.filecount = obj.filecount;
                 params: {'filepath':filepath},
                 callback: function(id, obj, args) {
                     scope.filecount = obj.filecount;
-                    scope.check_buttons();
                     scope.options = obj;
                     scope.lazyloading = {};
                     scope.options = obj;
                     scope.lazyloading = {};
+                    scope.check_buttons();
                     scope.render(obj);
                 }
             }, true);
                     scope.render(obj);
                 }
             }, true);
index fbccb48..5e89450 100644 (file)
@@ -219,7 +219,7 @@ switch ($action) {
         $file = $fs->get_file($user_context->id, 'user', 'draft', $draftid, $filepath, '.');
 
         $parent_path = $file->get_parent_directory()->get_filepath();
         $file = $fs->get_file($user_context->id, 'user', 'draft', $draftid, $filepath, '.');
 
         $parent_path = $file->get_parent_directory()->get_filepath();
-        
+
         $filepath = explode('/', trim($file->get_filepath(), '/'));
         $filepath = array_pop($filepath);
 
         $filepath = explode('/', trim($file->get_filepath(), '/'));
         $filepath = array_pop($filepath);
 
@@ -245,11 +245,10 @@ switch ($action) {
 
         $stored_file = $fs->get_file($user_context->id, 'user', 'draft', $draftid, $filepath, '.');
         if ($filepath === '/') {
 
         $stored_file = $fs->get_file($user_context->id, 'user', 'draft', $draftid, $filepath, '.');
         if ($filepath === '/') {
-            $parent_path = '/';
             $filename = get_string('files').'.zip';
         } else {
             $filename = get_string('files').'.zip';
         } else {
-            $parent_path = $stored_file->get_parent_directory()->get_filepath();
-            $filename = trim($filepath, '/').'.zip';
+            $filename = explode('/', trim($filepath, '/'));
+            $filename = array_pop($filename) . '.zip';
         }
 
         // archive compressed file to an unused draft area
         }
 
         // archive compressed file to an unused draft area
@@ -257,7 +256,7 @@ switch ($action) {
         if ($newfile = $zipper->archive_to_storage(array('/' => $stored_file), $user_context->id, 'user', 'draft', $newdraftitemid, '/', $filename, $USER->id)) {
             $return = new stdClass();
             $return->fileurl  = moodle_url::make_draftfile_url($newdraftitemid, '/', $filename)->out();
         if ($newfile = $zipper->archive_to_storage(array('/' => $stored_file), $user_context->id, 'user', 'draft', $newdraftitemid, '/', $filename, $USER->id)) {
             $return = new stdClass();
             $return->fileurl  = moodle_url::make_draftfile_url($newdraftitemid, '/', $filename)->out();
-            $return->filepath = $parent_path;
+            $return->filepath = $filepath;
             echo json_encode($return);
         } else {
             echo json_encode(false);
             echo json_encode($return);
         } else {
             echo json_encode(false);
index 12497d5..fa966fc 100644 (file)
@@ -137,17 +137,17 @@ case 'downloaddir':
     $zipper = new zip_packer();
 
     $file = $fs->get_file($user_context->id, 'user', 'draft', $itemid, $draftpath, '.');
     $zipper = new zip_packer();
 
     $file = $fs->get_file($user_context->id, 'user', 'draft', $itemid, $draftpath, '.');
-    if ($file->get_parent_directory()) {
-        $parent_path = $file->get_parent_directory()->get_filepath();
-        $filename = trim($draftpath, '/').'.zip';
-    } else {
-        $parent_path = '/';
+    if ($draftpath === '/') {
         $filename = get_string('files').'.zip';
         $filename = get_string('files').'.zip';
+    } else {
+        $filename = explode('/', trim($draftpath, '/'));
+        $filename = array_pop($filename) . '.zip';
     }
 
     }
 
-    if ($newfile = $zipper->archive_to_storage(array('/' => $file), $user_context->id, 'user', 'draft', $itemid, $parent_path, $filename, $USER->id)) {
-        $fileurl = moodle_url::make_draftfile_url($itemid, '/', $filename)->out();
-        header('Location: ' . $fileurl );
+    $newdraftitemid = file_get_unused_draft_itemid();
+    if ($newfile = $zipper->archive_to_storage(array('/' => $file), $user_context->id, 'user', 'draft', $newdraftitemid, '/', $filename, $USER->id)) {
+        $fileurl = moodle_url::make_draftfile_url($newdraftitemid, '/', $filename)->out();
+        header('Location: ' . $fileurl);
     } else {
         print_error('cannotdownloaddir', 'repository');
     }
     } else {
         print_error('cannotdownloaddir', 'repository');
     }
@@ -268,7 +268,7 @@ default:
             $path = '/' . trim($draftpath, '/') . '/';
             $parts = explode('/', $path);
             foreach ($parts as $part) {
             $path = '/' . trim($draftpath, '/') . '/';
             $parts = explode('/', $path);
             foreach ($parts as $part) {
-                if (!empty($part)) {
+                if ($part != '') {
                     $trail .= ('/'.$part.'/');
                     $data->path[] = array('name'=>$part, 'path'=>$trail);
                     $home_url->param('draftpath', $trail);
                     $trail .= ('/'.$part.'/');
                     $data->path[] = array('name'=>$part, 'path'=>$trail);
                     $home_url->param('draftpath', $trail);
@@ -294,8 +294,10 @@ default:
             $home_url->param('action', 'mkdirform');
             echo ' <a href="'.$home_url->out().'">'.get_string('makeafolder', 'moodle').'</a>';
         }
             $home_url->param('action', 'mkdirform');
             echo ' <a href="'.$home_url->out().'">'.get_string('makeafolder', 'moodle').'</a>';
         }
-        $home_url->param('action', 'downloaddir');
-        echo html_writer::link($home_url, get_string('downloadfolder', 'repository'), array('target'=>'_blank'));
+        if (!empty($files->list)) {
+            $home_url->param('action', 'downloaddir');
+            echo ' ' . html_writer::link($home_url, get_string('downloadfolder', 'repository'), array('target'=>'_blank'));
+        }
     }
     echo '</div>';
 
     }
     echo '</div>';
 
index 9fc9fe4..2efbeef 100644 (file)
@@ -268,6 +268,7 @@ a.ygtvspacer:hover {color: transparent;text-decoration: none;}
 .filemanager.fm-loaded .filemanager-loading {display:none;}
 .filemanager.fm-maxfiles .fp-btn-add {display:none;}
 .filemanager.fm-maxfiles .dndupload-message {display:none;}
 .filemanager.fm-loaded .filemanager-loading {display:none;}
 .filemanager.fm-maxfiles .fp-btn-add {display:none;}
 .filemanager.fm-maxfiles .dndupload-message {display:none;}
+.filemanager.fm-noitems .fp-btn-download,
 .filemanager.fm-nofiles .fp-btn-download {display:none;}
 .filemanager .fm-empty-container {display:none;}
 .filemanager.fm-noitems .filemanager-container .fp-content {display:none;}
 .filemanager.fm-nofiles .fp-btn-download {display:none;}
 .filemanager .fm-empty-container {display:none;}
 .filemanager.fm-noitems .filemanager-container .fp-content {display:none;}