操作
Backport(バックポート) #4402
未完了Bug(バグ) #2478: プロフィール項目で「単一選択」の状態で保存したあとに「複数選択」の状態で保存を行おうとしても保存されていないように見える
プロフィール項目で「単一選択」の状態で保存したあとに「複数選択」の状態で保存を行おうとしても保存されていないように見える
開始日:
2011-10-07
期日:
進捗率:
0%
予定工数:
説明
概要¶
プロフィール項目で「単一選択」の状態で保存したあとに「複数選択」の状態で保存を行おうとしても保存されていないように見える.
DBを見ると保存されているが,プロフィール閲覧画面(/member/profile)で閲覧しても「単一選択」の時に保存された内容のみが表示される.
再現手順¶
- 管理画面でプロフィール一覧画面から「プロフィール項目登録」をクリックする
- あるいはプロフィール項目登録画面(pc_backend.php/profile/edit)のページを開く
- 「フォームタイプ」を「単一選択(プルダウン)」を選択して「追加」をクリックする
- プロフィール項目一覧画面(pc_backend.php/profile/list)の「プロフィール選択肢一覧」で2つ以上の選択肢を保存する
- SNSのプロフィール編集画面(member/edit/profile)で先程追加した項目で任意の項目を選択して「送信」をクリックする
- 選んだ項目が保存されていることを確認する
- 管理画面で先程作ったプロフィール項目を「複数選択(チェックボックス)」を選択して「変更」をクリックする
- SNSのプロフィール編集画面で先程と同じ項目で2つ以上の項目にチェックを入れて「送信」をクリックする
- プロフィール閲覧画面(member/profile)において「単一選択(プルダウン)」で選択した項目のみが表示される
- DB上で確認すると「単一選択(プルダウン)」で保存されたデータと「複数選択(チェックボックス)」で保存されたデータ両方が存在している
確認環境¶
OpenPNE 3.7.0-dev (master)
原因¶
「複数選択(チェックボックス)」のデータ保存方法はツリー構造となっており,ルートとなるレコードを元にしてリーフのレコードが「複数選択(チェックボックス)」で選択した項目が保持される.
このとき,ルートとなるレコードが無い場合は新規に作成されてデータがないレコードがルートとして作成され,そのツリーのリーフにデータが保持されたレコードが作成される.そしてプロフィール項目表示時にはそのリーフとなるデータをすべて取得し,表示が行われる.
しかし,「単一選択」ですでにルートとなるレコードが存在する場合(つまりprofile_option_idがNULLでないデータが存在する場合)にはそのレコードにリーフが存在したとしても,ルートのレコードのデータのみが取得されて表示されるようになる.
「テキスト」->「複数選択」の場合もルートとなるレコードは「テキスト」のデータ保存時に作成されたレコードであるが,profile_option_idがNULLであるために本問題が発生しない状態であると考えられる.
修正方針¶
修正方針は2通り考えられる.- 「複数選択」で保存される場合にルートとなるレコードの情報を削除する
- プロフィール閲覧画面で表示する際にフォームタイプが「複数選択(チェックボックス)」であるプロフィール項目はツリー構造のリーフの部分を表示する
操作