@@ -218,6 +218,13 @@ public function getUnassignedID($uid, $UnitySQL)
218
218
return $ next_uid ;
219
219
}
220
220
221
+ public function getAllUsersUIDs ()
222
+ {
223
+ // should not use $user_ou->getChildren or $this->search(objectClass=posixAccount, $base_dn)
224
+ // Unity users might be outside user ou, and not all users in LDAP tree are unity users
225
+ return $ this ->userGroup ->getAttribute ("memberuid " );
226
+ }
227
+
221
228
//
222
229
// Functions that return user/group objects
223
230
//
@@ -236,14 +243,24 @@ public function getAllUsers($UnitySQL, $UnityMailer, $UnityRedis, $UnityWebhook,
236
243
}
237
244
}
238
245
239
- $ users = $ this ->userGroup -> getAttribute ( " memberuid " );
246
+ $ users = $ this ->getAllUsersUIDs ( );
240
247
sort ($ users );
241
248
foreach ($ users as $ user ) {
242
249
$ params = array ($ user , $ this , $ UnitySQL , $ UnityMailer , $ UnityRedis , $ UnityWebhook );
243
250
array_push ($ out , new UnityUser (...$ params ));
244
251
}
252
+ }
245
253
246
- return $ out ;
254
+ public function getAllUsersEntries ()
255
+ {
256
+ $ include_uids = $ this ->getAllUsersUIDs ();
257
+ $ user_entries = $ this ->search ("objectClass=posixAccount " , $ CONFIG ["ldap " ]["basedn " ], []);
258
+ foreach ($ user_entries as $ i => $ entry ) {
259
+ if (!in_array ($ entry ["uid " ], $ include_uids )) {
260
+ unset($ user_entries [$ i ]);
261
+ }
262
+ }
263
+ return $ user_entries ;
247
264
}
248
265
249
266
public function getAllPIGroups ($ UnitySQL , $ UnityMailer , $ UnityRedis , $ UnityWebhook , $ ignorecache = false )
@@ -278,6 +295,32 @@ public function getAllPIGroups($UnitySQL, $UnityMailer, $UnityRedis, $UnityWebho
278
295
return $ out ;
279
296
}
280
297
298
+ public function getAllPIGroupsEntries ()
299
+ {
300
+ return $ this ->pi_groupOU ->getChildrenArray (true );
301
+ }
302
+
303
+ /** Returns an assosiative array where keys are UIDs and values are lists of PI GIDs */
304
+ public function getAllUID2PIGIDs ()
305
+ {
306
+ // initialize output so each UID is a key with an empty array as its value
307
+ $ UID2PIGIDs = array_combine (
308
+ $ this ->getAllUsersUIDs (),
309
+ array_map (
310
+ fn ($ x ) => [],
311
+ $ this ->getAllUsersUIDs ()
312
+ )
313
+ );
314
+ // for each PI group, append that GID to the member list for each of its member UIDs
315
+ foreach ($ this ->getAllPIGroupsEntries () as $ entry ) {
316
+ $ gid = $ entry ["cn " ];
317
+ foreach ($ entry ["memberUid " ] as $ uid ) {
318
+ array_push ($ UID2PIGIDs [$ uid ], $ gid );
319
+ }
320
+ }
321
+ return $ UID2PIGIDs ;
322
+ }
323
+
281
324
public function getAllOrgGroups ($ UnitySQL , $ UnityMailer , $ UnityRedis , $ UnityWebhook , $ ignorecache = false )
282
325
{
283
326
$ out = array ();
@@ -309,6 +352,11 @@ public function getAllOrgGroups($UnitySQL, $UnityMailer, $UnityRedis, $UnityWebh
309
352
return $ out ;
310
353
}
311
354
355
+ public function getAllOrgGroupsEntries ()
356
+ {
357
+ return $ this ->org_groupOU ->getChildrenArray (true );
358
+ }
359
+
312
360
public function getUserEntry ($ uid )
313
361
{
314
362
$ uid = ldap_escape ($ uid , LDAP_ESCAPE_DN );
0 commit comments