aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Group/Manager.php
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2023-09-05 11:22:40 +0200
committerCôme Chilliet <come.chilliet@nextcloud.com>2023-09-05 16:56:48 +0200
commit2c8b415c55ead6a54989e74d9ff37e0418e6adb2 (patch)
treea6c898eeb3645d72f6506bc1b78d1d20c9f3554a /lib/private/Group/Manager.php
parenta5fa1e7715b31a804af56637a82e5717910c8e3f (diff)
downloadnextcloud-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/Manager.php')
-rw-r--r--lib/private/Group/Manager.php22
1 files changed, 17 insertions, 5 deletions
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;
}