' . htmlspecialchars(lang($messageKey)) . '
';
return <<
{$icon}
{$title}
{$message}
{$extraHtml}
{$buttonsHtml}
HTML;
}
/**
* 코어 애플리케이션 버전을 추출합니다.
*
* 우선순위: .env(설치 후) → .env.example(설치 전) → 'unknown'
* 인스톨러는 Laravel 부팅 전이므로 config('app.version') 을 쓸 수 없습니다.
*
* @return string 코어 버전 문자열 (예: '7.0.0-beta.4')
*/
function getCoreAppVersion(): string
{
foreach (['/.env', '/.env.example'] as $relative) {
$path = BASE_PATH . $relative;
if (!is_readable($path)) {
continue;
}
$content = @file_get_contents($path);
if ($content === false) {
continue;
}
if (preg_match('/^APP_VERSION=(.+)$/m', $content, $matches)) {
return trim($matches[1], "\"' \t\r\n");
}
}
return 'unknown';
}
/**
* Progress indicator HTML을 렌더링합니다.
*
* @param int $currentStep 현재 단계 번호
* @param int $totalSteps 전체 단계 수 (기본값: 7, Step 0~6)
* @return string Progress indicator HTML
*/
function renderProgressIndicator(int $currentStep, int $totalSteps = 7): string
{
$html = '