Do not send file list for select all on Download/delete
- When all files are selected, do not send the whole file list - Download will trigger download for the parent folder, also works with root - Delete will send "allfiles" to the server that will find the file list or the passed directory by itself
This commit is contained in:
parent
30662fa7ac
commit
d5397d813c
|
@ -9,8 +9,21 @@ OCP\JSON::callCheck();
|
|||
// Get data
|
||||
$dir = stripslashes($_POST["dir"]);
|
||||
$files = isset($_POST["file"]) ? $_POST["file"] : $_POST["files"];
|
||||
$allFiles = isset($_POST["allfiles"]) ? $_POST["allfiles"] : $_POST["allfiles"];
|
||||
if ($allFiles === 'true') {
|
||||
$allFiles = true;
|
||||
}
|
||||
|
||||
$files = json_decode($files);
|
||||
// delete all files in dir ?
|
||||
if ($allFiles) {
|
||||
$files = array();
|
||||
$fileList = \OC\Files\Filesystem::getDirectoryContent($dir);
|
||||
foreach ($fileList as $fileInfo) {
|
||||
$files[] = $fileInfo['name'];
|
||||
}
|
||||
} else {
|
||||
$files = json_decode($files);
|
||||
}
|
||||
$filesWithError = '';
|
||||
|
||||
$success = true;
|
||||
|
|
|
@ -582,30 +582,49 @@ window.FileList={
|
|||
}});
|
||||
}
|
||||
},
|
||||
do_delete:function(files) {
|
||||
if (files.substr) {
|
||||
do_delete:function(files, dir) {
|
||||
var params;
|
||||
if (files && files.substr) {
|
||||
files=[files];
|
||||
}
|
||||
if (files) {
|
||||
for (var i=0; i<files.length; i++) {
|
||||
var deleteAction = FileList.findFileEl(files[i]).children("td.date").children(".action.delete");
|
||||
deleteAction.removeClass('delete-icon').addClass('progress-icon');
|
||||
}
|
||||
}
|
||||
// Finish any existing actions
|
||||
if (FileList.lastAction) {
|
||||
FileList.lastAction();
|
||||
}
|
||||
|
||||
var fileNames = JSON.stringify(files);
|
||||
var params = {
|
||||
dir: dir || FileList.getCurrentDirectory()
|
||||
};
|
||||
if (files) {
|
||||
params.files = JSON.stringify(files);
|
||||
}
|
||||
else {
|
||||
// no files passed, delete all in current dir
|
||||
params.allfiles = true;
|
||||
}
|
||||
|
||||
$.post(OC.filePath('files', 'ajax', 'delete.php'),
|
||||
{dir:$('#dir').val(),files:fileNames},
|
||||
params,
|
||||
function(result) {
|
||||
if (result.status === 'success') {
|
||||
if (params.allfiles) {
|
||||
// clear whole list
|
||||
$('#fileList tr').remove();
|
||||
}
|
||||
else {
|
||||
$.each(files,function(index,file) {
|
||||
var files = FileList.findFileEl(file);
|
||||
files.remove();
|
||||
files.find('input[type="checkbox"]').removeAttr('checked');
|
||||
files.removeClass('selected');
|
||||
});
|
||||
}
|
||||
procesSelection();
|
||||
checkTrashStatus();
|
||||
FileList.updateFileSummary();
|
||||
|
@ -622,11 +641,18 @@ window.FileList={
|
|||
setTimeout(function() {
|
||||
OC.Notification.hide();
|
||||
}, 10000);
|
||||
if (params.allfiles) {
|
||||
// reload the page as we don't know what files were deleted
|
||||
// and which ones remain
|
||||
FileList.reload();
|
||||
}
|
||||
else {
|
||||
$.each(files,function(index,file) {
|
||||
var deleteAction = FileList.findFileEl(file).find('.action.delete');
|
||||
deleteAction.removeClass('progress-icon').addClass('delete-icon');
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
createFileSummary: function() {
|
||||
|
@ -794,6 +820,13 @@ window.FileList={
|
|||
$(e).removeClass("searchresult");
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Returns whether all files are selected
|
||||
* @return true if all files are selected, false otherwise
|
||||
*/
|
||||
isAllSelected: function() {
|
||||
return $('#select_all').prop('checked');
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the download URL of the given file
|
||||
|
@ -801,10 +834,13 @@ window.FileList={
|
|||
* @param dir optional directory in which the file name is, defaults to the current directory
|
||||
*/
|
||||
getDownloadUrl: function(filename, dir) {
|
||||
var files = filename;
|
||||
if ($.isArray(filename)) {
|
||||
files = JSON.stringify(filename);
|
||||
}
|
||||
var params = {
|
||||
files: filename,
|
||||
dir: dir || FileList.getCurrentDirectory(),
|
||||
download: null
|
||||
files: files
|
||||
};
|
||||
return OC.filePath('files', 'ajax', 'download.php') + '?' + OC.buildQueryString(params);
|
||||
}
|
||||
|
|
|
@ -364,23 +364,26 @@ $(document).ready(function() {
|
|||
});
|
||||
|
||||
$('.download').click('click',function(event) {
|
||||
var files=getSelectedFilesTrash('name');
|
||||
var fileslist = JSON.stringify(files);
|
||||
var dir=$('#dir').val()||'/';
|
||||
OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.'));
|
||||
// use special download URL if provided, e.g. for public shared files
|
||||
var downloadURL = document.getElementById("downloadURL");
|
||||
if ( downloadURL ) {
|
||||
window.location = downloadURL.value+"&download&files=" + encodeURIComponent(fileslist);
|
||||
} else {
|
||||
window.location = OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: fileslist });
|
||||
var files;
|
||||
var dir = FileList.getCurrentDirectory();
|
||||
if (FileList.isAllSelected()) {
|
||||
files = OC.basename(dir);
|
||||
dir = OC.dirname(dir) || '/';
|
||||
}
|
||||
else {
|
||||
files = getSelectedFilesTrash('name');
|
||||
}
|
||||
OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.'));
|
||||
OC.redirect(FileList.getDownloadUrl(files, dir));
|
||||
return false;
|
||||
});
|
||||
|
||||
$('.delete-selected').click(function(event) {
|
||||
var files=getSelectedFilesTrash('name');
|
||||
event.preventDefault();
|
||||
if (FileList.isAllSelected()) {
|
||||
files = null;
|
||||
}
|
||||
FileList.do_delete(files);
|
||||
return false;
|
||||
});
|
||||
|
|
|
@ -69,7 +69,7 @@ describe('FileActions tests', function() {
|
|||
$tr.find('.action[data-action=Download]').click();
|
||||
|
||||
expect(redirectStub.calledOnce).toEqual(true);
|
||||
expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?files=test%20download%20File.txt&dir=%2Fsubdir&download');
|
||||
expect(redirectStub.getCall(0).args[0]).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=test%20download%20File.txt');
|
||||
redirectStub.restore();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -58,8 +58,15 @@ describe('FileList tests', function() {
|
|||
expect($tr.attr('data-permissions')).toEqual('31');
|
||||
//expect($tr.attr('data-mime')).toEqual('httpd/unix-directory');
|
||||
});
|
||||
it('returns correct download URL', function() {
|
||||
expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?files=some%20file.txt&dir=%2Fsubdir&download');
|
||||
expect(FileList.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?files=some%20file.txt&dir=%2Fanotherpath%2Fabc&download');
|
||||
describe('Download Url', function() {
|
||||
it('returns correct download URL for single files', function() {
|
||||
expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=some%20file.txt');
|
||||
expect(FileList.getDownloadUrl('some file.txt', '/anotherpath/abc')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fanotherpath%2Fabc&files=some%20file.txt');
|
||||
$('#dir').val('/');
|
||||
expect(FileList.getDownloadUrl('some file.txt')).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2F&files=some%20file.txt');
|
||||
});
|
||||
it('returns correct download URL for multiple files', function() {
|
||||
expect(FileList.getDownloadUrl(['a b c.txt', 'd e f.txt'])).toEqual(OC.webroot + '/index.php/apps/files/ajax/download.php?dir=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
/*
|
||||
* Copyright (c) 2014
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
/* global OC, FileList, FileActions */
|
||||
|
||||
// Override download path to files_sharing/public.php
|
||||
function fileDownloadPath(dir, file) {
|
||||
var url = $('#downloadURL').val();
|
||||
|
@ -28,12 +40,20 @@ $(document).ready(function() {
|
|||
|
||||
// override since the format is different
|
||||
FileList.getDownloadUrl = function(filename, dir) {
|
||||
// we use this because we need the service and token attributes
|
||||
var tr = FileList.findFileEl(filename);
|
||||
if (tr.length > 0) {
|
||||
return $(tr).find('a.name').attr('href') + '&download';
|
||||
if ($.isArray(filename)) {
|
||||
filename = JSON.stringify(filename);
|
||||
}
|
||||
return null;
|
||||
var path = dir || FileList.getCurrentDirectory();
|
||||
var params = {
|
||||
service: 'files',
|
||||
t: $('#sharingToken').val(),
|
||||
path: path,
|
||||
download: null
|
||||
};
|
||||
if (filename) {
|
||||
params.files = filename;
|
||||
}
|
||||
return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -103,7 +103,12 @@ class OC_Files {
|
|||
if ($xsendfile) {
|
||||
$filename = OC_Helper::moveToNoClean($filename);
|
||||
}
|
||||
// downloading root ?
|
||||
if ($files === '') {
|
||||
$name = 'download.zip';
|
||||
} else {
|
||||
$name = $files . '.zip';
|
||||
}
|
||||
set_time_limit($executionTime);
|
||||
} else {
|
||||
$zip = false;
|
||||
|
@ -198,6 +203,8 @@ class OC_Files {
|
|||
$dirname=basename($dir);
|
||||
$zip->addEmptyDir($internalDir.$dirname);
|
||||
$internalDir.=$dirname.='/';
|
||||
// prevent absolute dirs
|
||||
$internalDir = ltrim($internalDir, '/');
|
||||
$files=OC_Files::getDirectoryContent($dir);
|
||||
foreach($files as $file) {
|
||||
$filename=$file['name'];
|
||||
|
|
Loading…
Reference in New Issue