From d47d240a357e3f7861b432b971a0ba96b31f20ca Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 28 Sep 2015 16:23:33 +0200 Subject: [PATCH] Still show share link when recipient but no share permission This makes it possible for the recipient to still trigger the sidebar and share tab to see information about the share. In the case where the file is not shared and no permissions exists, no action icon will be displayed. --- apps/files_sharing/js/share.js | 30 ++++++++---------------- apps/files_sharing/tests/js/shareSpec.js | 13 +++------- 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index 66e4f9dc27..30a803f320 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -103,11 +103,20 @@ name: 'Share', displayName: '', mime: 'all', - permissions: OC.PERMISSION_SHARE, + permissions: OC.PERMISSION_ALL, icon: OC.imagePath('core', 'actions/share'), type: OCA.Files.FileActions.TYPE_INLINE, actionHandler: function(fileName) { fileList.showDetailsView(fileName, 'shareTabView'); + }, + render: function(actionSpec, isDefault, context) { + var permissions = parseInt(context.$file.attr('data-permissions'), 10); + // if no share permissions but share owner exists, still show the link + if ((permissions & OC.PERMISSION_SHARE) !== 0 || context.$file.attr('data-share-owner')) { + return fileActions._defaultRenderAction.call(fileActions, actionSpec, isDefault, context); + } + // don't render anything + return null; } }); @@ -157,26 +166,7 @@ // if the statuses are loaded already, use them for the icon // (needed when scrolling to the next page) if (hasUserShares || hasLinkShare || $tr.attr('data-share-recipients') || $tr.attr('data-share-owner')) { - var permissions = $tr.data('permissions'); OC.Share.markFileAsShared($tr, true, hasLinkShare); - if ((permissions & OC.PERMISSION_SHARE) === 0 && $tr.attr('data-share-owner')) { - // if no share action exists because the admin disabled sharing for this user - // we create a share notification action to inform the user about files - // shared with him otherwise we just update the existing share action. - // TODO: make this work like/with OC.Share.markFileAsShared() - $tr.find('.fileactions .action-share-notification').remove(); - var shareNotification = '' + - ' '; - $tr.find('.fileactions').append(function() { - var shareBy = escapeHTML($tr.attr('data-share-owner')); - var $result = $(shareNotification + ' ' + shareBy + ''); - $result.on('click', function() { - return false; - }); - return $result; - }); - } return true; } return false; diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js index 96a96f1b81..fd8e36d71a 100644 --- a/apps/files_sharing/tests/js/shareSpec.js +++ b/apps/files_sharing/tests/js/shareSpec.js @@ -179,7 +179,7 @@ describe('OCA.Sharing.Util tests', function() { expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); expect($action.find('img').length).toEqual(1); }); - it('shows static share text when file shared with user that has no share permission', function() { + it('shows share action when shared with user who has no share permission', function() { var $action, $tr; fileList.setFiles([{ id: 1, @@ -193,14 +193,9 @@ describe('OCA.Sharing.Util tests', function() { shareOwner: 'User One' }]); $tr = fileList.$el.find('tbody tr:first'); - expect($tr.find('.action-share').length).toEqual(0); - $action = $tr.find('.action-share-notification'); - expect($action.find('>span').text().trim()).toEqual('User One'); - expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); - expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); - expect($action.find('img').length).toEqual(1); + expect($tr.find('.action-share').length).toEqual(1); }); - it('do not show static share text when share exists but neither permission nor owner is available', function() { + it('do not show share action when share exists but neither permission nor owner is available', function() { var $action, $tr; fileList.setFiles([{ id: 1, @@ -214,8 +209,6 @@ describe('OCA.Sharing.Util tests', function() { }]); $tr = fileList.$el.find('tbody tr:first'); expect($tr.find('.action-share').length).toEqual(0); - $action = $tr.find('.action-share-notification'); - expect($action.length).toEqual(0); }); }); describe('Share action', function() {