WP-ADMIN WIREFRAME — B-CTR-001 契約管理
🏠 LMS学習サイト | サイトを表示
🔔 3
👤
事務局担当者

契約情報を編集

新規追加 ← 一覧に戻る
ℹ️ 契約情報を編集しています。変更後は「更新」ボタンをクリックしてください。

📋 契約基本情報

契約ID

自動採番。変更不可

契約期間*

開始日・終了日ともに必須。YYYY-MM-DD形式

契約金額*
円(税抜)

年間契約金額を税抜で入力。半角数字のみ(カンマ区切り不要)

契約事業所数*
事業所

本契約で管理できる事業所の上限数

個人アカウント上限数
アカウント

基本プランは0(未購入)。個人アカウント導入オプションで100、追加オプションで20単位ずつ加算

備考

事務局内部メモ。会員には表示されません

📅 契約変更履歴

この契約の変更履歴を表示しています(直近5件)。

変更日時 変更項目 変更前 変更後 操作者
2026-06-10 14:22 契約事業所数 6事業所 8事業所 田中 美咲
2026-04-01 09:00 個人アカウント上限数 0 100 山田 太郎
2026-04-01 09:00 契約金額 240,000円 480,000円 山田 太郎
2026-04-01 09:00 契約期間 〜2026-03-31 〜2027-03-31 山田 太郎
2025-03-20 11:05 更新状況 更新待ち 更新済み 田中 美咲

📌 契約ステータス

契約状態: 有効
更新状況:
契約終了まで: 285日
登録日: 2026-04-01
最終更新: 2026-06-10

🏢 対象法人

B-MBR-001(法人一覧)に登録済みの法人から選択

法人ID CORP-0089
担当者 鈴木 一郎
連絡先 06-XXXX-XXXX
事業所数 8事業所
現契約 有効

法人詳細を表示 →

📊 利用状況

使用事業所 8 / 8事業所
総アカウント 183 / 200
法人管理者 1
事業所管理者 8
個人アカウント 174

利用状況は読み取り専用。アカウント管理はB-MBR-001から操作

📋 実装注記(開発者向け)

1. WP実装方針

カスタム管理ページとして add_submenu_page() で「会員管理 > 契約管理」に登録。契約情報はカスタムテーブル lms_contracts で管理(WP投稿タイプではなく独自テーブルを使用)。編集フォームは admin_post_{action} フックで処理し、保存後は wp_redirect() でリダイレクト。契約履歴は lms_contract_history テーブルから取得し、変更のたびに lms_log_contract_change() で記録。ページ上部の通知は $_GET['message'] パラメータで制御。

2. 権限制御

アクセス権限: manage_lms_contracts カスタムケイパビリティ。メニュー表示・フォーム保存・削除のそれぞれで current_user_can('manage_lms_contracts') を検証。対象法人の変更(セレクトボックス)は manage_options 権限のみ許可(誤操作防止)。利用状況メタボックスは全事務局スタッフに読み取り専用で表示。削除操作は追加確認ダイアログを必須とし、物理削除ではなくステータス deleted への論理削除で実装。

3. データ構造

主テーブル: lms_contractsid, corp_id, start_date, end_date, amount, max_offices, max_personal_accounts, renewal_status, status, notes, created_at, updated_at)。変更履歴テーブル: lms_contract_historyid, contract_id, field_name, old_value, new_value, changed_by, changed_at)。対象法人は lms_corporations テーブルの corp_id を外部キー参照。利用状況は lms_accounts テーブルから集計(契約IDで絞り込み)。

4. 一括操作・行アクション

編集画面では行アクション不要(一覧画面 B-CTR-001 一覧側で定義)。「← 一覧に戻る」で admin.php?page=lms-contracts へ遷移。「全履歴を表示」はモーダルまたは別ページで全 lms_contract_history を表示(Phase1では別ページ遷移で実装)。「削除」は確認ダイアログ(confirm())後に admin_post_lms_delete_contract へ POST。更新ボタンは admin_post_lms_save_contract アクションへ POST。

5. Screen Options

カスタム管理ページのため WP 標準 Screen Options は自動適用されない。add_screen_option() でメタボックスの表示/非表示を独自実装する場合は set_screen_option フィルタも合わせて追加。Phase1 では全メタボックスを常時表示とし Screen Options は実装しない方針(工数削減)。メタボックスの折りたたみ状態は wp_usermeta(キー: lms_contract_edit_collapsed)にJSON形式で保存し、次回アクセス時に復元する。

6. パフォーマンス・セキュリティ

フォーム送信時に wp_nonce_field('lms_save_contract_' . $contract_id, 'lms_contract_nonce') でNonce検証(契約ID付きで生成し、CSRF対策を強化)。契約金額は absint() で整数化後に保存。日付フィールドは正規表現 /^\d{4}-\d{2}-\d{2}$/ で形式検証し、DateTime クラスで妥当性チェック(存在しない日付を拒否)。終了日が開始日以前の場合はエラーを返す。テキストは sanitize_textarea_field() でサニタイズ。契約履歴テーブルへの書き込みはメイン保存と同一 DB トランザクション内で行い、履歴欠損を防ぐ($wpdb->query('START TRANSACTION'))。利用状況の集計クエリは COUNT() + GROUP BY corp_id で実装し、レスポンス改善のため set_transient()(TTL: 5分)でキャッシュ。大量法人(2,000社超え時)の法人セレクトボックスは SELECT2 相当の非同期検索に切り替えることを検討。