summaryrefslogtreecommitdiffstats
path: root/apps/files/js
diff options
context:
space:
mode:
authorRoland Tapken <roland@bitarbeiter.net>2018-02-06 16:44:04 +0100
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2018-02-15 18:51:12 +0100
commit38ba64af77f9c58f13b59d3470465fce1a7f1ff2 (patch)
tree90d49d8136f8b4a983c33dd42a75fc5174de6c2d /apps/files/js
parentc688da7195755273f9b040dc9a16898686e6e68a (diff)
downloadnextcloud-server-38ba64af77f9c58f13b59d3470465fce1a7f1ff2.tar.gz
nextcloud-server-38ba64af77f9c58f13b59d3470465fce1a7f1ff2.zip
Split move and copy operations
The new 'Move and copy' operation from #6040 requires UPDATE permissions on the selected files. However, READ would be sufficient to create a copy of a file (if not viewed as a public share). For this reason this patch: - changes the permission of the 'MoveCopy' action to PERMISSION_READ - changes the label of the action depending on the permissions - changes the available buttons in the Move/Copy dialog depending on the permissions. The same changes are done to the filelist view for bulk actions. Signed-off-by: Roland Tapken <roland@bitarbeiter.net>
Diffstat (limited to 'apps/files/js')
-rw-r--r--apps/files/js/fileactions.js17
-rw-r--r--apps/files/js/filelist.js34
2 files changed, 42 insertions, 9 deletions
diff --git a/apps/files/js/fileactions.js b/apps/files/js/fileactions.js
index 2fb7dfba29f..a6d376aa2a9 100644
--- a/apps/files/js/fileactions.js
+++ b/apps/files/js/fileactions.js
@@ -625,12 +625,23 @@
this.registerAction({
name: 'MoveCopy',
- displayName: t('files', 'Move or copy'),
+ displayName: function(context) {
+ var permissions = context.fileInfoModel.attributes.permissions;
+ if (permissions & OC.PERMISSION_UPDATE) {
+ return t('files', 'Move or copy');
+ }
+ return t('files', 'Copy');
+ },
mime: 'all',
order: -25,
- permissions: OC.PERMISSION_UPDATE,
+ permissions: $('#isPublic').val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ,
iconClass: 'icon-external',
actionHandler: function (filename, context) {
+ var permissions = context.fileInfoModel.attributes.permissions;
+ var actions = OC.dialogs.FILEPICKER_TYPE_COPY;
+ if (permissions & OC.PERMISSION_UPDATE) {
+ actions = OC.dialogs.FILEPICKER_TYPE_COPY_MOVE;
+ }
OC.dialogs.filepicker(t('files', 'Target folder'), function(targetPath, type) {
if (type === OC.dialogs.FILEPICKER_TYPE_COPY) {
context.fileList.copy(filename, targetPath);
@@ -638,7 +649,7 @@
if (type === OC.dialogs.FILEPICKER_TYPE_MOVE) {
context.fileList.move(filename, targetPath);
}
- }, false, "httpd/unix-directory", true, OC.dialogs.FILEPICKER_TYPE_COPY_MOVE);
+ }, false, "httpd/unix-directory", true, actions);
}
});
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index b46db792678..4dc8a58e175 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -798,6 +798,7 @@
OCA.Files.FileActions.updateFileActionSpinner(moveFileAction, false);
};
+ var actions = this.isSelectedMovable() ? OC.dialogs.FILEPICKER_TYPE_COPY_MOVE : OC.dialogs.FILEPICKER_TYPE_COPY;
OC.dialogs.filepicker(t('files', 'Target folder'), function(targetPath, type) {
if (type === OC.dialogs.FILEPICKER_TYPE_COPY) {
self.copy(files, targetPath, disableLoadingState);
@@ -805,7 +806,7 @@
if (type === OC.dialogs.FILEPICKER_TYPE_MOVE) {
self.move(files, targetPath, disableLoadingState);
}
- }, false, "httpd/unix-directory", true, OC.dialogs.FILEPICKER_TYPE_COPY_MOVE);
+ }, false, "httpd/unix-directory", true, actions);
return false;
},
@@ -2871,18 +2872,39 @@
this.$el.find('#headerName a.name>span:first').text(selection);
this.$el.find('#modified a>span:first').text('');
this.$el.find('table').addClass('multiselect');
- this.$el.find('.selectedActions .copy-move').toggleClass('hidden', !this.isSelectedCopiableOrMovable());
this.$el.find('.selectedActions .download').toggleClass('hidden', !this.isSelectedDownloadable());
this.$el.find('.delete-selected').toggleClass('hidden', !this.isSelectedDeletable());
+
+ var $copyMove = this.$el.find('.selectedActions .copy-move');
+ if (this.isSelectedCopiable()) {
+ $copyMove.toggleClass('hidden', false);
+ if (this.isSelectedMovable()) {
+ $copyMove.find('.label').text(t('files', 'Move or copy'));
+ } else {
+ $copyMove.find('.label').text(t('files', 'Copy'));
+ }
+ } else {
+ $copyMove.toggleClass('hidden', true);
+ }
}
},
/**
- * Check whether all selected files are copiable or movable
+ * Check whether all selected files are copiable
+ */
+ isSelectedCopiable: function() {
+ return _.reduce(this.getSelectedFiles(), function(copiable, file) {
+ var requiredPermission = $('#isPublic').val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ;
+ return copiable && (file.permissions & requiredPermission);
+ }, true);
+ },
+
+ /**
+ * Check whether all selected files are movable
*/
- isSelectedCopiableOrMovable: function() {
- return _.reduce(this.getSelectedFiles(), function(copiableOrMovable, file) {
- return copiableOrMovable && (file.permissions & OC.PERMISSION_UPDATE);
+ isSelectedMovable: function() {
+ return _.reduce(this.getSelectedFiles(), function(movable, file) {
+ return movable && (file.permissions & OC.PERMISSION_UPDATE);
}, true);
},