Skip to content

Commit 565ccb0

Browse files
authored
Merge pull request #22109 from nextcloud/feature/20931/followup-1
2 parents 6675528 + 40bf38a commit 565ccb0

File tree

13 files changed

+153
-36
lines changed

13 files changed

+153
-36
lines changed

apps/files_sharing/js/dist/files_sharing_tab.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files_sharing/js/dist/files_sharing_tab.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/files_sharing/lib/Controller/ShareAPIController.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
use OCP\Share\Exceptions\ShareNotFound;
7171
use OCP\Share\IManager;
7272
use OCP\Share\IShare;
73+
use OCP\UserStatus\IManager as IUserStatusManager;
7374

7475
/**
7576
* Class Share20OCS
@@ -100,6 +101,8 @@ class ShareAPIController extends OCSController {
100101
private $appManager;
101102
/** @var IServerContainer */
102103
private $serverContainer;
104+
/** @var IUserStatusManager */
105+
private $userStatusManager;
103106

104107
/**
105108
* Share20OCS constructor.
@@ -116,6 +119,7 @@ class ShareAPIController extends OCSController {
116119
* @param IConfig $config
117120
* @param IAppManager $appManager
118121
* @param IServerContainer $serverContainer
122+
* @param IUserStatusManager $userStatusManager
119123
*/
120124
public function __construct(
121125
string $appName,
@@ -129,7 +133,8 @@ public function __construct(
129133
IL10N $l10n,
130134
IConfig $config,
131135
IAppManager $appManager,
132-
IServerContainer $serverContainer
136+
IServerContainer $serverContainer,
137+
IUserStatusManager $userStatusManager
133138
) {
134139
parent::__construct($appName, $request);
135140

@@ -144,6 +149,7 @@ public function __construct(
144149
$this->config = $config;
145150
$this->appManager = $appManager;
146151
$this->serverContainer = $serverContainer;
152+
$this->userStatusManager = $userStatusManager;
147153
}
148154

149155
/**
@@ -220,6 +226,20 @@ protected function formatShare(IShare $share, Node $recipientNode = null): array
220226
$sharedWith = $this->userManager->get($share->getSharedWith());
221227
$result['share_with'] = $share->getSharedWith();
222228
$result['share_with_displayname'] = $sharedWith !== null ? $sharedWith->getDisplayName() : $share->getSharedWith();
229+
$result['status'] = [];
230+
231+
$userStatuses = $this->userStatusManager->getUserStatuses([$share->getSharedWith()]);
232+
$userStatus = array_shift($userStatuses);
233+
if ($userStatus) {
234+
$result['status'] = [
235+
'status' => $userStatus->getStatus(),
236+
'message' => $userStatus->getMessage(),
237+
'icon' => $userStatus->getIcon(),
238+
'clearAt' => $userStatus->getClearAt()
239+
? (int)$userStatus->getClearAt()->format('U')
240+
: null,
241+
];
242+
}
223243
} elseif ($share->getShareType() === IShare::TYPE_GROUP) {
224244
$group = $this->groupManager->get($share->getSharedWith());
225245
$result['share_with'] = $share->getSharedWith();

apps/files_sharing/src/components/SharingEntry.vue

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
:url="share.shareWithAvatar" />
3030
<div v-tooltip.auto="tooltip" class="sharing-entry__desc">
3131
<h5>{{ title }}</h5>
32+
<p v-if="hasStatus">
33+
<span>{{ share.status.icon || '' }}</span>
34+
<span>{{ share.status.message || '' }}</span>
35+
</p>
3236
</div>
3337
<Actions
3438
menu-align="right"
@@ -342,6 +346,17 @@ export default {
342346
&& moment().add(1 + this.config.defaultInternalExpireDate, 'days')
343347
},
344348
349+
/**
350+
* @returns {bool}
351+
*/
352+
hasStatus() {
353+
if (this.share.type !== this.SHARE_TYPES.SHARE_TYPE_USER) {
354+
return false
355+
}
356+
357+
return (typeof this.share.status === 'object' && !Array.isArray(this.share.status))
358+
},
359+
345360
},
346361
347362
methods: {

apps/files_sharing/src/models/Share.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,4 +528,8 @@ export default class Share {
528528
return this.#share.item_source
529529
}
530530

531+
get status() {
532+
return this.#share.status
533+
}
534+
531535
}

apps/files_sharing/src/views/SharingTab.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ export default {
286286
287287
this.linkShares = shares.filter(share => share.type === this.SHARE_TYPES.SHARE_TYPE_LINK || share.type === this.SHARE_TYPES.SHARE_TYPE_EMAIL)
288288
this.shares = shares.filter(share => share.type !== this.SHARE_TYPES.SHARE_TYPE_LINK && share.type !== this.SHARE_TYPES.SHARE_TYPE_EMAIL)
289+
289290
console.debug('Processed', this.linkShares.length, 'link share(s)')
290291
console.debug('Processed', this.shares.length, 'share(s)')
291292
}

apps/files_sharing/tests/ApiTest.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
use OCP\IRequest;
4747
use OCP\IServerContainer;
4848
use OCP\Share\IShare;
49+
use OCP\UserStatus\IManager as IUserStatusManager;
4950

5051
/**
5152
* Class ApiTest
@@ -114,6 +115,7 @@ private function createOCS($userId) {
114115
$config = $this->createMock(IConfig::class);
115116
$appManager = $this->createMock(IAppManager::class);
116117
$serverContainer = $this->createMock(IServerContainer::class);
118+
$userStatusManager = $this->createMock(IUserStatusManager::class);
117119

118120
return new ShareAPIController(
119121
self::APP_NAME,
@@ -127,7 +129,8 @@ private function createOCS($userId) {
127129
$l,
128130
$config,
129131
$appManager,
130-
$serverContainer
132+
$serverContainer,
133+
$userStatusManager
131134
);
132135
}
133136

apps/files_sharing/tests/Controller/ShareAPIControllerTest.php

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
use OCP\Share\IManager;
5757
use OCP\Share\IShare;
5858
use Test\TestCase;
59+
use OCP\UserStatus\IManager as IUserStatusManager;
5960

6061
/**
6162
* Class ShareAPIControllerTest
@@ -104,6 +105,9 @@ class ShareAPIControllerTest extends TestCase {
104105
/** @var IServerContainer|\PHPUnit\Framework\MockObject\MockObject */
105106
private $serverContainer;
106107

108+
/** @var IUserStatusManager|\PHPUnit\Framework\MockObject\MockObject */
109+
private $userStatusManager;
110+
107111
protected function setUp(): void {
108112
$this->shareManager = $this->createMock(IManager::class);
109113
$this->shareManager
@@ -128,6 +132,7 @@ protected function setUp(): void {
128132
$this->config = $this->createMock(IConfig::class);
129133
$this->appManager = $this->createMock(IAppManager::class);
130134
$this->serverContainer = $this->createMock(IServerContainer::class);
135+
$this->userStatusManager = $this->createMock(IUserStatusManager::class);
131136

132137
$this->ocs = new ShareAPIController(
133138
$this->appName,
@@ -141,7 +146,8 @@ protected function setUp(): void {
141146
$this->l,
142147
$this->config,
143148
$this->appManager,
144-
$this->serverContainer
149+
$this->serverContainer,
150+
$this->userStatusManager
145151
);
146152
}
147153

@@ -162,7 +168,8 @@ private function mockFormatShare() {
162168
$this->l,
163169
$this->config,
164170
$this->appManager,
165-
$this->serverContainer
171+
$this->serverContainer,
172+
$this->userStatusManager,
166173
])->setMethods(['formatShare'])
167174
->getMock();
168175
}
@@ -588,6 +595,7 @@ public function dataGetShare() {
588595
'hide_download' => 0,
589596
'can_edit' => false,
590597
'can_delete' => false,
598+
'status' => [],
591599
];
592600
$data[] = [$share, $expected];
593601

@@ -715,7 +723,8 @@ public function testGetShare(\OCP\Share\IShare $share, array $result) {
715723
$this->l,
716724
$this->config,
717725
$this->appManager,
718-
$this->serverContainer
726+
$this->serverContainer,
727+
$this->userStatusManager,
719728
])->setMethods(['canAccessShare'])
720729
->getMock();
721730

@@ -1334,7 +1343,8 @@ public function testGetShares(array $getSharesParameters, array $shares, array $
13341343
$this->l,
13351344
$this->config,
13361345
$this->appManager,
1337-
$this->serverContainer
1346+
$this->serverContainer,
1347+
$this->userStatusManager,
13381348
])->setMethods(['formatShare'])
13391349
->getMock();
13401350

@@ -1677,7 +1687,8 @@ public function testCreateShareUser() {
16771687
$this->l,
16781688
$this->config,
16791689
$this->appManager,
1680-
$this->serverContainer
1690+
$this->serverContainer,
1691+
$this->userStatusManager,
16811692
])->setMethods(['formatShare'])
16821693
->getMock();
16831694

@@ -1777,7 +1788,8 @@ public function testCreateShareGroup() {
17771788
$this->l,
17781789
$this->config,
17791790
$this->appManager,
1780-
$this->serverContainer
1791+
$this->serverContainer,
1792+
$this->userStatusManager,
17811793
])->setMethods(['formatShare'])
17821794
->getMock();
17831795

@@ -2340,7 +2352,8 @@ public function testCreateReshareOfFederatedMountNoDeletePermissions() {
23402352
$this->l,
23412353
$this->config,
23422354
$this->appManager,
2343-
$this->serverContainer
2355+
$this->serverContainer,
2356+
$this->userStatusManager,
23442357
])->setMethods(['formatShare'])
23452358
->getMock();
23462359

@@ -3447,6 +3460,7 @@ public function dataFormatShare() {
34473460
'hide_download' => 0,
34483461
'can_edit' => false,
34493462
'can_delete' => false,
3463+
'status' => [],
34503464
], $share, [], false
34513465
];
34523466
// User backend up
@@ -3480,6 +3494,7 @@ public function dataFormatShare() {
34803494
'hide_download' => 0,
34813495
'can_edit' => false,
34823496
'can_delete' => false,
3497+
'status' => [],
34833498
], $share, [
34843499
['owner', $owner],
34853500
['initiator', $initiator],
@@ -3529,6 +3544,7 @@ public function dataFormatShare() {
35293544
'hide_download' => 0,
35303545
'can_edit' => false,
35313546
'can_delete' => false,
3547+
'status' => [],
35323548
], $share, [], false
35333549
];
35343550

@@ -3574,6 +3590,7 @@ public function dataFormatShare() {
35743590
'hide_download' => 0,
35753591
'can_edit' => true,
35763592
'can_delete' => true,
3593+
'status' => [],
35773594
], $share, [], false
35783595
];
35793596

apps/user_status/js/user-status-menu.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/user_status/js/user-status-menu.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)