{#
  システムアップデート（update.php）。旧 tpl/update.html。
  screen: apply / update:error / drop / drop:error / complete。
  drop 系ではテーブル項目一覧（dropTables）を出す。permitted / mysqlErr は ALTER 権限チェック結果。
#}
{% extends '@setup/maintenance/layout.twig' %}
{% import '@setup/macros/csrf.twig' as csrf %}

{% block title %}システムアップデート | a-blog cms メンテナンスメニュー{% endblock %}

{% block content %}
  <div class="topicpath-wrap">
    <nav aria-label="現在位置">
      <ol class="topicpath">
        <li><a href="../">HOME</a></li>
        <li><a href="./index.php">メンテナンス</a></li>
        <li><a href="#">システムアップデート</a></li>
      </ol>
    </nav>
  </div>

  <div class="base-container-grid">
    <div class="main-column is-onecolumn">
      <article class="entry ">
        <header class="entry-header">
          <h1 class="entry-title">システムアップデート</h1>
        </header>
        <div class="entry-body acms-entry">

          {% if screen == 'apply' %}
          <form action="?step=update" method="post" class="acms-form acms-admin-form form-box">
            {{ csrf.field(setupFormToken) }}
            <p><strong>メンテナンスプログラムはアップデートの必要性を検出しました。</strong></p>
            <p>システムファイルのバージョンは "<strong>{{ version }}</strong>" です。</p>
            <p>この操作では <strong>データベース</strong> と <strong>config.server.php</strong> を、システムファイルにあわせて最新の状態にアップデートします。<strong>アップデートを行うまでは、システムが正常に動作しないことがあります。</strong></p>

            {% if 'alter_privilege' in errorKeys %}
            <h2>アップデートを実行できません</h2>
            <p>アップデートするには、DB に対する <strong>ALTER権限</strong>が必要です。</p>
            {% endif %}
            {% if mysqlErr %}
            <p style="color: silver">{{ mysqlErr }}</p>
            {% endif %}

            {% if permitted %}
            <p id="submitBtn">
              <input type="submit" name="submit" value="アップデートを実行" class="acms-admin-btn acms-admin-btn-info acms-admin-btn-info acms-admin-btn-large" />
            </p>
            {% endif %}
          </form>
          {% endif %}

          {% if screen == 'update:error' %}
          <form action="?step=update" method="post" class="acms-form acms-admin-form form-box">
            {{ csrf.field(setupFormToken) }}
            <p><strong>メンテナンスプログラムはアップデートの必要性を検出しました。</strong></p>
            <p>システムファイルのバージョンは "<strong>{{ version }}</strong>" です。</p>
            <p>この操作では <strong>データベース</strong> と <strong>config.server.php</strong>
              を、システムファイルにあわせて最新の状態にアップデートします。<strong>アップデートを行うまでは、システムが正常に動作しないことがあります。</strong></p>
            {% if permitted %}
            <p id="submitBtn">
              <input type="submit" name="submit" value="アップデートを実行"
                class="acms-admin-btn acms-admin-btn-info acms-admin-btn-info acms-admin-btn-large" />
            </p>
            {% endif %}
            <p class="errorMsg">アップデートを実行できませんでした</p>
            {% if 'config_exists' in errorKeys %}
            <p class="errorMsg">config.server.php がみつかりません。</p>
            {% endif %}
            {% if 'config_permission' in errorKeys %}
            <p class="errorMsg">config.server.php のパーミッションを確認してください。</p>
            {% endif %}
            {% if 'alter_privilege' in errorKeys %}
            <p class="errorMsg">アップデートするには、DB に対する <strong>ALTER権限</strong>が必要です。</p>
            {% endif %}
            {% if mysqlErr %}
            <p style="color: silver">{{ mysqlErr }}</p>
            {% endif %}
          </form>
          {% endif %}

          {% if screen == 'drop' %}
          <p><strong>データベースと config.server.php が更新されました</strong></p>
          <form action="?step=drop" method="post" class="acms-form acms-admin-form form-box">
            {{ csrf.field(setupFormToken) }}
            {% if hasDrop %}
            <p><strong>使用されていないデータベースのテーブル項目を削除できます</strong></p>
            <p>現在のバージョンの a-blog cms が使用していないデータベースのテーブル項目がある場合は、ここで削除することができます。</p>
            <p>独自に拡張したテーブル項目がある場合にも、以下に表示されますがそれらは削除してはいけません。もし、これらのテーブル項目がよく分からない場合は、削除せずにアップデートを終了ください。</p>

            <h2>a-blog cms が使用していないテーブル一覧</h2>
            <ul>
              {% for table, columns in dropTables %}
              <li>
                {{ table }}
                <ul>
                  {% for col in columns %}
                  <li>
                    <label class="acms-form-checkbox"
                      ><input type="checkbox" name="column[]" value="{{ table }}@{{ col }}" /><i class="acms-ico-checkbox"></i
                      >&nbsp; {{ col }}</label
                    >
                  </li>
                  {% endfor %}
                </ul>
              </li>
              {% endfor %}
            </ul>

            <p id="submitBtn">
              <input type="hidden" name="done" value="true" />
              <input type="submit" name="submit" value="選択したテーブル項目を削除" onclick="return confirm('現在の入力内容で実行してよろしいですか？');"
                class="acms-admin-btn acms-admin-btn-info acms-admin-btn-info acms-admin-btn-large" />
            </p>
            <p>※ 選択してない場合はアップデートを完了します。</p>
            {% else %}
            <p>定義外のカラムはありませんでした。このままアップデートを完了してください。</p>
            <input type="hidden" name="done" value="true" />
            <p id="submitBtn"><input type="submit" name="submit" value="アップデートを完了" class="acms-admin-btn acms-admin-btn-info acms-admin-btn-info acms-admin-btn-large" /></p>
            {% endif %}
          </form>
          {% endif %}

          {% if screen == 'drop:error' %}
          <p><strong>データベースと config.server.php が更新されました</strong></p>
          <form action="?step=drop" method="post" class="acms-form acms-admin-form form-box">
            {{ csrf.field(setupFormToken) }}
            <p><strong>使用されていないデータベースのテーブル項目を削除できます</strong></p>
            <p>現在のバージョンの a-blog cms が使用していないデータベースのテーブル項目がある場合は、ここで削除することができます。</p>
            <p>独自に拡張したテーブル項目がある場合にも、以下に表示されますがそれらは削除してはいけません。もし、これらのテーブル項目がよく分からない場合は、削除せずにアップデートを終了ください。</p>
            {% if hasDrop %}
            <h2>a-blog cms が使用していないテーブル一覧</h2>
            <ul>
              {% for table, columns in dropTables %}
              <li>
                {{ table }}
                <ul>
                  {% for col in columns %}
                  <li>
                    <label class="acms-form-checkbox"><input type="checkbox" name="column[]" value="{{ table }}@{{ col }}" /><i
                        class="acms-ico-checkbox"></i>&nbsp; {{ col }}</label>
                  </li>
                  {% endfor %}
                </ul>
              </li>
              {% endfor %}
            </ul>

            <p id="submitBtn">
              <input type="hidden" name="done" value="true" />
              <input type="submit" name="submit" value="選択したテーブル項目を削除" onclick="return confirm('現在の入力内容で実行してよろしいですか？');"
                class="acms-admin-btn acms-admin-btn-info acms-admin-btn-info acms-admin-btn-large" />
            </p>
            <p>※ 選択してない場合はアップデートを完了します。</p>
            {% endif %}
          </form>
          {% endif %}

          {% if screen == 'complete' %}
          <p><strong>アップデートを完了しました</strong></p>
          <div class="form-box">
            <p><strong>{{ setupDir }}</strong> ディレクトリを削除するか、リネームしてください。</p>
            <p id="submitBtn">
              <a href="{{ httpRoot }}"
                class="acms-admin-btn acms-admin-btn-info acms-admin-btn-info acms-admin-btn-large">アップデート結果の確認</a>
            </p>
          </div>
          {% endif %}

          <p><a href="./index.php">メンテナンスメニューに戻る</a></p>

          <h2>アップデート処理について</h2>
          <h3>1. システムファイルの更新 (手動)</h3>
          <p>
            <a href="https://developer.a-blogcms.jp/document/update/" target="_blank" rel="noopener">アップデートの手順（公式ドキュメント）</a>を参照し、アップデートパッケージ内の <strong>ablogcms</strong> フォルダでシステムファイルを上書きしてください。FTP での手動上書きのほか、ダウンロードから解凍・上書き・旧ファイルのバックアップまでを自動化する「簡単アップデート」も利用できます。
          </p>
          <h3>2. データベースの更新 (自動)</h3>
          <p>最新バージョンの定義ファイルに従って、データベースを自動更新・編集を行います。</p>
          <h3>3. config.server.php の更新 (自動)</h3>
          <p>追加・削除等がある項目について自動更新・編集を行います。</p>

          <h2>アップデートの前に必ずお読みください</h2>
          <h3>config.server.php のパーミッション</h3>
          <p>
            <strong>config.server.php</strong> を PHP から書き込めるようにしてください（例: 所有者が PHP 実行ユーザーなら
            <strong>644</strong>、FTP と実行ユーザーが別の共有環境では同一グループにして <strong>664</strong>）。本番で 666/777 は避けてください。
          </p>
          <h3>データベースの情報</h3>
          <p>
            phpMyAdmin 等から a-blog cms で利用しているテーブルをエクスポートしバックアップしてください。
          </p>
          <h3>アップデートを実行できない場合はシステムファイルを更新しないで下さい</h3>
          <p>
            この画面の上部に "アップデートを実行できません" と表示されている場合は、システムファイルの上書きをしないでください。
          </p>
        </div>
      </article>
    </div>
  </div>
{% endblock %}
