diff options
author | Julius Härtl <jus@bitgrid.net> | 2022-10-18 20:22:08 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-18 20:22:08 +0300 |
commit | feaeb90f763c2e34e7f9b59ccd0192daafcef5e9 (patch) | |
tree | 778ba4410505ad4b2f2a8ffec35bd9b0a7b7ff01 | |
parent | c8cf8238b863a240c5bc8202182673b5a8fdc881 (diff) | |
parent | 2ea94a12addd6908cd84b5d342365776fbe389f7 (diff) |
Merge pull request #4132 from nextcloud/backport/4065/stable24
-rw-r--r-- | lib/Service/CirclesService.php | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/Service/CirclesService.php b/lib/Service/CirclesService.php index 6a471b41..919a3cbb 100644 --- a/lib/Service/CirclesService.php +++ b/lib/Service/CirclesService.php @@ -40,6 +40,8 @@ use Throwable; class CirclesService { private $circlesEnabled; + private $userCircleCache = []; + public function __construct(IAppManager $appManager) { $this->circlesEnabled = $appManager->isEnabledForUser('circles'); } @@ -70,6 +72,10 @@ class CirclesService { return false; } + if (isset($this->userCircleCache[$circleId][$userId])) { + return $this->userCircleCache[$circleId][$userId]; + } + try { /** @var CirclesManager $circlesManager */ $circlesManager = \OC::$server->get(CirclesManager::class); @@ -77,7 +83,14 @@ class CirclesService { $circlesManager->startSession($federatedUser); $circle = $circlesManager->getCircle($circleId); $member = $circle->getInitiator(); - return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER; + $isUserInCircle = $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER; + + if (!isset($this->userCircleCache[$circleId])) { + $this->userCircleCache[$circleId] = []; + } + $this->userCircleCache[$circleId][$userId] = $isUserInCircle; + + return $isUserInCircle; } catch (Throwable $e) { } return false; |