setCurrentFederatedUser(); $probe = new CircleProbe(); $probe->filterHiddenCircles() ->filterBackendCircles() ->setItemsLimit($limit) ->setItemsOffset($offset); $circles = $this->circleService->probeCircles($probe); $teams = []; foreach ($circles as $circle) { $members = []; try { $circleMembers = $this->memberService->getMembers($circle->getSingleId(), false); // Limit to 5 members for the dashboard widget $limitedMembers = array_slice($circleMembers, 0, 5); foreach ($limitedMembers as $member) { $members[] = [ 'singleId' => $member->getSingleId(), 'userId' => $member->getUserId(), 'displayName' => $member->getDisplayName(), 'type' => $member->getUserType(), ]; } } catch (\Exception $e) { // Skip members if we can't fetch them } $resources = []; try { // Create TeamResourceService instance and fetch real resources $resourceService = new TeamResourceService( $this->resourceProvider, $this->urlGenerator, $this->logger ); $resources = $resourceService->getAllTeamResources($circle->getSingleId()); } catch (\Exception $e) { $this->logger->warning('Failed to fetch resources for circle ' . $circle->getSingleId() . ': ' . $e->getMessage()); } $teams[] = [ 'singleId' => $circle->getSingleId(), 'displayName' => $circle->getDisplayName(), 'name' => $circle->getName(), 'url' => $this->modelManager->generateLinkToCircle($circle->getSingleId()), 'members' => $members, 'resources' => $resources, ]; } return new DataResponse($teams); } catch (\Exception $e) { throw new OCSException($e->getMessage(), (int)$e->getCode()); } } /** * @return void * @throws FrontendException */ private function setCurrentFederatedUser(): void { if (!$this->configService->getAppValueBool(ConfigService::FRONTEND_ENABLED)) { throw new FrontendException('frontend disabled'); } $user = $this->userSession->getUser(); $this->federatedUserService->setLocalCurrentUser($user); } }