]> source.dussan.org Git - nextcloud-server.git/commitdiff
Show unique displayname context in the user share list entries
authorJulius Härtl <jus@bitgrid.net>
Wed, 7 Oct 2020 10:32:16 +0000 (12:32 +0200)
committerJulius Härtl <jus@bitgrid.net>
Mon, 14 Dec 2020 10:14:59 +0000 (11:14 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
apps/files_sharing/lib/Controller/ShareAPIController.php
apps/files_sharing/src/components/SharingEntry.vue
apps/files_sharing/src/components/SharingEntrySimple.vue
apps/files_sharing/src/mixins/SharesMixin.js
apps/files_sharing/src/models/Share.js
apps/files_sharing/src/views/SharingList.vue
apps/files_sharing/tests/Controller/ShareAPIControllerTest.php

index 65de654be92e636834911121bc42848a23e0c561..16b0e8fcc68ddd2863546c99dbd523683bb0f960 100644 (file)
@@ -235,6 +235,9 @@ class ShareAPIController extends OCSController {
                        $sharedWith = $this->userManager->get($share->getSharedWith());
                        $result['share_with'] = $share->getSharedWith();
                        $result['share_with_displayname'] = $sharedWith !== null ? $sharedWith->getDisplayName() : $share->getSharedWith();
+                       $result['share_with_displayname_unique'] = $sharedWith !== null ? (
+                                $sharedWith->getEMailAddress() !== '' ? $sharedWith->getEMailAddress() : $sharedWith->getUID()
+                       ) : $share->getSharedWith();
                        $result['status'] = [];
 
                        $userStatuses = $this->userStatusManager->getUserStatuses([$share->getSharedWith()]);
index 407221037dcb0ee7230bce024a548822195338ad..c66dfc5c802cb85357e5f4896f5b625ec4ff2ef2 100644 (file)
@@ -33,7 +33,7 @@
                        :href="share.shareWithLink"
                        v-tooltip.auto="tooltip"
                        class="sharing-entry__desc">
-                       <h5>{{ title }}</h5>
+                       <h5>{{ title }}<span v-if="!isUnique" class="sharing-entry__desc-unique"> ({{ share.shareWithDisplayNameUnique }})</span></h5>
                        <p v-if="hasStatus">
                                <span>{{ share.status.icon || '' }}</span>
                                <span>{{ share.status.message || '' }}</span>
@@ -402,6 +402,9 @@ export default {
                p {
                        color: var(--color-text-maxcontrast);
                }
+               &-unique {
+                       color: var(--color-text-maxcontrast);
+               }
        }
        &__actions {
                margin-left: auto;
index 5cdce17bf0c27482a8ee36c4abae0be6803106fa..de545a497a8b37929ade87714a92c5ee659f3d0a 100644 (file)
@@ -64,6 +64,10 @@ export default {
                        type: String,
                        default: '',
                },
+               isUnique: {
+                       type: Boolean,
+                       default: true,
+               },
        },
 
 }
index b35ebd8359e579e4e2cf46b4cc3b34b0e624a3fd..aef543a5fc6d60f4dc2f632ab1c7acc17731f1b8 100644 (file)
@@ -42,6 +42,10 @@ export default {
                        type: Share,
                        default: null,
                },
+               isUnique: {
+                       type: Boolean,
+                       default: true,
+               },
        },
 
        data() {
index d36484f064ac26d9cd156b23eca84242576957d7..db9351fb52c26b4d793f75b9cd90046d9d96da63 100644 (file)
@@ -150,6 +150,10 @@ export default class Share {
                        || this.#share.share_with
        }
 
+       get shareWithDisplayNameUnique() {
+               return this.#share.share_with_displayname_unique || this.#share.share_with
+       }
+
        /**
         * Get the share with entity link
         *
index b8f12f6ef157b325590e385748b68f0bc5f7b6e6..5c2a21c8bf87ba1be840ef6e8a82666de5f7a9ce 100644 (file)
@@ -26,6 +26,7 @@
                        :key="share.id"
                        :file-info="fileInfo"
                        :share="share"
+                       :is-unique="isUnique(share)"
                        @remove:share="removeShare" />
        </ul>
 </template>
@@ -34,6 +35,7 @@
 // eslint-disable-next-line no-unused-vars
 import Share from '../models/Share'
 import SharingEntry from '../components/SharingEntry'
+import ShareTypes from '../mixins/ShareTypes'
 
 export default {
        name: 'SharingList',
@@ -42,6 +44,8 @@ export default {
                SharingEntry,
        },
 
+       mixins: [ShareTypes],
+
        props: {
                fileInfo: {
                        type: Object,
@@ -59,6 +63,13 @@ export default {
                hasShares() {
                        return this.shares.length === 0
                },
+               isUnique() {
+                       return (share) => {
+                               return [...this.shares].filter((item) => {
+                                       return share.type === this.SHARE_TYPES.SHARE_TYPE_USER && share.shareWithDisplayName === item.shareWithDisplayName
+                               }).length <= 1
+                       }
+               },
        },
 
        methods: {
index a2a6ab59809d81bd19c00abde02f9a1b1509c3bf..ff3429ca71c09a66e10780f536256dd3c3293fb9 100644 (file)
@@ -583,6 +583,7 @@ class ShareAPIControllerTest extends TestCase {
                        'share_type' => IShare::TYPE_USER,
                        'share_with' => 'userId',
                        'share_with_displayname' => 'userDisplay',
+                       'share_with_displayname_unique' => 'userId@example.com',
                        'uid_owner' => 'initiatorId',
                        'displayname_owner' => 'initiatorDisplay',
                        'item_type' => 'file',
@@ -782,6 +783,7 @@ class ShareAPIControllerTest extends TestCase {
                $user = $this->getMockBuilder(IUser::class)->getMock();
                $user->method('getUID')->willReturn('userId');
                $user->method('getDisplayName')->willReturn('userDisplay');
+               $user->method('getEMailAddress')->willReturn('userId@example.com');
 
                $group = $this->getMockBuilder('OCP\IGroup')->getMock();
                $group->method('getGID')->willReturn('groupId');
@@ -3440,6 +3442,8 @@ class ShareAPIControllerTest extends TestCase {
                $initiator->method('getDisplayName')->willReturn('initiatorDN');
                $recipient = $this->getMockBuilder(IUser::class)->getMock();
                $recipient->method('getDisplayName')->willReturn('recipientDN');
+               $recipient->method('getEmailAddress')->willReturn('recipient');
+
 
                $result = [];
 
@@ -3479,6 +3483,7 @@ class ShareAPIControllerTest extends TestCase {
                                'file_target' => 'myTarget',
                                'share_with' => 'recipient',
                                'share_with_displayname' => 'recipient',
+                               'share_with_displayname_unique' => 'recipient',
                                'note' => 'personal note',
                                'label' => null,
                                'mail_send' => 0,
@@ -3516,6 +3521,7 @@ class ShareAPIControllerTest extends TestCase {
                                'file_target' => 'myTarget',
                                'share_with' => 'recipient',
                                'share_with_displayname' => 'recipientDN',
+                               'share_with_displayname_unique' => 'recipient',
                                'mail_send' => 0,
                                'mimetype' => 'myMimeType',
                                'has_preview' => false,
@@ -3567,6 +3573,7 @@ class ShareAPIControllerTest extends TestCase {
                                'file_target' => 'myTarget',
                                'share_with' => 'recipient',
                                'share_with_displayname' => 'recipient',
+                               'share_with_displayname_unique' => 'recipient',
                                'mail_send' => 0,
                                'mimetype' => 'myMimeType',
                                'has_preview' => false,
@@ -3614,6 +3621,7 @@ class ShareAPIControllerTest extends TestCase {
                                'file_target' => 'myTarget',
                                'share_with' => 'recipient',
                                'share_with_displayname' => 'recipient',
+                               'share_with_displayname_unique' => 'recipient',
                                'mail_send' => 0,
                                'mimetype' => 'myMimeType',
                                'has_preview' => false,
@@ -4162,6 +4170,7 @@ class ShareAPIControllerTest extends TestCase {
                                'file_target' => 'myTarget',
                                'share_with' => 'recipient',
                                'share_with_displayname' => 'recipient',
+                               'share_with_displayname_unique' => 'recipient',
                                'mail_send' => 0,
                                'mimetype' => 'mimeWithPreview',
                                'has_preview' => true,