diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index a7eefe43db..9b794ca2d1 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -220,9 +220,14 @@ // note: we only update the data attribute because updateIcon() if (recipients.length) { $tr.attr('data-share-recipients', OCA.Sharing.Util.formatRecipients(recipients)); + var recipientData = _.mapObject(shareModel.get('shares'), function (share) { + return {shareWith: share.share_with, shareWithDisplayName: share.share_with_displayname}; + }); + $tr.attr('data-share-recipient-data', JSON.stringify(recipientData)); } else { $tr.removeAttr('data-share-recipients'); + $tr.removeAttr('data-share-recipient-data'); } }, diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js index c7b872772b..fb4909e764 100644 --- a/apps/files_sharing/js/sharedfilelist.js +++ b/apps/files_sharing/js/sharedfilelist.js @@ -355,7 +355,10 @@ // only store the first ones, they will be the only ones // displayed data.recipients[recipient] = true; - data.recipientData[recipientId] = recipient; + data.recipientData[data.recipientsCount] = { + 'shareWith': recipientId, + 'shareWithDisplayName': recipient + }; } data.recipientsCount++; } diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js index 5b0a78c9c6..1b628f5bb0 100644 --- a/apps/files_sharing/tests/js/shareSpec.js +++ b/apps/files_sharing/tests/js/shareSpec.js @@ -140,6 +140,7 @@ describe('OCA.Sharing.Util tests', function() { size: 12, permissions: OC.PERMISSION_ALL, shareOwner: 'User One', + shareOwnerId: 'User One', etag: 'abc', shareTypes: [] }]); @@ -161,6 +162,16 @@ describe('OCA.Sharing.Util tests', function() { size: 12, permissions: OC.PERMISSION_ALL, recipientsDisplayName: 'User One, User Two', + recipientData: { + 0: { + shareWith: 'User One', + shareWithDisplayName: 'User One' + }, + 1: { + shareWith: 'User Two', + shareWithDisplayName: 'User Two' + } + }, etag: 'abc', shareTypes: [OC.Share.SHARE_TYPE_USER] }]); @@ -264,10 +275,10 @@ describe('OCA.Sharing.Util tests', function() { // simulate updating shares shareTab._dialog.model.set({ shares: [ - {share_with_displayname: 'User One'}, - {share_with_displayname: 'User Two'}, - {share_with_displayname: 'Group One'}, - {share_with_displayname: 'Group Two'} + {share_with_displayname: 'User One', share_with: 'User One'}, + {share_with_displayname: 'User Two', share_with: 'User Two'}, + {share_with_displayname: 'Group One', share_with: 'Group One'}, + {share_with_displayname: 'Group Two', share_with: 'Group Two'} ] }); @@ -298,9 +309,9 @@ describe('OCA.Sharing.Util tests', function() { // simulate updating shares shareTab._dialog.model.set({ shares: [ - {share_with_displayname: 'User One'}, - {share_with_displayname: 'User Two'}, - {share_with_displayname: 'User Three'} + {share_with_displayname: 'User One', share_with: 'User One'}, + {share_with_displayname: 'User Two', share_with: 'User Two'}, + {share_with_displayname: 'User Three', share_with: 'User Three'} ] }); @@ -348,7 +359,8 @@ describe('OCA.Sharing.Util tests', function() { size: 12, permissions: OC.PERMISSION_ALL, etag: 'abc', - shareOwner: 'User One' + shareOwner: 'User One', + shareOwnerId: 'User One' }]); $action = fileList.$el.find('tbody tr:first .action-share'); $tr = fileList.$el.find('tr:first'); @@ -379,7 +391,9 @@ describe('OCA.Sharing.Util tests', function() { permissions: OC.PERMISSION_ALL, etag: 'abc', shareOwner: 'User One', - recipients: 'User Two' + shareOwnerId: 'User One', + recipients: 'User Two', + recipientData: {'User Two': 'User Two'} }]); $action = fileList.$el.find('tbody tr:first .action-share'); $tr = fileList.$el.find('tr:first'); diff --git a/core/js/share.js b/core/js/share.js index 86954b2ced..381c42c5de 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -240,13 +240,14 @@ OC.Share = _.extend(OC.Share || {}, { * Loop over all recipients in the list and format them using * all kind of fancy magic. * - * @param {String[]} recipients array of all the recipients + * @param {Object} recipients array of all the recipients * @return {String[]} modified list of recipients */ _formatShareList: function(recipients) { var _parent = this; - return $.map(recipients, function(shareWithDisplayName, shareWith) { - return _parent._formatRemoteShare(shareWith, shareWithDisplayName, t('core', 'Shared with')); + recipients = _.sortBy(_.toArray(recipients), 'shareWithDisplayName'); + return $.map(recipients, function(recipient) { + return _parent._formatRemoteShare(recipient.shareWith, recipient.shareWithDisplayName, t('core', 'Shared with')); }); }, /** diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 19e9a92ca9..8688705b8e 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -181,64 +181,133 @@ describe('OC.Share tests', function() { } it('displays the local share owner as is', function() { - checkRecipients({'User One': 'User One'}, 'Shared with User One', null); + var input = { + 0: { + shareWith: 'User One', + shareWithDisplayName: 'User One' + } + }; + checkRecipients(input, 'Shared with User One', null); }); it('displays the user name part of a remote recipient', function() { + var input = { + 0: { + shareWith: 'User One@someserver.com', + shareWithDisplayName: 'User One@someserver.com' + } + }; checkRecipients( - {'User One@someserver.com': 'User One@someserver.com'}, + input, 'User One@…', 'Shared with User One@someserver.com' ); + + input = { + 0: { + shareWith: 'User One@someserver.com/', + shareWithDisplayName: 'User One@someserver.com/' + } + }; checkRecipients( - '{User One@someserver.com/: User One@someserver.com/}', + input, 'User One@…', 'Shared with User One@someserver.com' ); + + input = { + 0: { + shareWith: 'User One@someserver.com/root/of/nextcloud', + shareWithDisplayName: 'User One@someserver.com/root/of/nextcloud' + } + }; checkRecipients( - {'User One@someserver.com/root/of/owncloud': 'User One@someserver.com/root/of/owncloud'}, + input, 'User One@…', 'Shared with User One@someserver.com' ); }); it('displays the user name part with domain of a remote share owner', function() { + var input = { + 0: { + shareWith: 'User One@example.com@someserver.com', + shareWithDisplayName: 'User One@example.com@someserver.com' + } + }; checkRecipients( - {'User One@example.com@someserver.com': 'User One@example.com@someserver.com'}, + input, 'User One@example.com', 'Shared with User One@example.com@someserver.com' ); + + input = { + 0: { + shareWith: 'User One@example.com@someserver.com/', + shareWithDisplayName: 'User One@example.com@someserver.com/' + } + }; checkRecipients( - {'User One@example.com@someserver.com/': 'User One@example.com@someserver.com/'}, + input, 'User One@example.com', 'Shared with User One@example.com@someserver.com' ); + + input = { + 0: { + shareWith: 'User One@example.com@someserver.com/root/of/nextcloud', + shareWithDisplayName: 'User One@example.com@someserver.com/root/of/nextcloud' + } + }; checkRecipients( - {'User One@example.com@someserver.com/root/of/nextcloud': 'User One@example.com@someserver.com/root/of/nextcloud'}, + input, 'User One@example.com', 'Shared with User One@example.com@someserver.com' ); }); it('display multiple remote recipients', function() { - checkRecipients( - { - 'One@someserver.com': 'One@someserver.com', - 'two@otherserver.com': 'two@otherserver.com' + var input = { + 0: { + shareWith: 'One@someserver.com', + shareWithDisplayName: 'One@someserver.com' }, + 1: { + shareWith: 'two@someserver.com', + shareWithDisplayName: 'two@someserver.com' + } + }; + checkRecipients( + input, 'One@… two@…', ['Shared with One@someserver.com', 'Shared with two@otherserver.com'] ); - checkRecipients( - { - 'One@someserver.com/': 'One@someserver.com/', - 'two@otherserver.com': 'two@otherserver.com' + + input = { + 0: { + shareWith: 'One@someserver.com/', + shareWithDisplayName: 'One@someserver.com/' }, + 1: { + shareWith: 'two@someserver.com', + shareWithDisplayName: 'two@someserver.com' + } + }; + checkRecipients( + input, 'One@… two@…', ['Shared with One@someserver.com', 'Shared with two@otherserver.com'] ); - checkRecipients( - { - 'One@someserver.com/root/of/owncloud': 'One@someserver.com/root/of/owncloud', - 'two@otherserver.com': 'two@otherserver.com' + + input = { + 0: { + shareWith: 'One@someserver.com/root/of/nextcloud', + shareWithDisplayName: 'One@someserver.com/root/of/nextcloud' }, + 1: { + shareWith: 'two@someserver.com', + shareWithDisplayName: 'two@someserver.com' + } + }; + checkRecipients( + input, 'One@… two@…', ['Shared with One@someserver.com', 'Shared with two@otherserver.com'] ); @@ -246,8 +315,14 @@ describe('OC.Share tests', function() { it('display mixed recipients', function() { checkRecipients( { - 'One': 'One', - 'two@otherserver.com': 'two@otherserver.com' + 0: { + shareWith: 'One', + shareWithDisplayName: 'One' + }, + 1: { + shareWith: 'two@someserver.com', + shareWithDisplayName: 'two@someserver.com' + } }, 'Shared with One two@…', ['Shared with two@otherserver.com'] @@ -256,9 +331,18 @@ describe('OC.Share tests', function() { it('display multiple with divergent displaynames', function() { checkRecipients( { - 'One': 'Yoko Ono', - 'two@otherserver.com': 'two@otherserver.com', - 'Three': 'Green, Mina' + 0: { + shareWith: 'One', + shareWithDisplayName: 'Yoko Ono' + }, + 1: { + shareWith: 'two@someserver.com', + shareWithDisplayName: 'two@someserver.com' + }, + 2: { + shareWith: 'Three', + shareWithDisplayName: 'Green, Mina' + } }, 'Shared with Yoko Ono two@… Shared with Green, Mina', ['Shared with two@otherserver.com']