Merge branch 'MDL-32639-23' of git://github.com/FMCorz/moodle into MOODLE_23_STABLE
authorDan Poltawski <dan@moodle.com>
Tue, 8 Jan 2013 06:46:34 +0000 (14:46 +0800)
committerDan Poltawski <dan@moodle.com>
Tue, 8 Jan 2013 06:46:34 +0000 (14:46 +0800)
lib/filestorage/zip_archive.php
lib/form/filemanager.js
repository/draftfiles_ajax.php
repository/draftfiles_manager.php
theme/base/style/filemanager.css

index 9acd1d3..985c356 100644 (file)
@@ -288,7 +288,7 @@ class zip_archive extends file_archive {
         if (!isset($this->za)) {
             return false;
         }
-        $localname = ltrim($localname, '/'). '/';
+        $localname = trim($localname, '/'). '/';
         $localname = $this->mangle_pathname($localname);
 
         if ($localname === '/') {
@@ -296,7 +296,13 @@ class zip_archive extends file_archive {
             return false;
         }
 
-        return $this->za->addEmptyDir($localname);
+        if ($localname !== '') {
+            if (!$this->za->addEmptyDir($localname)) {
+                return false;
+            }
+            $this->modified = true;
+        }
+        return true;
     }
 
     /**
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;
-                    scope.check_buttons();
                     scope.options = obj;
                     scope.lazyloading = {};
+                    scope.check_buttons();
                     scope.render(obj);
                 }
             }, true);
index 3857a0d..31b7e15 100644 (file)
@@ -220,7 +220,11 @@ switch ($action) {
 
         $parent_path = $file->get_parent_directory()->get_filepath();
 
-        if ($newfile = $zipper->archive_to_storage(array($file), $user_context->id, 'user', 'draft', $draftid, $parent_path, $filepath.'.zip', $USER->id)) {
+        $filepath = explode('/', trim($file->get_filepath(), '/'));
+        $filepath = array_pop($filepath);
+        $zipfile = repository::get_unused_filename($draftid, $parent_path, $filepath . '.zip');
+
+        if ($newfile = $zipper->archive_to_storage(array($filepath => $file), $user_context->id, 'user', 'draft', $draftid, $parent_path, $zipfile, $USER->id)) {
             $return = new stdClass();
             $return->filepath = $parent_path;
             echo json_encode($return);
@@ -242,19 +246,18 @@ switch ($action) {
 
         $stored_file = $fs->get_file($user_context->id, 'user', 'draft', $draftid, $filepath, '.');
         if ($filepath === '/') {
-            $parent_path = '/';
             $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
         $newdraftitemid = file_get_unused_draft_itemid();
-        if ($newfile = $zipper->archive_to_storage(array($stored_file), $user_context->id, 'user', 'draft', $newdraftitemid, '/', $filename, $USER->id)) {
+        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);
index 0bbc3a3..7f4dee7 100644 (file)
@@ -137,17 +137,17 @@ case 'downloaddir':
     $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';
+    } 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');
     }
@@ -159,14 +159,17 @@ case 'zip':
     $file = $fs->get_file($user_context->id, 'user', 'draft', $itemid, $draftpath, '.');
     if (!$file->get_parent_directory()) {
         $parent_path = '/';
+        $filepath = '/';
         $filename = get_string('files').'.zip';
     } else {
         $parent_path = $file->get_parent_directory()->get_filepath();
         $filepath = explode('/', trim($file->get_filepath(), '/'));
-        $filename = array_pop($filepath).'.zip';
+        $filepath = array_pop($filepath);
+        $filename = $filepath.'.zip';
     }
 
-    $newfile = $zipper->archive_to_storage(array($file), $user_context->id, 'user', 'draft', $itemid, $parent_path, $filename, $USER->id);
+    $filename = repository::get_unused_filename($itemid, $parent_path, $filename);
+    $newfile = $zipper->archive_to_storage(array($filepath => $file), $user_context->id, 'user', 'draft', $itemid, $parent_path, $filename, $USER->id);
 
     $home_url->param('action', 'browse');
     $home_url->param('draftpath', $parent_path);
@@ -266,7 +269,7 @@ default:
             $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);
@@ -292,8 +295,10 @@ default:
             $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>';
 
index 2cecdc4..5693ab2 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-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;}