Bug(バグ) #1872
完了When a value of MemberConfig's "age_public_flag" is not exists, the label of "Settings" is inconsistent with behavior (MemberConfigの "age_public_flag" の値が存在しないとき、「設定変更」の表示と実際の挙動が異なる)
100%
説明
Overview¶
When a value of MemberConfig's "age_public_flag" is not exists, the caption of "Settings" is inconsistent with behavior.
MemberConfigの "age_public_flag" の値が空のとき、
「設定変更」での表示は「全員に公開」と表示されているのにも関わらず、
実際は「非公開」として取り扱われる。
非常に紛らわしい状況になっている。
Causes¶
lib/config/config/member_config.yml の age_public_flag
の Default が "1" になっている。
Way to fix¶
Default を 3 (private) としておくべき。
(表示の方を現状の挙動に合わせる。
これは、今までリリースしてきた各安定版バージョンが
存在するからである。)
Environment¶
OpenPNE3.4.x 〜
Shogo Kawahara さんがほぼ14年前に更新
- 題名 を MemberConfigの "age_public_flag" の値が空のとき、「設定変更」の表示と実際の挙動が異なる から MemberConfigの "age_public_flag" の値が存在しないとき、「設定変更」の表示と実際の挙動が異なる に変更
Shogo Kawahara さんがほぼ14年前に更新
- 題名 を MemberConfigの "age_public_flag" の値が存在しないとき、「設定変更」の表示と実際の挙動が異なる から When a value of MemberConfig's "age_public_flag" is not exists, the caption of "Settings" is inconsistent with behavior (MemberConfigの "age_public_flag" の値が存在しないとき、「設定変更」の表示と実際の挙動が異なる) に変更
Shogo Kawahara さんがほぼ14年前に更新
- 題名 を When a value of MemberConfig's "age_public_flag" is not exists, the caption of "Settings" is inconsistent with behavior (MemberConfigの "age_public_flag" の値が存在しないとき、「設定変更」の表示と実際の挙動が異なる) から When a value of MemberConfig's "age_public_flag" is not exists, the label of "Settings" is inconsistent with behavior (MemberConfigの "age_public_flag" の値が存在しないとき、「設定変更」の表示と実際の挙動が異なる) に変更
Shogo Kawahara さんがほぼ14年前に更新
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Shogo Kawahara にセット
Shogo Kawahara さんがほぼ14年前に更新
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 23d59234e0000215fe3e252d7db1418200e8f77a で適用されました。
Masato Nagasawa さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Rejected(差し戻し) に変更
- 進捗率 を 70 から 50 に変更
再度レビューしました。差し戻します。
age_public_flag が空の時に年齢が非公開になるのは Member::getAge() が「公開範囲が ProfileTable::PUBLIC_FLAG_SNS や ProfileTable::PUBLIC_FLAG_FRIEND や ProfileTable::PUBLIC_FLAG_WEB であれば公開可能かどうかの検証をし、検証に失敗するか公開範囲がそれ以外の値の場合はすべて null を返す」という実装になっているからであり、この挙動は非常に偶然性の強いものです。この挙動がトラブルを引き起こす可能性としては、たとえば、今後、「『公開範囲が ProfileTable::PUBLIC_FLAG_PRIVATE であった場合に限定した挙動』が追加された場合に age_public_flag が空だと意図どおりに動作しなくなる」といったことが考えられます。このような変更を加えるにあたり、 Member::getAge() の実装を見て「現状『公開しない』として扱われる age_public_flag の値は ProfileTable::PUBLIC_FLAG_PRIVATE の他に null があるので、 null の場合の考慮もしなければならない」と判断するのは難しいことでしょう。もちろん、「公開範囲が ProfileTable::PUBLIC_FLAG_PRIVATE であった場合」という条件を加えることは危険でありそのような修正は避けたほうが無難ですが、今後混入する可能性が否定出来ない以上、この偶然に頼り切るのは危険です。
したがって、 Member::getAge() 側で「age_public_flag が空の場合の公開範囲が明確に ProfileTable::PUBLIC_FLAG_PRIVATE として扱われるようにする」ことも必要なのではないでしょうか。
具体的な対応方法のひとつとしては、 Member::getConfig() 側で、 DB の設定値が取得できなかった場合に設定ファイルを確認し、そちらで指定されているデフォルト値を返すようにするということが考えられます。ただし影響範囲が膨大となるため、それが現実的に厳しそうであれば、 Member::getAge() における Member::getConfig() のコール時に、第二引数の値として ProfileTable::PUBLIC_FLAG_PRIVATE を与える(3.4 の場合は Member::getAge() 内に条件分岐を追加する)ようにするのがよいかと思います。
Kousuke Ebihara さんが13年以上前に更新
- 担当者 を Shogo Kawahara から Kousuke Ebihara に変更
http://redmine.openpne.jp/issues/1872#note-7 で指摘した事項の対応について引き受けます。
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 22b4c0009546efaa9728d199a2676f38f0e34fc9 で適用されました。
Kousuke Ebihara さんが13年以上前に更新
すいません、 a5bafb22ac71a02ef407bb0356ba14e93c7c2cff, 9bcca0767963f8b32f43d82d2118404bd8795858 のコミットは stable-3.6.x への取り込みの際にひもづけるチケット番号を変更し忘れたものです
Naoya Tozuka さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
修正点確認しました。問題ないと思われます。
一点だけ、お手数ですが、今回の lib/model/doctrine/Member.class.php の修正箇所の後で、$publicFlag と定数が比較されている部分について、$publicFlag が左辺に来ているのがコーディング規約に反しますので、直してもらっても宜しいでしょうか?
メモ¶
age_public_flag が参照されている箇所は他に- apps/mobile_frontend/modules/member/templates/profileSuccess.php
- apps/pc_frontend/modules/member/templates/_profileListBox.php
がありますが、どちらも ProfileTable::PUBLIC_FLAG_FRIEND との比較であり、本チケットのような問題は発生しないため現状のままとします。
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 63447f82eb12ec53addfa54776d7f7ccb091b8ce で適用されました。
Naoya Tozuka さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
確認しました。OKです。
Kousuke Ebihara さんが13年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Pending Review(レビュー待ち) に変更
- 進捗率 を 70 から 50 に変更
更新履歴 af98fa6c7949a39e860e2c24b360659bb97ffdf1 で適用されました。
Naoya Tozuka さんが13年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
Minoru Takai さんが13年以上前に更新
このチケットではコミットメッセージ中のコミット番号が誤っていることと、3.6系において stable-3.6.x ブランチと 3.6beta11 ブランチで2回取り込まれていることにより、コミットがどのブランチに紐付くのか分かりにくくなっています。
このチケットでは master ブランチ向けに (1), (2), (3) の3個のコミットが行なわれていることを示しておきます。
Yuma Sakata さんが約13年前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。