diff --git a/lib/Controller/LocalController.php b/lib/Controller/LocalController.php index 05d0d631b..358c09058 100644 --- a/lib/Controller/LocalController.php +++ b/lib/Controller/LocalController.php @@ -428,16 +428,17 @@ public function probeCircles(int $limit = -1, int $offset = 0): DataResponse { * @param bool $fullDetails * @param int $limit * @param string $search + * @param int|null $role * * @return DataResponse * @throws OCSException */ #[NoAdminRequired] - public function members(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): DataResponse { + public function members(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = '', ?int $role = null): DataResponse { try { $this->setCurrentFederatedUser(); - return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails, $limit, $search))); + return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails, $limit, $search, $role))); } 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 ca2744fe1..4a6b8ad6a 100644 --- a/lib/Db/MemberRequest.php +++ b/lib/Db/MemberRequest.php @@ -204,6 +204,7 @@ public function getMembers( int $limit = 0, bool $fullDetails = false, string $search = '', + ?int $role = null, ): array { if (is_null($probe)) { $probe = new MemberProbe(); @@ -257,6 +258,10 @@ public function getMembers( $qb->filterDirectMembership(CoreQueryBuilder::MEMBER, $probe->getFilterMember()); } + if ($role !== null) { + $qb->andWhere($qb->expr()->eq($qb->getDefaultSelectAlias() . '.level', $qb->createNamedParameter($role))); + } + $qb->orderBy($qb->getDefaultSelectAlias() . '.level', 'desc'); $qb->addOrderBy($qb->getDefaultSelectAlias() . '.cached_name', 'asc'); diff --git a/lib/Service/MemberService.php b/lib/Service/MemberService.php index dafea198c..20b35b08f 100644 --- a/lib/Service/MemberService.php +++ b/lib/Service/MemberService.php @@ -130,12 +130,13 @@ public function getMemberById( * @param bool $fullDetails * @param int $limit * @param string $search + * @param ?int $role * * @return Member[] * @throws InitiatorNotFoundException * @throws RequestBuilderException */ - public function getMembers(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): array { + public function getMembers(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = '', ?int $role = null): array { $this->federatedUserService->mustHaveCurrentUser(); $probe = new MemberProbe(); @@ -151,7 +152,8 @@ public function getMembers(string $circleId, bool $fullDetails = false, int $lim $probe, $limit, $fullDetails, - $search + $search, + $role, ); }