Project

General

Profile

Bug(バグ) #3602

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

Added by Rimpei Ogawa over 5 years ago. Updated almost 2 years ago.

Status:
Fixed(完了)
Priority:
High(高め)
Target version:
Start date:
2014-05-07
Due date:
% Done:

100%

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

Description

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

修正内容を記入


Related issues

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

History

#1 Updated by Rimpei Ogawa over 5 years ago

  • Description updated (diff)

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

#2 Updated by Shinichi Urabe almost 5 years ago

  • Priority changed from Normal(通常) to High(高め)

#3 Updated by isao sano almost 5 years ago

  • Assignee set to isao sano

#4 Updated by Chiharu Nakajima over 4 years ago

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

#5 Updated by Chiharu Nakajima over 4 years ago

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

#6 Updated by Chiharu Nakajima over 4 years ago

  • Assignee changed from isao sano to Chiharu Nakajima

#7 Updated by Chiharu Nakajima over 4 years ago

  • Status changed from New(新規) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

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

#8 Updated by Shinichi Urabe over 4 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)

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

#9 Updated by Shinichi Urabe over 4 years ago

  • Status changed from Rejected(差し戻し) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

Shinichi Urabe は書きました:

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

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

#11 Updated by kaoru n almost 2 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

マージしました

#12 Updated by kaoru n almost 2 years ago

  • Target version set to OpenPNE 3.9.0-old

Also available in: Atom PDF