プロジェクト

全般

プロフィール

Bug(バグ) #3602

プロフィール入力値が空の場合の公開設定がプロフィール編集時のデフォルト値に反映されるものとされないものがある

Rimpei Ogawaほぼ10年前に追加. 約6年前に更新.

ステータス:
Fixed(完了)
優先度:
High(高め)
対象バージョン:
開始日:
2014-05-07
期日:
進捗率:

100%

3.6 で発生するか:
Yes (はい)
3.8 で発生するか:
Yes (はい)

説明

Overview (現象)

プロフィール登録・編集フォームで、公開設定変更が可能かつ必須項目ではないプロフィール項目に対して値が空の状態で公開設定のみを変更して送信した後に、プロフィール編集フォームを開くと公開設定のデフォルト値に変更が反映されるものとされないものが混在した状態で表示されます。

値が空の場合の公開設定が保持されるかどうかは、管理画面から設定可能なプロフィール項目の種類(フォームタイプと入力値タイプ)によって変わります。

プリセット

タイプ 値が空の場合の公開設定
性別 保持されない
誕生日 保持されない
国または地域 保持される
都道府県 保持される
郵便番号 保持される
電話番号 保持される
自己紹介 保持される

汎用

フォームタイプ 入力値タイプ 値が空の場合の公開設定
テキスト 文字列 保持される
テキスト 数値 保持されない
テキスト メールアドレス 保持される
テキスト URL 保持される
テキスト 正規表現 保持される
テキスト(複数行) 文字列 保持される
単一選択(プルダウン) - 保持されない
単一選択(ラジオボタン) - 保持されない
複数選択(チェックボックス) - 保持されない
日付 - 保持されない

なお、プロフィールの表示に関しては、値が空の場合には公開設定が保持されるされないに関わらず非表示となるため影響がありません。

Causes (原因)

値が空の場合に公開設定が保持されるものは member_profile テーブルにレコードが生成されるもの、保持されないものはレコードが生成されないものです。(メンバーの各プロフィール項目の値と公開設定値は member_profile テーブルの同一のレコード内に保存されます。)

メンバープロフィール情報の登録・編集をおこなう MemberProfileForm には、値が NULL の場合に既存レコードを削除し、新しいレコードは登録しない分岐があります。

MemberProfileForm::save()

      if (is_null($value['value']))
      {
        if ($memberProfile)
        {
          if ($profile->isMultipleSelect())
          {
            $memberProfile->clearChildren();
          }
          $memberProfile->delete();
        }
        continue;
      }

is_null() の判定であるため、値が NULL ではなく空文字列や空配列等である場合にはこのブロックは実行されず member_profile テーブルにはレコードが生成されることになります。

ユーザー入力値が空だった場合に、フォーム内での value がどの値になるかはバリデーターの empty_value オプションの値に依ります。
プロフィール項目の種類(フォームタイプと入力値タイプ)によって挙動が変わるのは、バリデーターをフォームタイプと入力値タイプによって生成している (opFormItemGenerator::generateValidator()) のが原因です。

例:
  • 「フォームタイプ:テキスト、入力値タイプ:文字列」の場合、
    バリデーターは opValidatorString で、empty_value は空文字列 → 公開設定が「保持される」
  • 「フォームタイプ:テキスト、入力値タイプ:数値」の場合、
    バリデーターは sfValidatorInteger で、empty_value は NULL → 公開設定が「保持されない」

Way to fix (修正内容)

修正内容を記入


関連するチケット

コピー先 OpenPNE 3 - Backport(バックポート) #3793: プロフィール入力値が空の場合の公開設定がプロフィール編集時のデフォルト値に反映されるものとされないものがある Fixed(完了) 2014-05-07
コピー先 OpenPNE 3 - Backport(バックポート) #3794: プロフィール入力値が空の場合の公開設定がプロフィール編集時のデフォルト値に反映されるものとされないものがある Fixed(完了) 2014-05-07

関係しているリビジョン

リビジョン 8bf70a27 (差分)
Chiharu Nakajimaほぼ9年前に追加

(refs #3602) Fixed a bug that if profile input value is empty, there are items that visibility is not changed.

リビジョン 129977a4
kaoru n約6年前に追加

Merge pull request #247 from C-nakajima/t-3602

(refs #3602) Fixed a bug that if profile input value is empty, there are items that visibility is not changed.

履歴

#1 Rimpei Ogawaほぼ10年前に更新

  • 説明 を更新 (diff)

プリセット表内の記述が間違っていたので修正

#2 Shinichi Urabe9年以上前に更新

  • 優先度Normal(通常) から High(高め) に変更

#3 isao sano約9年前に更新

  • 担当者isao sano にセット

#4 Chiharu Nakajimaほぼ9年前に更新

  • コピー先 Backport(バックポート) #3793: プロフィール入力値が空の場合の公開設定がプロフィール編集時のデフォルト値に反映されるものとされないものがある を追加

#5 Chiharu Nakajimaほぼ9年前に更新

  • コピー先 Backport(バックポート) #3794: プロフィール入力値が空の場合の公開設定がプロフィール編集時のデフォルト値に反映されるものとされないものがある を追加

#6 Chiharu Nakajimaほぼ9年前に更新

  • 担当者isao sano から Chiharu Nakajima に変更

#7 Chiharu Nakajimaほぼ9年前に更新

  • ステータスNew(新規) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

プルリクエストしました。
https://github.com/openpne/OpenPNE3/pull/247

#8 Shinichi Urabeほぼ9年前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

データを消さないという対応だと思いますが、プロフィールオプションを使った項目で、
プロフィールを選択せずに、保存した場合、 NULL のレコードができ、永遠に残り続けます。

#9 Shinichi Urabeほぼ9年前に更新

  • ステータスRejected(差し戻し) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

Shinichi Urabe は書きました:

データを消さないという対応だと思いますが、プロフィールオプションを使った項目で、
プロフィールを選択せずに、保存した場合、 NULL のレコードができ、永遠に残り続けます。

上記について元々の動作のため問題ありませんでした

#11 kaoru n約6年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

マージしました

#12 kaoru n約6年前に更新

  • 対象バージョンOpenPNE 3.9.0-old にセット

他の形式にエクスポート: Atom PDF