Skip to content

Fix/manager language mix in settings#406

Draft
Copilot wants to merge 3 commits intofix/manager-language-mix-in-settingsfrom
copilot/sub-pr-405
Draft

Fix/manager language mix in settings#406
Copilot wants to merge 3 commits intofix/manager-language-mix-in-settingsfrom
copilot/sub-pr-405

Conversation

Copy link
Contributor

Copilot AI commented Mar 5, 2026

概要

管理画面設定の言語キー解決における正規表現の堅牢化と、$lang_keys 未初期化コンテキストへの防御的チェックを追加。

変更内容

  • get_lang_keys() の正規表現を (.*?) から ((?:(?!\1)[^\\\\]|\\\\.)*)へ改善
    • エスケープされたクォートを含むキー(例: $_lang['test\'key'])を正しく抽出
    • .*? の遅延マッチはバックスラッシュエスケープを考慮せず、エスケープ済みクォートでキーが誤切れする問題を修正
  • get_langs_by_key()$lang_keys の型チェックによる早期リターンを追加
    • mutate_settings.dynamic.php 以外のコンテキストから呼ばれた場合の未初期化 foreach エラーを防止
  • get_lang_options() にも同様の $lang_keys 型チェックによる早期リターンを追加
    • $key なし呼び出し時の array_keys($lang_keys) が未初期化状態で警告/TypeError を発生させる問題を防止
  • インストーラーのBASIC認証を廃止し、allowed_ips ベースの制御へ統一
  • インストール完了時に install-config.php の自動削除処理を追加(成功/失敗メッセージとログ出力を追加)
  • リリースワークフローの除外対象を拡充(.agent/, .codex/, .env*, manager/includes/cli/ など)
  • assets/docs/release-process.md を簡潔化し、除外設定のSSOTを release.yml に明示
  • Codex運用向けにPRルール整形、スキル定義、実行計画ドキュメントを追加

確認手順

  • 言語ファイルにエスケープ済みクォートを含むキーがある環境で設定画面を開き、キー抽出エラーが出ないことを確認
  • get_langs_by_key() および get_lang_options()$lang_keys 未初期化状態で呼んだ場合にそれぞれ空配列・空文字列が返ることを確認
  • 管理画面の設定更新画面を開き、言語依存ラベル/説明が混在しないことを確認
  • 複数言語環境で設定キー参照時にエラーが出ないことを確認
  • install-config.php を配置してインストールを実行し、IP制御のみで判定されることを確認
  • インストール完了後、install-config.php が自動削除されること(または失敗時に警告表示されること)を確認
  • release.ymlPrepare dist directory 相当の rsync をローカル実行し、追加除外対象が dist/ に含まれないことを確認

備考

  • このPRにはアプリ実装に加えて、.agent/.codex/ 配下の運用ファイル追加が含まれます。
  • 互換性観点では、インストーラーの BASIC 認証設定を使っていた運用は allowed_ips 前提へ移行が必要です。
  • 正規表現パターン変更は言語ファイルに標準的なキー(エスケープなし)のみ含まれる場合も後方互換。
  • get_langs_by_key()get_lang_options() の防御的チェックは対称性を保つよう追加しており、呼び出し元が mutate_settings.dynamic.php に限定される場合も安全。

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Fix language mix in manager settings Fix/manager language mix in settings Mar 5, 2026
Copilot finished work on behalf of yama March 5, 2026 08:25
@yama
Copy link
Member

yama commented Mar 13, 2026

@copilot 再レビューを。

Co-authored-by: yama <73999+yama@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Mar 13, 2026

@copilot 再レビューを。

再レビューの結果、前回修正で見落とした問題を発見・修正しました(コミット a857061)。

get_langs_by_key() には $lang_keys の型チェックを追加しましたが、同じく global $lang_keys を参照する get_lang_options()array_keys($lang_keys) パスには同様のチェックが入っておらず一貫性を欠いていました。get_lang_options() の先頭に !is_array($lang_keys) の場合は空文字列を早期リターンするガードを追加しました。

その他の確認点:

  • 正規表現のコメント行スキップ未対応 → 実際の言語ファイル(manager/includes/lang/)にコメントアウトされた $_lang エントリが存在しないことを確認済みのため対応不要と判断
  • preg_match_all の戻り値の扱い → 0マッチ時の早期リターンは意図通りの動作

Copilot AI requested a review from yama March 13, 2026 09:01
Copilot finished work on behalf of yama March 13, 2026 09:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants