diff --git a/lib/Db/CoreQueryBuilder.php b/lib/Db/CoreQueryBuilder.php index 532d6e023..f54e94aa3 100644 --- a/lib/Db/CoreQueryBuilder.php +++ b/lib/Db/CoreQueryBuilder.php @@ -646,6 +646,36 @@ public function limitToDirectMembership(string $alias, Member $member): void { } + /** + * @param string $alias + * @param string $aliasCircle + * @param FederatedUser $federatedUser + * + * @throws RequestBuilderException + */ + public function limitToFederatedUserMemberships( + string $alias, + string $aliasCircle, + FederatedUser $federatedUser + ): void { + $aliasMembership = $this->generateAlias($alias, self::MEMBERSHIPS); + + $this->leftJoin( + $aliasCircle, + 'circles_membership', + $aliasMembership, + $this->expr()->eq($aliasCircle . '.unique_id', $aliasMembership . '.circle_id') + ); + + $this->andWhere( + $this->expr()->eq( + $aliasMembership . '.single_id', + $this->createNamedParameter($federatedUser->getSingleId()) + ) + ); + } + + /** * @param string $aliasMember * @param Member $member diff --git a/lib/Db/ShareWrapperRequest.php b/lib/Db/ShareWrapperRequest.php index 7c591c1b3..038a0c95d 100644 --- a/lib/Db/ShareWrapperRequest.php +++ b/lib/Db/ShareWrapperRequest.php @@ -292,20 +292,10 @@ public function getSharedWith( ) ); - $getData = true; - if ($getData) { - $qb->leftJoinCircle(CoreQueryBuilder::SHARE, null, 'share_with'); - } + $qb->leftJoinCircle(CoreQueryBuilder::SHARE, null, 'share_with'); - $qb->leftJoin( - 'sh_cc', - 'circles_membership', - 'sh_ms', - $qb->expr()->eq('sh_cc.unique_id', 'sh_ms.circle_id') - ); - $qb->andWhere( - $qb->expr()->eq('sh_ms.single_id', $qb->createNamedParameter($federatedUser->getSingleId())) - ); + $aliasCircle = $qb->generateAlias(CoreQueryBuilder::SHARE, CoreQueryBuilder::CIRCLE); + $qb->limitToFederatedUserMemberships(CoreQueryBuilder::SHARE, $aliasCircle, $federatedUser); $qb->leftJoinFileCache(CoreQueryBuilder::SHARE); $qb->limitNull('parent', false);