summaryrefslogtreecommitdiffstats
path: root/lib/private/share20
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@owncloud.com>2016-01-26 12:58:41 +0100
committerRoeland Jago Douma <rullzer@owncloud.com>2016-01-26 14:14:54 +0100
commitc090d709e769a2bf81fb2f46780714a753de8d74 (patch)
treedbad2c9df5ab8afb8049106bf3f77d88abae6714 /lib/private/share20
parent3da78c8f1c9355a726f289e834fa237366c3df20 (diff)
downloadnextcloud-server-c090d709e769a2bf81fb2f46780714a753de8d74.tar.gz
nextcloud-server-c090d709e769a2bf81fb2f46780714a753de8d74.zip
We must resolve to the proper usergroup share
Diffstat (limited to 'lib/private/share20')
-rw-r--r--lib/private/share20/defaultshareprovider.php14
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/private/share20/defaultshareprovider.php b/lib/private/share20/defaultshareprovider.php
index 3d5462792cd..f2072fe21cd 100644
--- a/lib/private/share20/defaultshareprovider.php
+++ b/lib/private/share20/defaultshareprovider.php
@@ -495,6 +495,9 @@ class DefaultShareProvider implements IShareProvider {
} else if ($shareType === \OCP\Share::SHARE_TYPE_GROUP) {
$allGroups = $this->groupManager->getUserGroups($user);
+ /** @var Share[] $shares2 */
+ $shares2 = [];
+
$start = 0;
while(true) {
$groups = array_slice($allGroups, $start, 100);
@@ -528,7 +531,7 @@ class DefaultShareProvider implements IShareProvider {
$offset--;
continue;
}
- $shares[] = $this->createShare($data);
+ $shares2[] = $this->createShare($data);
}
$cursor->closeCursor();
}
@@ -537,7 +540,9 @@ class DefaultShareProvider implements IShareProvider {
* Resolve all group shares to user specific shares
* TODO: Optmize this!
*/
- $shares = array_map([$this, 'resolveGroupShare'], $shares);
+ foreach($shares2 as $share) {
+ $shares[] = $this->resolveGroupShare($share, $user);
+ }
} else {
throw new BackendError('Invalid backend');
}
@@ -674,15 +679,18 @@ class DefaultShareProvider implements IShareProvider {
* Thus if the user moved their group share make sure this is properly reflected here.
*
* @param Share $share
+ * @param IUser $user
* @return Share Returns the updated share if one was found else return the original share.
*/
- private function resolveGroupShare(Share $share) {
+ private function resolveGroupShare(Share $share, IUser $user) {
$qb = $this->dbConn->getQueryBuilder();
$stmt = $qb->select('*')
->from('share')
->where($qb->expr()->eq('parent', $qb->createNamedParameter($share->getId())))
->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERGROUP)))
+ ->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($user->getUID())))
+ ->setMaxResults(1)
->execute();
$data = $stmt->fetch();