self::INDEPENDENT, 'message' => 'independiente del core']; } if ($coreVersion === null) { return ['status' => self::UNKNOWN, 'message' => 'versión del core desconocida (sin tags)']; } if ($requires === null && $tested === null) { return ['status' => self::UNKNOWN, 'message' => 'sin datos de compatibilidad']; } if ($requires !== null && !Semver::satisfies($coreVersion, $requires)) { return [ 'status' => self::INSUFFICIENT, 'message' => "requiere core {$requires} (tienes {$coreVersion})", ]; } if ($tested !== null && Semver::compare($coreVersion, $tested) > 0) { return [ 'status' => self::UNTESTED, 'message' => "probado hasta {$tested} (tienes {$coreVersion})", ]; } return ['status' => self::OK, 'message' => 'compatible']; } /** * @return array{status:string, message:string} */ public static function evaluatePhp(?string $requires, string $phpVersion): array { if ($requires === null) { return ['status' => self::UNKNOWN, 'message' => 'sin datos de PHP']; } if (!Semver::satisfies($phpVersion, $requires)) { return [ 'status' => self::INSUFFICIENT, 'message' => "requiere PHP {$requires} (tienes {$phpVersion})", ]; } return ['status' => self::OK, 'message' => 'compatible']; } public static function label(string $status): string { return match ($status) { self::OK => 'OK', self::UNTESTED => 'NO PROBADO', self::INSUFFICIENT => 'INSUFICIENTE', self::INDEPENDENT => 'INDEPENDIENTE', default => 'SIN DATOS', }; } }