Bug(バグ) #1874
完了
管理画面の公開設定変更の可否を「メンバー選択」から「固定」に変更すると、公開設定のデフォルト値でメンバー側の設定が更新されてしまう
isao sano さんがほぼ14年前に追加.
約9年前に更新.
説明
管理画面の公開設定変更の可否を「メンバー選択」から「固定」に変更すると、公開設定デフォルト値でメンバー側の設定を上書きしてしまう。
メンバー側が非公開にしている項目が、管理側の公開設定デフォルト値次第では公開されてしまう恐れがある。
バージョン¶
再現手順¶
1.管理画面の設定で誕生日のプロフィール項目の公開設定変更の可否を「メンバー選択」にしておく
2.メンバー側で誕生日の公開範囲を「公開しない」にする
3.管理画面の誕生日の公開設定変更の可否を「固定」に戻す
4.管理画面の誕生日の公開設定デフォルト値は「全員に公開」のままにしておく
5.手順2で設定した非公開設定が手順3の設定で上書きされ「全員の公開」になる
- メンバー側の誕生日の公開範囲を「フレンドまで公開」にして、非フレンドユーザーから見た場合でも同じことが起きる(確認済み)
- 他のプロフィールでも同様の現象がおきる事が予想できます。(未確認)
OS Windows XP
ブラウザ Firefox 3.6.13
Causes¶
固定の公開範囲を保存するときに、ProfileForm::save() が
MemberProfileの "public_flag" の値を デフォルトものに上書きしています。
Way to fix¶
プロフィール表示・検索機能にて、メンバーの設定値を上書きしないで管理画面の公開設定デフォルト値が適用される様に修正する
1. ProfileForm::save() で MemberProfile の "public_flag" の値を上書きしないようにする。
2. MemberProfile の表示判定を 公開範囲の固定に備えて変更する。
3. 検索時の抽出判定を 公開範囲の固定に備えて変更する。
- 担当者 を Shogo Kawahara にセット
- 優先度 を Normal(通常) から High(高め) に変更
- 対象バージョン を OpenPNE 3.7.0 にセット
- 3.6 で発生するか を Yes にセット
- ステータス を New(新規) から Accepted(着手) に変更
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
公開範囲の動作の「内容」としては問題なく、管理画面での公開設定デフォルト値よりもユーザーの設定した公開範囲が優先されているが、
メンバーのプロフィール画面(member/profile)に遷移した際に公開設定デフォルト値が表示される。
再現手順¶
1. 管理画面のプロフィール項目編集(/pc_backend.php/profile/edit/id/2)で誕生日の公開設定変更の可否を「メンバー選択」に設定する。
2. ユーザーAでログインし、誕生日の公開範囲を「公開しない」に設定する。
3. 管理画面の誕生日の公開設定変更の可否を「固定」に設定する。
4. 管理画面の誕生日の公開設定デフォルト値を「Web全体に公開」に設定する。
5. ユーザーAでログインし、プロフィール確認画面(member/profile)に遷移する
6. 誕生日の横に(Web全体に公開)という表示がある
- 担当者 を Shogo Kawahara から Shingo Yamada に変更
- 題名 を メンバーの設定した公開範囲よりも管理画面の公開設定デフォルト値が優先される から 管理画面の公開設定変更の可否を「メンバー選択」から「固定」に変更すると、公開設定のデフォルト値でメンバー側の設定が上書かれてしまう に変更
isao sano は書きました:
公開範囲の動作の「内容」としては問題なく、管理画面での公開設定デフォルト値よりもユーザーの設定した公開範囲が優先されているが、
メンバーのプロフィール画面(member/profile)に遷移した際に公開設定デフォルト値が表示される。
#note-5 の指摘ですが、この挙動は意図したものとなります。
対応は行いません。
- ステータス を Pending Testing(テスト待ち) から Pending Fixing(修正待ち) に変更
プロフィール検索時に管理画面の公開設定デフォルト値が適用されていないようです。
差し戻します。
- 担当者 を Shingo Yamada から Maki Takahashi に変更
- 題名 を 管理画面の公開設定変更の可否を「メンバー選択」から「固定」に変更すると、公開設定のデフォルト値でメンバー側の設定が上書かれてしまう から 管理画面の公開設定変更の可否を「メンバー選択」から「固定」に変更すると、公開設定のデフォルト値でメンバー側の設定が更新されてしまう に変更
現状での動作は以下のようになります。
確認手順¶
1. 管理画面のプロフィール項目編集(/pc_backend.php/profile/edit/id/2)で誕生日の公開設定変更の可否を「メンバー選択」に設定する。
2. pc_frontend側でユーザーAの誕生日の公開範囲を「公開しない」に設定する。
3. 管理画面の誕生日の公開設定変更の可否を「固定」に設定する。
4. 管理画面の誕生日の公開設定デフォルト値を「Web全体に公開」に設定する。
5. ログアウトしてユーザーAのプロフィール(/member/xx)に直接アクセスする。
6. ユーザーAでログインし、プロフィール確認画面(member/profile)にアクセスする。
7. ユーザーBでログインし、ユーザーAの誕生日を入れて検索する。
8. ユーザーBでログインし、ユーザーAのプロフィール画面に遷移する。
9. 管理画面のプロフィール項目編集(/pc_backend.php/profile/edit/id/2)で誕生日の公開設定変更の可否を「メンバー選択」に設定する。
10. ユーザーAでログインし、プロフィール確認画面(member/profile)にアクセスする。
11. ユーザーAでログインし、プロフィール編集画面(member/edit/profile)にアクセスする。
12. ユーザーBでログインし、ユーザーAのプロフィール画面に遷移する。
■「固定」¶
5. ログアウトしてユーザーAのプロフィール(/member/xx)に直接アクセスする。
6. ユーザーAでログインし、プロフィール確認画面(member/profile)にアクセスする。
つまり「※他のメンバーから見たあなたのページはこのようになります。」のページです
- 誕生日は表示され、その横に(Web全体に公開)と表示されている
7. ユーザーBでログインし、ユーザーAの誕生日を入れて検索する。
8. ユーザーBでログインし、ユーザーAのプロフィール画面に遷移する。
■「メンバー選択」¶
10. ユーザーAでログインし、プロフィール確認画面(member/profile)にアクセスする。
11. ユーザーAでログインし、プロフィール編集画面(member/edit/profile)にアクセスする。
- 誕生日の公開範囲が「公開しない」のままになっている
12. ユーザーBでログインし、ユーザーAのプロフィール画面に遷移する。
- ステータス を Pending Fixing(修正待ち) から Accepted(着手) に変更
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 70 から 50 に変更
https://github.com/openpne/OpenPNE3/commit/d0a4c4bdb813fcf7e69758cecac14d9ec7191aca
にて、
管理画面の公開設定が「固定」の場合、メンバー検索にデフォルト値を適用するように修正しました。
- 管理画面の公開設定が「メンバー選択」の場合、メンバー検索時にはユーザの公開設定が「全員に公開」もしくは「Web全体に公開」となっているユーザのみ検索対象となる(変更なし)
- 管理画面の公開設定が「固定」の場合、デフォルトの公開設定値が「全員に公開」「Web全体に公開」の場合、ユーザの公開設定の値に関わらず全てのユーザが検索対象となる(ユーザが非公開にしていても検索される)
- 管理画面の公開設定が「固定」の場合、デフォルトの公開設定値が「マイフレンドまで公開」「公開しない」の場合、ユーザの公開設定の値に関わらず、検索対象から外れる(ユーザが「全体に公開」していても、だれも検索されない)。
- 「公開しない」の場合はそもそも検索フォームが表示されない
以上を確認いたしました。
- ステータス を Pending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
- 進捗率 を 50 から 70 に変更
レビューOKです。
if (
ProfileTable::PUBLIC_FLAG_SNS == $item->getDefaultPublicFlag()
|| ProfileTable::PUBLIC_FLAG_WEB == $item->getDefaultPublicFlag()
)
のような記法について、コーディング規約では特に禁じていないと解釈していますが(開括弧の後にスペースがあるとコーディング規約違反ですが、改行については規約に言及がないのではと)他の開発者の皆様に考えがありましたら教えてください。
note-15 について補足¶
if 文の条件式などで、記述を一行に収めない場合の記述については、現状のコーディング規約では言及されていません(ルールがありません)。実際、そのような場合には実装者の裁量でどのような記述にするかが決められているようです。
if (
ConditinalExpressionA &&
ConditinalExpressionB
)
{
}
if (
ConditinalExpressionA
&& ConditinalExpressionB
)
{
}
if (
ConditinalExpressionA
&&
ConditinalExpressionB
)
{
}
if (ConditinalExpressionA &&
ConditinalExpressionB)
{
}
if (ConditinalExpressionA && ConditinalExpressionB
&& LongLongConditinalExpressionC)
{
}
など、現在のソースコード中にもいくつかの形式が混在しているように思います。なお、個人的な意見ですが、フォーマットを制限する必要はない(その場その場で可読性があればよい)と思いますが、一行に書くと見にくい場合について、 if 文や for 文などでどのような表記が好ましいかを指標として示してあるべきだとは思います(コーディング規約ページの改善)。
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
- 3.8 で発生するか を Unknown (未調査) にセット
他の形式にエクスポート: Atom
PDF