プロジェクト

全般

プロフィール

Backport(バックポート) #3794

完了

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

Chiharu Nakajima さんが9年以上前に追加. 9年以上前に更新.

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

100%

予定工数:

説明

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 (修正内容)

修正内容を記入


関連するチケット 1 (0件未完了1件完了)

コピー元 OpenPNE 3 - Bug(バグ) #3602: プロフィール入力値が空の場合の公開設定がプロフィール編集時のデフォルト値に反映されるものとされないものがあるFixed(完了)Chiharu Nakajima2014-05-07

操作

Chiharu Nakajima さんが9年以上前に更新

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

Chiharu Nakajima さんが9年以上前に更新

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

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

Shinichi Urabe さんが9年以上前に更新

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

#3602 の Bug チケットを差し戻した理由と同じです

Shinichi Urabe さんが9年以上前に更新

  • 担当者Chiharu Nakajima にセット

#3602 にコメントした理由と同じでテスト済みにします
担当者は設定してください

Shinichi Urabe さんが9年以上前に更新

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

isao sano さんが9年以上前に更新

  • ステータスPending Testing(テスト待ち) から Pending Merge(マージ待ち) に変更
  • 進捗率70 から 80 に変更

単体試験完了しました。
問題ありません。

マージお願いします。

Shinichi Urabe さんが9年以上前に更新

  • ステータスPending Merge(マージ待ち) から Fixed(完了) に変更
  • 進捗率80 から 100 に変更

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