プロジェクト

全般

プロフィール

Bug(バグ) #3453

Youichi Kimura さんがほぼ8年前に更新

h3. Overview (現象) 

 管理画面で「Web 全体への年齢公開許可設定」を「メンバーの設定を許可しない」に設定している状態であっても、新規登録時のプロフィール入力画面では年齢の公開範囲に「Web全体に公開」の選択肢が表示され選択できてしまう。 

 h3. Causes (原因) 

 管理画面の「Web 全体への年齢公開許可設定」で設定された値は、@MemberConfigPublicFlagForm::__construct()@ で使用されている。 
 ここでは「Web 全体への年齢公開許可設定」が「メンバーの設定を許可しない」にセットされていた場合、「年齢の公開範囲」の選択肢から「Web 全体に公開」を除去している。 

 source:lib/form/MemberConfigForm/MemberConfigPublicFlagForm.class.php@20d13f4#L31: 
 <pre><code class="php"> 
     if (!opConfig::get('is_allow_web_public_flag_age')) 
     { 
       $widget = $this->widgetSchema['age_public_flag']; 

       $choices = $widget->getOption('choices'); 
       unset($choices[4]); 
       $widget->setOption('choices', $choices); 

       $this->validatorSchema['age_public_flag']->setOption('choices', array_keys($choices)); 
     } 
 </code></pre> 

 しかし、 *新規登録時* のフォームでは MemberConfigPublicFlagForm などの MemberConfigForm 派生クラスは使用されず MemberConfigForm のインスタンスが直接使用されるため、@MemberConfigPublicFlagForm::__construct()@ が呼ばれることはない。 
 そのため、「Web 全体への年齢公開許可設定」の設定値を考慮することなく @MemberConfigForm::generateConfigWidgets()@ によってウィジェットが追加される。 

 h3. Way to fix (修正内容) 

 「Web 全体に公開」の選択肢の除去を @MemberConfigForm::setMemberConfigSettings()@ メソッドに移動する。 修正内容を記入 
 このメソッドは、新規登録画面 (MemberConfigForm インスタンスが使われる) および設定変更画面 (MemberConfigForm 派生クラスのインスタンスが使われる) で共通して使用されるため、これらの画面による選択肢の差異が生じなくなる。

戻る