diff options
author | Côme Chilliet <come.chilliet@nextcloud.com> | 2023-09-05 11:22:40 +0200 |
---|---|---|
committer | Côme Chilliet <come.chilliet@nextcloud.com> | 2023-09-05 16:56:48 +0200 |
commit | 2c8b415c55ead6a54989e74d9ff37e0418e6adb2 (patch) | |
tree | a6c898eeb3645d72f6506bc1b78d1d20c9f3554a /lib/private/Group | |
parent | a5fa1e7715b31a804af56637a82e5717910c8e3f (diff) | |
download | nextcloud-server-2c8b415c55ead6a54989e74d9ff37e0418e6adb2.tar.gz nextcloud-server-2c8b415c55ead6a54989e74d9ff37e0418e6adb2.zip |
Move new methods to a new interface in OCP
This avoids breaking compatibility for group backends not based on
ABackend abstract class.
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'lib/private/Group')
-rw-r--r-- | lib/private/Group/Database.php | 2 | ||||
-rw-r--r-- | lib/private/Group/Manager.php | 22 |
2 files changed, 19 insertions, 5 deletions
diff --git a/lib/private/Group/Database.php b/lib/private/Group/Database.php index 0fcc151363b..4cfc3c1f45a 100644 --- a/lib/private/Group/Database.php +++ b/lib/private/Group/Database.php @@ -33,6 +33,7 @@ use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Group\Backend\ABackend; use OCP\Group\Backend\IAddToGroupBackend; +use OCP\Group\Backend\IBatchMethodsBackend; use OCP\Group\Backend\ICountDisabledInGroup; use OCP\Group\Backend\ICountUsersBackend; use OCP\Group\Backend\ICreateGroupBackend; @@ -61,6 +62,7 @@ class Database extends ABackend implements IRemoveFromGroupBackend, ISetDisplayNameBackend, ISearchableGroupBackend, + IBatchMethodsBackend, INamedBackend { /** @var array<string, array{gid: string, displayname: string}> */ private $groupCache = []; diff --git a/lib/private/Group/Manager.php b/lib/private/Group/Manager.php index 924b9a3b6a6..47475121ea0 100644 --- a/lib/private/Group/Manager.php +++ b/lib/private/Group/Manager.php @@ -42,6 +42,7 @@ namespace OC\Group; use OC\Hooks\PublicEmitter; use OCP\EventDispatcher\IEventDispatcher; +use OCP\Group\Backend\IBatchMethodsBackend; use OCP\Group\Backend\IGroupDetailsBackend; use OCP\Group\Events\BeforeGroupCreatedEvent; use OCP\Group\Events\GroupCreatedEvent; @@ -212,7 +213,7 @@ class Manager extends PublicEmitter implements IGroupManager { * @param array<string, string> $displayNames Array containing already know display name for a groupId * @return array<string, IGroup> */ - protected function getGroupsObject(array $gids, array $displayNames = []): array { + protected function getGroupsObjects(array $gids, array $displayNames = []): array { $backends = []; $groups = []; foreach ($gids as $gid) { @@ -224,7 +225,14 @@ class Manager extends PublicEmitter implements IGroupManager { foreach ($this->backends as $backend) { if ($backend instanceof IGroupDetailsBackend || $backend->implementsActions(GroupInterface::GROUP_DETAILS)) { /** @var IGroupDetailsBackend $backend */ - $groupDatas = $backend->getGroupsDetails($gids); + if ($backend instanceof IBatchMethodsBackend) { + $groupDatas = $backend->getGroupsDetails($gids); + } else { + $groupDatas = []; + foreach ($gids as $gid) { + $groupDatas[$gid] = $backend->getGroupDetails($gid); + } + } foreach ($groupDatas as $gid => $groupData) { if (!empty($groupData)) { // take the display name from the last backend that has a non-null one @@ -235,7 +243,11 @@ class Manager extends PublicEmitter implements IGroupManager { } } } else { - $existingGroups = $backend->groupsExists($gids); + if ($backend instanceof IBatchMethodsBackend) { + $existingGroups = $backend->groupsExists($gids); + } else { + $existingGroups = array_filter($gids, fn (string $gid): bool => $backend->groupExists($gid)); + } foreach ($existingGroups as $group) { $backends[$group][] = $backend; } @@ -243,7 +255,7 @@ class Manager extends PublicEmitter implements IGroupManager { } foreach ($gids as $gid) { if (count($backends[$gid]) === 0) { - continue; + continue; } $this->cachedGroups[$gid] = new Group($gid, $backends[$gid], $this->dispatcher, $this->userManager, $this, $displayNames[$gid]); $groups[$gid] = $this->cachedGroups[$gid]; @@ -295,7 +307,7 @@ class Manager extends PublicEmitter implements IGroupManager { $groups = []; foreach ($this->backends as $backend) { $groupIds = $backend->getGroups($search, $limit ?? -1, $offset ?? 0); - $newGroups = $this->getGroupsObject($groupIds); + $newGroups = $this->getGroupsObjects($groupIds); foreach ($newGroups as $groupId => $group) { $groups[$groupId] = $group; } |