Appearance
ADM-031 メーカーマスタ管理画面
概要
db_maker_masterの一覧・新規登録・名称変更・統合(merge)・無効化を行う専用管理画面。- WordPress 設定サブメニューとして登録。操作はすべて 同一 URL への POST(リダイレクト+クエリ通知)。admin-ajax は使用しない。
- rename / merge / 無効化は確認ダイアログ必須。merge 実行前に影響件数プレビュー(ドライラン)を表示できる。
- パチスロメーカー名の正本マスタ。機種マスタ(
db_kishu_master)がmaker_idで参照する。
外部インターフェース
管理画面 URL
| 項目 | 値 |
|---|---|
| URL | /wp-admin/options-general.php?page=maker-master-admin |
| メニュー名 | メーカーマスタ |
| 権限 | manage_options |
フォーム POST(同期 CRUD / merge)
POST options-general.php?page=maker-master-admin。
maker_master_action 値 | 処理 |
|---|---|
add | 新規登録(upsert_by_names、重複は uk_name で拒否) |
rename | 名称変更(update_name、確認ダイアログ必須) |
deactivate | 無効化(is_active = 0、確認ダイアログ必須) |
merge_preview | 統合の影響件数プレビュー(ドライラン) |
merge | 統合実行(機種マスタの maker_id 差し替え+旧行 DELETE、確認必須) |
update_row | 一覧のインライン更新(メーカー名) |
Nonce フィールド: maker_master_nonce(検証アクション: maker_master_admin)
主な POST パラメータ
| フィールド | 操作 | 説明 |
|---|---|---|
maker_master_id | rename / deactivate | 対象 ID |
maker_master_name | add / rename | メーカー名(必須、最大 255 文字) |
maker_master_source_id | merge_preview / merge | 統合元 ID |
maker_master_target_id | merge_preview / merge | 統合先 ID |
maker_master_submit_token | add | 再送対策トークン(画面描画ごとに発行する 32 桁の 16 進文字列) |
新規登録の二重送信・再送
登録ボタンの連打や接続切断後のブラウザ再送で同じ POST が重ねて届いても、成功した登録に重複エラーを表示しない。
| 状況 | 処理 | 通知 |
|---|---|---|
| 送信中に再度 submit した | JS が 2 回目の submit を止め、送信開始後に submit ボタンを無効化する(共通 master_admin_ui.js)。中止・通信失敗でページが残ったときは 15 秒後、bfcache 復帰時はすぐに解除する | — |
| 同じトークン・同じメーカー名の POST が再送された | 先行リクエストが成功していれば、その結果(10 分保持)を返し、登録処理は実行しない | 最初の結果と同じ |
| 先行リクエストの処理中に再送が届いた | 最大約 3 秒、先行リクエストの結果を待って返す(処理中の印は最長 60 秒で消える) | 先行の結果。待ちきれないときは ADD_IN_PROGRESS |
| 先行リクエストが失敗した(必須・重複・DB 障害など) | 失敗の結果は保持しないため、再送では登録処理をもう一度実行する(入力に起因する失敗は同じ結果になり、一時的な失敗は再試行になる) | 登録処理の結果 |
| 画面を開き直して(新しいトークンで)同じ名前を登録した | 通常どおり登録処理を実行する | ADD_DUPLICATE |
| トークンが無い・形式不正、または保存先が DB エラー | 再送対策をせず登録処理を実行する | 登録処理の結果 |
処理中の印と処理結果は wp_options の 1 行(_submit_result_ + md5、autoload しない)に「期限|中身」で置く。処理中の印は INSERT IGNORE で原子的に確保し、読み書きはオブジェクトキャッシュを通さず DB を直接読む(transient / get_option() は同じリクエスト内ではキャッシュした最初の値を返すため、待っている間に先行リクエストの結果を読めない)。期限切れの行は次に確保したときに消す。どの経路でも行の重複は uk_name が防ぐ。
画面内の POST フォームはすべて同一 URL への POST → リダイレクト(PRG)で画面を描き直す前提で、JS のロックは送信成功時のページ遷移で外れる。
リダイレクト後クエリ(通知)
| クエリ | 内容 |
|---|---|
mm_success | 1 / 0 |
mm_msg | 表示文言(URL エンコード) |
編集・プレビュー用 GET
| GET パラメータ | 説明 |
|---|---|
mm_edit | 名称変更対象 ID |
mm_search | メーカー名部分一致検索 |
mm_merge_preview | 1 のときプレビュー結果表示 |
mm_source_id | プレビュー対象の統合元 ID |
mm_target_id | プレビュー対象の統合先 ID |
一覧 URL のエンコード
ソートリンク・編集リンクとリダイレクト先はいずれも build_list_page_url() が組み立てる。add_query_arg() は値をエンコードしないため、AdminQueryUrl が渡された生値を 1 回だけ URL エンコードする(通知の mm_msg も同じ扱い)。
データ
テーブル: db_maker_master
| カラム | 説明 |
|---|---|
id | 主キー |
name | メーカー名(uk_name) |
is_active | 有効フラグ |
created_at / updated_at | タイムスタンプ |
一覧の参照件数サマリ
| 列名 | 参照先 |
|---|---|
| kishu | db_kishu_master.maker_id 参照件数 |
merge 時の業務テーブル更新
MakerIdBackfillRepository により次のテーブルを更新する。
db_kishu_master(maker_idを統合元から統合先へ差し替え)
更新後、MakerMasterRepository::delete_by_id で統合元マスタ行を物理削除する。
プレビューでは機種マスタの参照件数を表示する。
エラー
| 条件 | ユーザー向け挙動 | メッセージ / ログ |
|---|---|---|
| nonce 不正 | リダイレクト+エラー | Messages::AUTH_FAILED |
| 必須項目空・長さ超過 | リダイレクト+エラー | MakerMasterAdminMessages::* |
| 名称重複 | リダイレクト+エラー | ADD_DUPLICATE |
| 新規登録の再送が先行処理を待ちきれない | リダイレクト+エラー | ADD_IN_PROGRESS |
| merge 同一 ID | リダイレクト+エラー | MERGE_SAME_ID |
| merge DB 失敗 | リダイレクト+エラー | MERGE_FAILED(ErrorHandler にログ) |