get(self::$cacheKey); if ($data !== null) { return $data; } $data = self::bundleAll(); $handler->save(self::$cacheKey, $data, 0); return $data; } public static function getLabel(string $lookupName, string $key): ?string { $raw = self::getRaw($lookupName); if ($raw === null) return null; foreach ($raw as $item) { if (($item['key'] ?? $item['value'] ?? null) === $key) { return $item['value'] ?? $item['label'] ?? null; } } return null; } public static function getOptions(string $lookupName): array { $raw = self::getRaw($lookupName); if ($raw === null) return []; return array_map(function ($item) { return [ 'key' => $item['key'] ?? '', 'value' => $item['value'] ?? $item['label'] ?? '', ]; }, $raw); } public static function transformLabels(array $data, array $fieldMappings): array { foreach ($data as &$row) { foreach ($fieldMappings as $field => $lookupName) { if (isset($row[$field]) && $row[$field] !== null) { $keyValue = $row[$field]; $row[$field] = $keyValue; $row[$field . 'Label'] = self::getLabel($lookupName, $keyValue) ?? ''; } } } return $data; } public static function clearCache(): bool { $handler = self::getCacheHandler(); return $handler->delete(self::$cacheKey); } private static function bundleAll(): array { $result = []; foreach (glob(self::$dataPath . '*.json') as $file) { $name = pathinfo($file, PATHINFO_FILENAME); if ($name[0] === '_') continue; $data = self::loadFile($file); if ($data) { $result[$name] = $data; } } return $result; } private static function loadFile(string $path): ?array { if (!is_file($path)) return null; $content = file_get_contents($path); return json_decode($content, true); } private static function format(array $values): array { return array_map(fn($v) => [ 'value' => (string) ($v['key'] ?? ''), 'label' => (string) ($v['value'] ?? $v['label'] ?? '') ], $values); } }