Skip to content

Commit

Permalink
Merge branch 'MDL-32639-master' of git://github.com/FMCorz/moodle
Browse files Browse the repository at this point in the history
  • Loading branch information
danpoltawski committed Jan 8, 2013
2 parents 81a38f5 + c24cd39 commit bfb5580
Show file tree
Hide file tree
Showing 7 changed files with 62 additions and 33 deletions.
25 changes: 19 additions & 6 deletions lib/filelib.php
Original file line number Diff line number Diff line change
Expand Up @@ -463,23 +463,36 @@ function file_rewrite_pluginfile_urls($text, $file, $contextid, $component, $fil
* @global stdClass $CFG
* @global stdClass $USER
* @param int $draftitemid the draft area item id.
* @param string $filepath path to the directory from which the information have to be retrieved.
* @return array with the following entries:
* 'filecount' => number of files in the draft area.
* 'filesize' => total size of the files in the draft area.
* 'foldercount' => number of folders in the draft area.
* (more information will be added as needed).
*/
function file_get_draft_area_info($draftitemid) {
function file_get_draft_area_info($draftitemid, $filepath = '/') {
global $CFG, $USER;

$usercontext = context_user::instance($USER->id);
$fs = get_file_storage();

$results = array();
$results = array(
'filecount' => 0,
'foldercount' => 0,
'filesize' => 0
);

// The number of files
$draftfiles = $fs->get_area_files($usercontext->id, 'user', 'draft', $draftitemid, 'id', false);
$results['filecount'] = count($draftfiles);
$results['filesize'] = 0;
if ($filepath != '/') {
$draftfiles = $fs->get_directory_files($usercontext->id, 'user', 'draft', $draftitemid, $filepath, true, true);
} else {
$draftfiles = $fs->get_area_files($usercontext->id, 'user', 'draft', $draftitemid, 'id', true);
}
foreach ($draftfiles as $file) {
if ($file->is_directory()) {
$results['foldercount'] += 1;
} else {
$results['filecount'] += 1;
}
$results['filesize'] += $file->get_filesize();
}

Expand Down
10 changes: 6 additions & 4 deletions lib/filestorage/zip_archive.php
Original file line number Diff line number Diff line change
Expand Up @@ -361,18 +361,20 @@ public function add_directory($localname) {
if (!isset($this->za)) {
return false;
}
$localname = ltrim($localname, '/'). '/';
$localname = trim($localname, '/'). '/';
$localname = $this->mangle_pathname($localname);

if ($localname === '/') {
//sorry - conversion failed badly
return false;
}

if (!$this->za->addEmptyDir($localname)) {
return false;
if ($localname !== '') {
if (!$this->za->addEmptyDir($localname)) {
return false;
}
$this->modified = true;
}
$this->modified = true;
return true;
}

Expand Down
6 changes: 6 additions & 0 deletions lib/filestorage/zip_packer.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ public function archive_to_pathname($files, $archivefile) {
}
}

// We can consider that there was an error if the file generated does not contain anything.
if ($ziparch->count() == 0) {
$result = false;
debugging("Nothing was added to the zip file", DEBUG_DEVELOPER);
}

return ($ziparch->close() && $result);
}

Expand Down
2 changes: 1 addition & 1 deletion lib/form/filemanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -220,9 +220,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);
Expand Down
19 changes: 11 additions & 8 deletions repository/draftfiles_ajax.php
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,11 @@

$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);
Expand All @@ -234,27 +238,26 @@

$zipper = get_file_packer('application/zip');
$fs = get_file_storage();
$area = file_get_draft_area_info($draftid);
if ($area['filecount'] == 0) {
$area = file_get_draft_area_info($draftid, $filepath);
if ($area['filecount'] == 0 && $area['foldercount'] == 0) {
echo json_encode(false);
die;
}

$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);
Expand Down
31 changes: 18 additions & 13 deletions repository/draftfiles_manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -139,17 +139,17 @@
$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');
}
Expand All @@ -161,14 +161,17 @@
$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);
Expand Down Expand Up @@ -269,7 +272,7 @@
$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);
Expand All @@ -295,8 +298,10 @@
$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>';

Expand Down
2 changes: 1 addition & 1 deletion theme/base/style/filemanager.css
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +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-nofiles .fp-btn-download {display:none;}
.filemanager.fm-noitems .fp-btn-download {display:none;}
.filemanager .fm-empty-container {display:none;}
.filemanager.fm-noitems .filemanager-container .fp-content {display:none;}
.filemanager .filemanager-updating {display:none;text-align:center;}
Expand Down

0 comments on commit bfb5580

Please sign in to comment.