diff options
Diffstat (limited to 'apps/files_sharing/lib/MountProvider.php')
-rw-r--r-- | apps/files_sharing/lib/MountProvider.php | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index 47a787350d5..6dd1dc2f31f 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -35,6 +35,7 @@ use OCP\IConfig; use OCP\ILogger; use OCP\IUser; use OCP\Share\IManager; +use OCP\Share\IShare; class MountProvider implements IMountProvider { /** @@ -94,6 +95,14 @@ class MountProvider implements IMountProvider { try { /** @var \OCP\Share\IShare $parentShare */ $parentShare = $share[0]; + + if ($parentShare->getStatus() !== IShare::STATUS_ACCEPTED && + ($parentShare->getShareType() === IShare::TYPE_GROUP || + $parentShare->getShareType() === IShare::TYPE_USERGROUP || + $parentShare->getShareType() === IShare::TYPE_USER)) { + continue; + } + $owner = $parentShare->getShareOwner(); if (!isset($ownerViews[$owner])) { $ownerViews[$owner] = new View('/' . $parentShare->getShareOwner() . '/files'); @@ -184,12 +193,16 @@ class MountProvider implements IMountProvider { $superShare->setId($shares[0]->getId()) ->setShareOwner($shares[0]->getShareOwner()) ->setNodeId($shares[0]->getNodeId()) + ->setShareType($shares[0]->getShareType()) ->setTarget($shares[0]->getTarget()); // use most permissive permissions $permissions = 0; + $status = IShare::STATUS_PENDING; foreach ($shares as $share) { $permissions |= $share->getPermissions(); + $status = max($status, $share->getStatus()); + if ($share->getTarget() !== $superShare->getTarget()) { // adjust target, for database consistency $share->setTarget($superShare->getTarget()); @@ -216,7 +229,8 @@ class MountProvider implements IMountProvider { } } - $superShare->setPermissions($permissions); + $superShare->setPermissions($permissions) + ->setStatus($status); $result[] = [$superShare, $shares]; } |