From f8c153c2221df06d9d397d2ac420744af00dabcb Mon Sep 17 00:00:00 2001 From: ailkiv Date: Sun, 7 Sep 2025 12:39:36 +0000 Subject: [PATCH] feat: add search and limit support for team members list Signed-off-by: ailkiv --- lib/Controller/LocalController.php | 6 ++++-- lib/Db/MemberRequest.php | 9 +++++++++ lib/Service/MemberService.php | 9 +++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/Controller/LocalController.php b/lib/Controller/LocalController.php index 8a1e8f08f..7790d521c 100644 --- a/lib/Controller/LocalController.php +++ b/lib/Controller/LocalController.php @@ -460,15 +460,17 @@ public function probeCircles(int $limit = -1, int $offset = 0): DataResponse { * * @param string $circleId * @param bool $fullDetails + * @param int $limit + * @param string $search * * @return DataResponse * @throws OCSException */ - public function members(string $circleId, bool $fullDetails = false): DataResponse { + public function members(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): DataResponse { try { $this->setCurrentFederatedUser(); - return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails))); + return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails, $limit, $search))); } catch (Exception $e) { $this->e($e, ['circleId' => $circleId]); throw new OCSException($e->getMessage(), (int)$e->getCode()); diff --git a/lib/Db/MemberRequest.php b/lib/Db/MemberRequest.php index 71f6f8872..011a1e1c1 100644 --- a/lib/Db/MemberRequest.php +++ b/lib/Db/MemberRequest.php @@ -190,6 +190,9 @@ public function updateLevel(Member $member): void { * @param string $singleId * @param IFederatedUser|null $initiator * @param MemberProbe|null $probe + * @param int $limit + * @param bool $fullDetails + * @param string $search * * @return Member[] * @throws RequestBuilderException @@ -200,6 +203,7 @@ public function getMembers( ?MemberProbe $probe = null, int $limit = 0, bool $fullDetails = false, + string $search = '', ): array { if (is_null($probe)) { $probe = new MemberProbe(); @@ -207,6 +211,11 @@ public function getMembers( $qb = $this->getMemberSelectSql($initiator); $qb->limitToCircleId($singleId); + + if (!empty($search)) { + $qb->searchInDBField('user_id', '%' . $search . '%'); + } + if ($limit > 0) { $qb->chunk(0, $limit); } diff --git a/lib/Service/MemberService.php b/lib/Service/MemberService.php index e8c56193d..bc71eccc9 100644 --- a/lib/Service/MemberService.php +++ b/lib/Service/MemberService.php @@ -146,12 +146,15 @@ public function getMemberById( /** * @param string $circleId + * @param bool $fullDetails + * @param int $limit + * @param string $search * * @return Member[] * @throws InitiatorNotFoundException * @throws RequestBuilderException */ - public function getMembers(string $circleId, bool $fullDetails = false): array { + public function getMembers(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): array { $this->federatedUserService->mustHaveCurrentUser(); $probe = new MemberProbe(); @@ -165,7 +168,9 @@ public function getMembers(string $circleId, bool $fullDetails = false): array { $circleId, $this->federatedUserService->getCurrentUser(), $probe, - fullDetails: $fullDetails + $limit, + $fullDetails, + $search ); }