summaryrefslogtreecommitdiffstats
path: root/apps/files_sharing
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2020-08-05 10:37:20 +0200
committerGeorg Ehrke <developer@georgehrke.com>2020-08-14 17:04:52 +0200
commit5b26487f142843ad99a663d1ce2223c46a9498b2 (patch)
treeee28708b23007815af072ea5420d3813e70be2e8 /apps/files_sharing
parentb13aa660c91873437afec36ef6466ef609b7959c (diff)
downloadnextcloud-server-5b26487f142843ad99a663d1ce2223c46a9498b2.tar.gz
nextcloud-server-5b26487f142843ad99a663d1ce2223c46a9498b2.zip
Expose status via Collaborators API
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
Diffstat (limited to 'apps/files_sharing')
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php22
-rw-r--r--apps/files_sharing/tests/ApiTest.php5
-rw-r--r--apps/files_sharing/tests/Controller/ShareAPIControllerTest.php31
3 files changed, 49 insertions, 9 deletions
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index 78b2eb1bc53..52c9e600c9a 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -70,6 +70,7 @@ use OCP\Share\Exceptions\GenericShareException;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\Share\IManager;
use OCP\Share\IShare;
+use OCP\UserStatus\IManager as IUserStatusManager;
/**
* Class Share20OCS
@@ -100,6 +101,8 @@ class ShareAPIController extends OCSController {
private $appManager;
/** @var IServerContainer */
private $serverContainer;
+ /** @var IUserStatusManager */
+ private $userStatusManager;
/**
* Share20OCS constructor.
@@ -116,6 +119,7 @@ class ShareAPIController extends OCSController {
* @param IConfig $config
* @param IAppManager $appManager
* @param IServerContainer $serverContainer
+ * @param IUserStatusManager $userStatusManager
*/
public function __construct(
string $appName,
@@ -129,7 +133,8 @@ class ShareAPIController extends OCSController {
IL10N $l10n,
IConfig $config,
IAppManager $appManager,
- IServerContainer $serverContainer
+ IServerContainer $serverContainer,
+ IUserStatusManager $userStatusManager
) {
parent::__construct($appName, $request);
@@ -144,6 +149,7 @@ class ShareAPIController extends OCSController {
$this->config = $config;
$this->appManager = $appManager;
$this->serverContainer = $serverContainer;
+ $this->userStatusManager = $userStatusManager;
}
/**
@@ -220,6 +226,20 @@ 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['status'] = [];
+
+ $userStatuses = $this->userStatusManager->getUserStatuses([$share->getSharedWith()]);
+ $userStatus = array_shift($userStatuses);
+ if ($userStatus) {
+ $result['status'] = [
+ 'status' => $userStatus->getStatus(),
+ 'message' => $userStatus->getMessage(),
+ 'icon' => $userStatus->getIcon(),
+ 'clearAt' => $userStatus->getClearAt()
+ ? (int)$userStatus->getClearAt()->format('U')
+ : null,
+ ];
+ }
} elseif ($share->getShareType() === IShare::TYPE_GROUP) {
$group = $this->groupManager->get($share->getSharedWith());
$result['share_with'] = $share->getSharedWith();
diff --git a/apps/files_sharing/tests/ApiTest.php b/apps/files_sharing/tests/ApiTest.php
index 5339128fbef..80fb4c257ce 100644
--- a/apps/files_sharing/tests/ApiTest.php
+++ b/apps/files_sharing/tests/ApiTest.php
@@ -46,6 +46,7 @@ use OCP\IL10N;
use OCP\IRequest;
use OCP\IServerContainer;
use OCP\Share\IShare;
+use OCP\UserStatus\IManager as IUserStatusManager;
/**
* Class ApiTest
@@ -114,6 +115,7 @@ class ApiTest extends TestCase {
$config = $this->createMock(IConfig::class);
$appManager = $this->createMock(IAppManager::class);
$serverContainer = $this->createMock(IServerContainer::class);
+ $userStatusManager = $this->createMock(IUserStatusManager::class);
return new ShareAPIController(
self::APP_NAME,
@@ -127,7 +129,8 @@ class ApiTest extends TestCase {
$l,
$config,
$appManager,
- $serverContainer
+ $serverContainer,
+ $userStatusManager
);
}
diff --git a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
index 4da51f7e5e9..a85a32713cd 100644
--- a/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
+++ b/apps/files_sharing/tests/Controller/ShareAPIControllerTest.php
@@ -56,6 +56,7 @@ use OCP\Share\Exceptions\GenericShareException;
use OCP\Share\IManager;
use OCP\Share\IShare;
use Test\TestCase;
+use OCP\UserStatus\IManager as IUserStatusManager;
/**
* Class ShareAPIControllerTest
@@ -104,6 +105,9 @@ class ShareAPIControllerTest extends TestCase {
/** @var IServerContainer|\PHPUnit\Framework\MockObject\MockObject */
private $serverContainer;
+ /** @var IUserStatusManager|\PHPUnit\Framework\MockObject\MockObject */
+ private $userStatusManager;
+
protected function setUp(): void {
$this->shareManager = $this->createMock(IManager::class);
$this->shareManager
@@ -128,6 +132,7 @@ class ShareAPIControllerTest extends TestCase {
$this->config = $this->createMock(IConfig::class);
$this->appManager = $this->createMock(IAppManager::class);
$this->serverContainer = $this->createMock(IServerContainer::class);
+ $this->userStatusManager = $this->createMock(IUserStatusManager::class);
$this->ocs = new ShareAPIController(
$this->appName,
@@ -141,7 +146,8 @@ class ShareAPIControllerTest extends TestCase {
$this->l,
$this->config,
$this->appManager,
- $this->serverContainer
+ $this->serverContainer,
+ $this->userStatusManager
);
}
@@ -162,7 +168,8 @@ class ShareAPIControllerTest extends TestCase {
$this->l,
$this->config,
$this->appManager,
- $this->serverContainer
+ $this->serverContainer,
+ $this->userStatusManager,
])->setMethods(['formatShare'])
->getMock();
}
@@ -588,6 +595,7 @@ class ShareAPIControllerTest extends TestCase {
'hide_download' => 0,
'can_edit' => false,
'can_delete' => false,
+ 'status' => [],
];
$data[] = [$share, $expected];
@@ -715,7 +723,8 @@ class ShareAPIControllerTest extends TestCase {
$this->l,
$this->config,
$this->appManager,
- $this->serverContainer
+ $this->serverContainer,
+ $this->userStatusManager,
])->setMethods(['canAccessShare'])
->getMock();
@@ -1334,7 +1343,8 @@ class ShareAPIControllerTest extends TestCase {
$this->l,
$this->config,
$this->appManager,
- $this->serverContainer
+ $this->serverContainer,
+ $this->userStatusManager,
])->setMethods(['formatShare'])
->getMock();
@@ -1677,7 +1687,8 @@ class ShareAPIControllerTest extends TestCase {
$this->l,
$this->config,
$this->appManager,
- $this->serverContainer
+ $this->serverContainer,
+ $this->userStatusManager,
])->setMethods(['formatShare'])
->getMock();
@@ -1777,7 +1788,8 @@ class ShareAPIControllerTest extends TestCase {
$this->l,
$this->config,
$this->appManager,
- $this->serverContainer
+ $this->serverContainer,
+ $this->userStatusManager,
])->setMethods(['formatShare'])
->getMock();
@@ -2340,7 +2352,8 @@ class ShareAPIControllerTest extends TestCase {
$this->l,
$this->config,
$this->appManager,
- $this->serverContainer
+ $this->serverContainer,
+ $this->userStatusManager,
])->setMethods(['formatShare'])
->getMock();
@@ -3447,6 +3460,7 @@ class ShareAPIControllerTest extends TestCase {
'hide_download' => 0,
'can_edit' => false,
'can_delete' => false,
+ 'status' => [],
], $share, [], false
];
// User backend up
@@ -3480,6 +3494,7 @@ class ShareAPIControllerTest extends TestCase {
'hide_download' => 0,
'can_edit' => false,
'can_delete' => false,
+ 'status' => [],
], $share, [
['owner', $owner],
['initiator', $initiator],
@@ -3529,6 +3544,7 @@ class ShareAPIControllerTest extends TestCase {
'hide_download' => 0,
'can_edit' => false,
'can_delete' => false,
+ 'status' => [],
], $share, [], false
];
@@ -3574,6 +3590,7 @@ class ShareAPIControllerTest extends TestCase {
'hide_download' => 0,
'can_edit' => true,
'can_delete' => true,
+ 'status' => [],
], $share, [], false
];