Project

General

Profile

Backport(バックポート) #4402

Bug(バグ) #2478: プロフィール項目で「単一選択」の状態で保存したあとに「複数選択」の状態で保存を行おうとしても保存されていないように見える

プロフィール項目で「単一選択」の状態で保存したあとに「複数選択」の状態で保存を行おうとしても保存されていないように見える

Added by isao sano 2 months ago.

Status:
New(新規)
Priority:
Normal(通常)
Assignee:
Target version:
Start date:
2011-10-07
Due date:
% Done:

0%


Description

概要

プロフィール項目で「単一選択」の状態で保存したあとに「複数選択」の状態で保存を行おうとしても保存されていないように見える.
DBを見ると保存されているが,プロフィール閲覧画面(/member/profile)で閲覧しても「単一選択」の時に保存された内容のみが表示される.

再現手順

  1. 管理画面でプロフィール一覧画面から「プロフィール項目登録」をクリックする
    • あるいはプロフィール項目登録画面(pc_backend.php/profile/edit)のページを開く
  2. 「フォームタイプ」を「単一選択(プルダウン)」を選択して「追加」をクリックする
  3. プロフィール項目一覧画面(pc_backend.php/profile/list)の「プロフィール選択肢一覧」で2つ以上の選択肢を保存する
  4. SNSのプロフィール編集画面(member/edit/profile)で先程追加した項目で任意の項目を選択して「送信」をクリックする
    • 選んだ項目が保存されていることを確認する
  5. 管理画面で先程作ったプロフィール項目を「複数選択(チェックボックス)」を選択して「変更」をクリックする
  6. SNSのプロフィール編集画面で先程と同じ項目で2つ以上の項目にチェックを入れて「送信」をクリックする
    • プロフィール閲覧画面(member/profile)において「単一選択(プルダウン)」で選択した項目のみが表示される
    • DB上で確認すると「単一選択(プルダウン)」で保存されたデータと「複数選択(チェックボックス)」で保存されたデータ両方が存在している

確認環境

OpenPNE 3.7.0-dev (master)

原因

「複数選択(チェックボックス)」のデータ保存方法はツリー構造となっており,ルートとなるレコードを元にしてリーフのレコードが「複数選択(チェックボックス)」で選択した項目が保持される.
このとき,ルートとなるレコードが無い場合は新規に作成されてデータがないレコードがルートとして作成され,そのツリーのリーフにデータが保持されたレコードが作成される.そしてプロフィール項目表示時にはそのリーフとなるデータをすべて取得し,表示が行われる.
しかし,「単一選択」ですでにルートとなるレコードが存在する場合(つまりprofile_option_idがNULLでないデータが存在する場合)にはそのレコードにリーフが存在したとしても,ルートのレコードのデータのみが取得されて表示されるようになる.
「テキスト」->「複数選択」の場合もルートとなるレコードは「テキスト」のデータ保存時に作成されたレコードであるが,profile_option_idがNULLであるために本問題が発生しない状態であると考えられる.

修正方針

修正方針は2通り考えられる.
  1. 「複数選択」で保存される場合にルートとなるレコードの情報を削除する
  2. プロフィール閲覧画面で表示する際にフォームタイプが「複数選択(チェックボックス)」であるプロフィール項目はツリー構造のリーフの部分を表示する

Also available in: Atom PDF