Defer quota check in web UI when overwriting shared file
When receiving a shared file, the quota for that file counts in the owner's storage, not the current user's storage. To make it possible to overwrite the file even when the current user doesn't have enough space, the quota check is deferred for such files.
This commit is contained in:
parent
8f96ef147f
commit
ceaefc2c54
|
@ -136,8 +136,12 @@ $maxUploadFileSize = $storageStats['uploadMaxFilesize'];
|
|||
$maxHumanFileSize = OCP\Util::humanFileSize($maxUploadFileSize);
|
||||
|
||||
$totalSize = 0;
|
||||
foreach ($files['size'] as $size) {
|
||||
$totalSize += $size;
|
||||
$isReceivedShare = \OC::$server->getRequest()->getParam('isReceivedShare', false) === 'true';
|
||||
// defer quota check for received shares
|
||||
if (!$isReceivedShare) {
|
||||
foreach ($files['size'] as $size) {
|
||||
$totalSize += $size;
|
||||
}
|
||||
}
|
||||
if ($maxUploadFileSize >= 0 and $totalSize > $maxUploadFileSize) {
|
||||
OCP\JSON::error(array('data' => array('message' => $l->t('Not enough storage available'),
|
||||
|
|
|
@ -251,7 +251,26 @@ OC.Upload = {
|
|||
$('#file_upload_start').trigger(new $.Event('resized'));
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns whether the given file is known to be a received shared file
|
||||
*
|
||||
* @param {Object} file file
|
||||
* @return {bool} true if the file is a shared file
|
||||
*/
|
||||
_isReceivedSharedFile: function(file) {
|
||||
if (!window.FileList) {
|
||||
return false;
|
||||
}
|
||||
var $tr = window.FileList.findFileEl(file.name);
|
||||
if (!$tr.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ($tr.attr('data-mounttype') === 'shared-root' && $tr.attr('data-mime') !== 'httpd/unix-directory');
|
||||
},
|
||||
|
||||
init: function() {
|
||||
var self = this;
|
||||
if ( $('#file_upload_start').exists() ) {
|
||||
var file_upload_param = {
|
||||
dropZone: $('#content'), // restrict dropZone to content div
|
||||
|
@ -341,10 +360,15 @@ OC.Upload = {
|
|||
}
|
||||
}
|
||||
|
||||
// add size
|
||||
selection.totalBytes += file.size;
|
||||
// update size of biggest file
|
||||
selection.biggestFileBytes = Math.max(selection.biggestFileBytes, file.size);
|
||||
// only count if we're not overwriting an existing shared file
|
||||
if (self._isReceivedSharedFile(file)) {
|
||||
file.isReceivedShare = true;
|
||||
} else {
|
||||
// add size
|
||||
selection.totalBytes += file.size;
|
||||
// update size of biggest file
|
||||
selection.biggestFileBytes = Math.max(selection.biggestFileBytes, file.size);
|
||||
}
|
||||
|
||||
// check PHP upload limit against biggest file
|
||||
if (selection.biggestFileBytes > $('#upload_limit').val()) {
|
||||
|
@ -430,11 +454,16 @@ OC.Upload = {
|
|||
fileDirectory = data.files[0].relativePath;
|
||||
}
|
||||
|
||||
addFormData(data.formData, {
|
||||
var params = {
|
||||
requesttoken: oc_requesttoken,
|
||||
dir: data.targetDir || FileList.getCurrentDirectory(),
|
||||
file_directory: fileDirectory
|
||||
});
|
||||
file_directory: fileDirectory,
|
||||
};
|
||||
if (data.files[0].isReceivedShare) {
|
||||
params.isReceivedShare = true;
|
||||
}
|
||||
|
||||
addFormData(data.formData, params);
|
||||
},
|
||||
fail: function(e, data) {
|
||||
OC.Upload.log('fail', e, data);
|
||||
|
|
Loading…
Reference in New Issue