プロジェクト

全般

プロフィール

Bug(バグ) #3510

opConfig::get() の $default に null 以外を指定すると sns_config.yml のデフォルト値が使用されない

Youichi Kimura10年以上前に追加. ほぼ3年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2013-12-04
期日:
進捗率:

100%

3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

Overview (現象)

sns_config.yml には下記のようにデフォルト値を設定する項目があり、例えば opConfig::get('sns_name') とした場合に sns_config テーブルに該当する値が存在しない場合は 'MySNS' が返るようになっている。また、sns_config.yml でデフォルト値が定義されていない項目については opConfig::get() の第二引数 $default の値が返る。

general:
  sns_name:
    Name:     "sns_name" 
    Caption:  "SNS名" 
    FormType: "input" 
    ValueType: "text" 
    Default:   "MySNS" 
    IsRequired: true

しかし opConfig::get() の第二引数 $default に null 以外の値を指定すると、sns_config テーブルに存在しない設定項目について sns_config.yml に記述されている Default の値は無視され $default の値が返ってしまう。

Causes (原因)

  public static function get($name, $default = null)
  {
    $setting = self::getConfigurationSetting();
    $result = null;

    $result = Doctrine::getTable('SnsConfig')->get($name, $default);
    if (isset($setting[$name]))
    {   
      if (is_null($result))
      {   
        $result = self::getDefaultValue($name);
      }   
    }   

    return $result;
  }

SnsConfigTable::get() の第二引数に $default を指定しているため、sns_config テーブル内に該当するレコードが存在しない場合に is_null($result) が false となり、$result が sns_config から取得された値なのか区別ができなくなってしまうことが原因。

Way to fix (修正内容)

SnsConfigTable::get() の第二引数には null を指定し、最後の return $result; の箇所で $default を使用するか否かの判定を行う。


子チケット

Backport(バックポート) #4384: opConfig::get() の $default に null 以外を指定すると sns_config.yml のデフォルト値が使用されないFixed(完了)isao sano

Backport(バックポート) #4385: opConfig::get() の $default に null 以外を指定すると sns_config.yml のデフォルト値が使用されないFixed(完了)isao sano

関係しているリビジョン

リビジョン 1ee2d377 (差分)
Youichi Kimura10年以上前に追加

fix opConfig::get() doesn't use `Default' value in sns_config.yml when $default argument is set (fixes #3510)

リビジョン 61ae0b57 (差分)
Youichi Kimuraほぼ3年前に追加

fix opConfig::get() doesn't use `Default' value in sns_config.yml when $default argument is set (fixes #3510)

リビジョン 1b57a217 (差分)
kaoru nほぼ3年前に追加

(refs #3510) デフォルト値の優先順位についてコメントを追加

リビジョン 8857a8ba
kaoru nほぼ3年前に追加

Merge pull request #637 from nishizoe/t-3510

fix opConfig::get() doesn't use `Default' value in sns_config.yml when $default argument is set (fixes #3510)

履歴

#1 Youichi Kimura10年以上前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 対象バージョンOpenPNE 3.9.0-old にセット

#2 Youichi Kimura10年以上前に更新

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

更新履歴 1ee2d377283742abcbdc00ade1243a318031325f で適用されました。

#3 Youichi Kimura10年以上前に更新

  • 説明 を更新 (diff)
  • 担当者Youichi Kimura にセット

#4 Yuya Watanabe10年以上前に更新

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

フィードバック

修正内容もテスト実行も問題無いですが,現状だとデフォルト値の優先順位が不明瞭なためコメントか何かにその辺りを記述しておいてもらえると嬉しいです.

テスト実行

$ php test/unit/config/opConfigTest.php 
1..6
# opConfig::get()
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
# Looks like everything went fine.

#5 Chiharu Nakajima9年以上前に更新

  • 優先度Normal(通常) から Low(低め) に変更

#6 Chiharu Nakajima約9年前に更新

このチケットの内容は下記の項目に該当する不具合であるため、一旦優先度を下げます。
・未対応でもユーザーに影響が少ない不具合(回避可能な不具合である等)

#7 kaoru nほぼ7年前に更新

  • 対象バージョンOpenPNE 3.9.0-old から OpenPNE 3.9.0 に変更

対象バージョン変更のため、修正内容の確認を行います。

#8 kaoru n約4年前に更新

  • 対象バージョンOpenPNE 3.9.0 から OpenPNE 3.10.x に変更

#9 isao sano約4年前に更新

#10 kaoru n3年以上前に更新

  • 対象バージョンOpenPNE 3.10.x から OpenPNE 3.11.x に変更

#11 kaoru nほぼ3年前に更新

#12 kaoru nほぼ3年前に更新

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

https://github.com/openpne/OpenPNE3/pull/637
にてプルリクエストしました

#13 Rimpei Ogawaほぼ3年前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#14 isao sanoほぼ3年前に更新

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

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

#15 kaoru nほぼ3年前に更新

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

マージしました

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