<?php
/**
 * ============================================================
 *  動作要件チェック（プリフライト）
 * ------------------------------------------------------------
 *  ※ このファイルだけは「古いPHPでも確実に動く」よう、わざと
 *     PHP 5 系互換の書き方にしています（アロー関数・union型・
 *     match 等を使わない）。本体（PHP 8 構文）より"前"に読み込む
 *     ことで、要件を満たさないサーバーでも真っ白ではなく
 *     日本語の案内画面を出して停止します。
 *  読み込み箇所：index.php と admin/_bootstrap.php の冒頭。
 * ============================================================
 */

if (defined('CMS_REQ_CHECKED')) { return; }
define('CMS_REQ_CHECKED', true);

$cms_req_errors = array();
$cms_php_old = false;

// 1) PHP バージョン（本体は PHP 8.0 以上が必要）
if (version_compare(PHP_VERSION, '8.0.0', '<')) {
    $cms_php_old = true;
    $cms_req_errors[] = 'PHP 8.0 以上が必要です（現在のバージョン：' . PHP_VERSION . '）。'
        . 'サーバーの管理画面で、PHPのバージョンを 8.0 以上に変更してください'
        . '（変更前に、下の「ご注意」を必ずお読みください）。';
}

// 2) SQLite（pdo_sqlite）
if (!extension_loaded('pdo_sqlite')) {
    $cms_req_errors[] = 'データベース用の「pdo_sqlite」拡張が有効になっていません。'
        . 'サーバーのPHP設定で SQLite（pdo_sqlite）を有効にしてください。';
}

// 3) 書き込み権限（data / uploads）
$cms_req_dirs = array('data', 'uploads');
$cms_req_i = 0;
while ($cms_req_i < count($cms_req_dirs)) {
    $d = $cms_req_dirs[$cms_req_i];
    $path = dirname(__FILE__) . '/' . $d;
    if (file_exists($path)) {
        if (!is_writable($path)) {
            $cms_req_errors[] = '「' . $d . '」フォルダに書き込みできません。'
                . 'フォルダのパーミッションを 755 または 775 に設定してください。';
        }
    } else {
        // フォルダがまだ無い場合は、作成できるか＝設置フォルダが書き込み可能か
        if (!is_writable(dirname(__FILE__))) {
            $cms_req_errors[] = '「' . $d . '」フォルダを作成できません。'
                . '設置フォルダの書き込み権限（755/775）をご確認ください。';
        }
    }
    $cms_req_i = $cms_req_i + 1;
}

if (count($cms_req_errors) > 0) {
    if (!headers_sent()) {
        header('Content-Type: text/html; charset=UTF-8');
    }
    echo '<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8">';
    echo '<meta name="viewport" content="width=device-width, initial-scale=1">';
    echo '<title>動作条件の確認</title><style>';
    echo 'body{font-family:-apple-system,"Hiragino Kaku Gothic ProN",Meiryo,sans-serif;background:#f8fafc;color:#1f2937;margin:0;line-height:1.85}';
    echo '.box{max-width:640px;margin:8vh auto;background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:2rem 2.2rem}';
    echo 'h1{font-size:1.25rem;margin:0 0 1rem;color:#b91c1c}';
    echo 'ul{padding-left:1.2rem}li{margin:.55rem 0}';
    echo '.muted{color:#6b7280;font-size:.9rem;margin-top:1.5rem}';
    echo 'code{background:#eef2f7;border-radius:4px;padding:.1em .4em}';
    echo '.warn{background:#fffbeb;border:1px solid #fde68a;border-radius:10px;padding:1rem 1.1rem;margin-top:1.3rem;font-size:.92rem}';
    echo '.warn b{color:#92400e}';
    echo '</style></head><body><div class="box">';
    echo '<h1>このサーバーでは、まだCMSを表示できません</h1>';
    echo '<p>下記の点を確認・修正してください。多くはレンタルサーバーの管理画面から設定できます。</p><ul>';
    $cms_req_j = 0;
    while ($cms_req_j < count($cms_req_errors)) {
        echo '<li>' . htmlspecialchars($cms_req_errors[$cms_req_j], ENT_QUOTES, 'UTF-8') . '</li>';
        $cms_req_j = $cms_req_j + 1;
    }
    echo '</ul>';
    if ($cms_php_old) {
        echo '<div class="warn"><b>⚠️ PHPのバージョンを変更する前に：ご注意ください</b><br>'
            . '同じサーバーで<b>他のプログラム（古いPHP向けに作られたもの）</b>も動かしている場合、'
            . 'PHPのバージョンを上げると、そちらが動かなくなることがあります。<br>'
            . '多くのレンタルサーバーは「<b>ドメインやフォルダごと</b>にPHPのバージョンを指定」できます。'
            . 'まずは<b>このCMSを置いたフォルダ／ドメインだけ</b>を PHP 8.0 以上にする方法をご検討ください。<br>'
            . '判断に迷う場合や、他のサイトを業者に納品してもらっている場合は、'
            . '<b>変更前にサーバー会社または納品業者へご相談</b>ください。</div>';
    }
    echo '<p class="muted">設定方法が分からない場合は、ご契約のサーバー会社のヘルプで '
        . '「PHP バージョン変更」「SQLite」「パーミッション」をお調べください。</p>';
    echo '</div></body></html>';
    exit;
}
