resolveMany($tenant, [$groupId]); return $labels[$groupId] ?? self::formatLabel(null, $groupId); } /** * @param array $groupIds * @return array */ public function resolveMany(Tenant $tenant, array $groupIds): array { $groupIds = array_values(array_unique(array_filter($groupIds, fn ($id) => is_string($id) && $id !== ''))); if ($groupIds === []) { return []; } $displayNames = $this->lookupMany($tenant, $groupIds); $labels = []; foreach ($groupIds as $groupId) { $lookupId = Str::isUuid($groupId) ? strtolower($groupId) : $groupId; $labels[$groupId] = self::formatLabel($displayNames[$lookupId] ?? null, $groupId); } return $labels; } /** * @param array $groupIds * @return array Map of groupId (lowercased UUID) => display_name */ public function lookupMany(Tenant $tenant, array $groupIds): array { $uuids = []; foreach ($groupIds as $groupId) { if (! is_string($groupId) || $groupId === '') { continue; } if (! Str::isUuid($groupId)) { continue; } $uuids[] = strtolower($groupId); } $uuids = array_values(array_unique($uuids)); if ($uuids === []) { return []; } return EntraGroup::query() ->where('tenant_id', $tenant->getKey()) ->whereIn('entra_id', $uuids) ->pluck('display_name', 'entra_id') ->mapWithKeys(fn (string $displayName, string $entraId) => [strtolower($entraId) => $displayName]) ->all(); } public static function formatLabel(?string $displayName, string $id): string { $name = filled($displayName) ? $displayName : 'Unresolved'; return sprintf('%s (%s)', trim($name), self::shortToken($id)); } private static function shortToken(string $id): string { $normalized = preg_replace('/[^a-zA-Z0-9]/', '', $id); if (! is_string($normalized) || $normalized === '') { return 'unknown'; } if (mb_strlen($normalized) <= 8) { return $normalized; } return '…'.mb_substr($normalized, -8); } }