/** * @static * @param string $baseGroup * @param null $regexp * @param $offset * @param $limit * @param bool $cleanLosts * @param bool $recursive * @param null $countCallback * @param null $loopCallback * @return AbstractAjxpUser[] */ public static function listUsers($baseGroup = "/", $regexp = null, $offset = -1, $limit = -1, $cleanLosts = true, $recursive = true, $countCallback = null, $loopCallback = null) { $baseGroup = self::filterBaseGroup($baseGroup); $authDriver = ConfService::getAuthDriverImpl(); $confDriver = ConfService::getConfStorageImpl(); /** * @var $allUsers AbstractAjxpUser[] */ $allUsers = array(); $paginated = false; if (($regexp != null || $offset != -1 || $limit != -1) && $authDriver->supportsUsersPagination()) { $users = $authDriver->listUsersPaginated($baseGroup, $regexp, $offset, $limit, $recursive); $paginated = $offset != -1 || $limit != -1; } else { $users = $authDriver->listUsers($baseGroup); } $index = 0; // Callback func for display progression on cli mode if ($countCallback != null) { call_user_func($countCallback, $index, count($users), "Update users"); } self::$cacheRoles = true; self::$roles = null; foreach (array_keys($users) as $userId) { if ($userId == "guest" && !ConfService::getCoreConf("ALLOW_GUEST_BROWSING", "auth") || $userId == "ajxp.admin.users" || $userId == "") { continue; } if ($regexp != null && !$authDriver->supportsUsersPagination() && !preg_match("/{$regexp}/i", $userId)) { continue; } $allUsers[$userId] = $confDriver->createUserObject($userId); $index++; // Callback func for display progression on cli mode if ($countCallback != null) { call_user_func($loopCallback, $index); } if (empty($regexp) && $paginated) { // Make sure to reload all children objects foreach ($confDriver->getUserChildren($userId) as $childObject) { $allUsers[$childObject->getId()] = $childObject; } } } self::$cacheRoles = false; if (empty($regexp) && $paginated && $cleanLosts) { // Remove 'lost' items (children without parents). foreach ($allUsers as $id => $object) { if ($object->hasParent() && !array_key_exists($object->getParent(), $allUsers)) { unset($allUsers[$id]); } } } return $allUsers; }