Skip to content

Commit f9ab704

Browse files
authored
Merge pull request #2482 from nextcloud/feature/add-role-parameter
Feat: Add role-based filtering for circle member queries
2 parents f5e5a45 + 000a052 commit f9ab704

3 files changed

Lines changed: 12 additions & 4 deletions

File tree

lib/Controller/LocalController.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,16 +428,17 @@ public function probeCircles(int $limit = -1, int $offset = 0): DataResponse {
428428
* @param bool $fullDetails
429429
* @param int $limit
430430
* @param string $search
431+
* @param int|null $role
431432
*
432433
* @return DataResponse
433434
* @throws OCSException
434435
*/
435436
#[NoAdminRequired]
436-
public function members(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): DataResponse {
437+
public function members(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = '', ?int $role = null): DataResponse {
437438
try {
438439
$this->setCurrentFederatedUser();
439440

440-
return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails, $limit, $search)));
441+
return new DataResponse($this->serializeArray($this->memberService->getMembers($circleId, $fullDetails, $limit, $search, $role)));
441442
} catch (Exception $e) {
442443
$this->e($e, ['circleId' => $circleId]);
443444
throw new OCSException($e->getMessage(), (int)$e->getCode());

lib/Db/MemberRequest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ public function getMembers(
204204
int $limit = 0,
205205
bool $fullDetails = false,
206206
string $search = '',
207+
?int $role = null,
207208
): array {
208209
if (is_null($probe)) {
209210
$probe = new MemberProbe();
@@ -257,6 +258,10 @@ public function getMembers(
257258
$qb->filterDirectMembership(CoreQueryBuilder::MEMBER, $probe->getFilterMember());
258259
}
259260

261+
if ($role !== null) {
262+
$qb->andWhere($qb->expr()->eq($qb->getDefaultSelectAlias() . '.level', $qb->createNamedParameter($role)));
263+
}
264+
260265
$qb->orderBy($qb->getDefaultSelectAlias() . '.level', 'desc');
261266
$qb->addOrderBy($qb->getDefaultSelectAlias() . '.cached_name', 'asc');
262267

lib/Service/MemberService.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,13 @@ public function getMemberById(
130130
* @param bool $fullDetails
131131
* @param int $limit
132132
* @param string $search
133+
* @param ?int $role
133134
*
134135
* @return Member[]
135136
* @throws InitiatorNotFoundException
136137
* @throws RequestBuilderException
137138
*/
138-
public function getMembers(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = ''): array {
139+
public function getMembers(string $circleId, bool $fullDetails = false, int $limit = 0, string $search = '', ?int $role = null): array {
139140
$this->federatedUserService->mustHaveCurrentUser();
140141

141142
$probe = new MemberProbe();
@@ -151,7 +152,8 @@ public function getMembers(string $circleId, bool $fullDetails = false, int $lim
151152
$probe,
152153
$limit,
153154
$fullDetails,
154-
$search
155+
$search,
156+
$role,
155157
);
156158
}
157159

0 commit comments

Comments
 (0)