88 */
99namespace OCA \Provisioning_API \Controller ;
1010
11+ use OC \Group \DisplayNameCache as GroupDisplayNameCache ;
1112use OC \Group \Manager as GroupManager ;
1213use OC \User \Backend ;
1314use OC \User \NoUserException ;
3536
3637/**
3738 * @psalm-import-type Provisioning_APIUserDetails from ResponseDefinitions
39+ * @psalm-import-type Provisioning_APIUserDetailsGroupDisplayname from ResponseDefinitions
3840 * @psalm-import-type Provisioning_APIUserDetailsQuota from ResponseDefinitions
3941 */
4042abstract class AUserDataOCSController extends OCSController {
@@ -61,6 +63,7 @@ public function __construct(
6163 protected ISubAdmin $ subAdminManager ,
6264 protected IFactory $ l10nFactory ,
6365 protected IRootFolder $ rootFolder ,
66+ private GroupDisplayNameCache $ groupDisplayNameCache ,
6467 ) {
6568 parent ::__construct ($ appName , $ request );
6669 }
@@ -102,11 +105,7 @@ protected function getUserData(string $userId, bool $includeScopes = false): ?ar
102105
103106 // Get groups data
104107 $ userAccount = $ this ->accountManager ->getAccount ($ targetUserObject );
105- $ groups = $ this ->groupManager ->getUserGroups ($ targetUserObject );
106- $ gids = [];
107- foreach ($ groups as $ group ) {
108- $ gids [] = $ group ->getGID ();
109- }
108+ $ gids = $ this ->groupManager ->getUserGroupIds ($ targetUserObject );
110109
111110 if ($ isAdmin || $ isDelegatedAdmin ) {
112111 try {
@@ -252,6 +251,36 @@ protected function getUserSubAdminGroupsData(string $userId): array {
252251 return $ groups ;
253252 }
254253
254+ /**
255+ * A full group has id, name, usercount, disabled, canAdd and canRemove. Only
256+ * the displayname is cached; usercount/disabled are not cached. So this only
257+ * returns an {id, displayname} skeleton instead of the full group.
258+ *
259+ * @param array<string, Provisioning_APIUserDetails|array{id: string}> $userDetails
260+ * @return list<Provisioning_APIUserDetailsGroupDisplayname>
261+ */
262+ protected function findGroupsWithDisplayname (array $ userDetails ): array {
263+ $ groupIds = [];
264+
265+ foreach ($ userDetails as $ userDetail ) {
266+ if (isset ($ userDetail ['groups ' ])) {
267+ array_push ($ groupIds , ...array_values ($ userDetail ['groups ' ]));
268+ }
269+ if (isset ($ userDetail ['subadmin ' ])) {
270+ array_push ($ groupIds , ...array_values ($ userDetail ['subadmin ' ]));
271+ }
272+ }
273+
274+ $ groupIds = array_unique ($ groupIds );
275+ sort ($ groupIds );
276+
277+ $ info = [];
278+ foreach ($ this ->groupDisplayNameCache ->getDisplayNames ($ groupIds ) as $ groupId => $ displayName ) {
279+ $ info [] = ['id ' => $ groupId , 'displayname ' => $ displayName ?? $ groupId ];
280+ }
281+ return $ info ;
282+ }
283+
255284 /**
256285 * @param IUser $user
257286 * @return Provisioning_APIUserDetailsQuota
0 commit comments