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.
This commit is contained in:
Vincent Petry 2015-09-28 16:23:33 +02:00
parent d68079f932
commit d47d240a35
2 changed files with 13 additions and 30 deletions

View File

@ -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 = '<a class="action action-share-notification permanent"' +
' data-action="Share-Notification" href="#" original-title="">' +
' <img class="svg" src="' + OC.imagePath('core', 'actions/share') + '"></img>';
$tr.find('.fileactions').append(function() {
var shareBy = escapeHTML($tr.attr('data-share-owner'));
var $result = $(shareNotification + '<span> ' + shareBy + '</span></span>');
$result.on('click', function() {
return false;
});
return $result;
});
}
return true;
}
return false;

View File

@ -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() {