Bug(バグ) #2431
未完了op_preset_birthday の日付範囲が制限されていない
0%
説明
Mutsumi Imamura さんが約13年前に更新
■修正方針の案として
日付の範囲指定ですが、「-100年 ~ 今日」といった固定の値ではなく、管理ユーザーが日付範囲指定を変更できるようにしてあげたほうが良いと思います。
- 戦国武将SNSなど、歴史の偉人に成り切ってメンバー登録したい場合に不便になる
- 100歳以上の人間は現に存在する
この2点の理由の回避策として、年齢のプリセットプロフィールを使わないで日付型プロフィールを追加するという方法もありますが、利用者の利便性を考えるとプリセットプロフィールで考慮してあげるのが良いと思います。
Kousuke Ebihara さんが約13年前に更新
■修正方針の案として
理由としては↓の2点です。
日付の範囲指定ですが、「-100年 ~ 今日」といった固定の値ではなく、管理ユーザーが日付範囲指定を変更できるようにしてあげたほうが良いと思います。
- 戦国武将SNSなど、歴史の偉人に成り切ってメンバー登録したい場合に不便になる
- 100歳以上の人間は現に存在する
この2点の理由の回避策として、年齢のプリセットプロフィールを使わないで日付型プロフィールを追加するという方法もありますが、利用者の利便性を考えるとプリセットプロフィールで考慮してあげるのが良いと思います。
この問題は誕生日に限ったものではありません。プリセットプロフィールの一部設定値がデフォルトから変更できないという現状の実装自体の問題です。
このチケットで扱っている問題は(チケットの書き方がとても悪いのですが)、 op_preset_birthday がデフォルトで許容する値として、多くの SNS で採用できるであろう「-100年から今日」という制限を指定しているにもかかわらず、それが機能していないという問題です。
- チケット作成者はこのチケットの意図するところを明確に書くべきです
- comment-1 の提案はオフトピックであり、このチケットで扱うべきではないと考えられます
- comment-1 の提案に対して、誕生日に限定した対応をおこなうのは不適切です。この問題はすべてのプリセットプロフィールに共通の問題であり、対応もほとんど低コストで一般化できます
- comment-1 の提案への対応は変更のインパクトがやや大きいため、安易に安定版に入れることはできません
Mutsumi Imamura さんが約13年前に更新
「-100年から今日」という制限を指定しているにもかかわらず、それが機能していないという問題です。
この問題ついて把握していなかったため、comment-1 の提案をしてしまいました。
制限が機能していないという問題であれば、comment-1 の提案は相応しくないと思います。
comment-1 の提案のような機能変更するのであればこのチケットではなく別のチケットにて対応するかつ、安定版では対応しないということに賛成します。
Shingo Yamada さんが約13年前に更新
OSS向け修正パッチ(OpenPNE-3.6beta14 に対するパッチ)
【注意】- このパッチでは設定済みのプロフィール項目には修正が適用されません(既存SNSでは管理画面からのプロフィール項目再設定が必要となってしまう)
- OpenPNE 2→3 のアップグレード時には、2系の仕様 birth_year の最小値 1901 を適用しています(これもアップグレード済みのSNSには適用されません)
- 下記パッチのテストは不十分です
diff --git a/data/fixtures/001_import_profile.yml b/data/fixtures/001_import_profile.yml index 5eda7ab..06c7351 100644 --- a/data/fixtures/001_import_profile.yml +++ b/data/fixtures/001_import_profile.yml @@ -21,6 +21,8 @@ Profile: is_disp_search: 1 is_edit_public_flag: 0 default_public_flag: 1 + value_min: "-100years" + value_max: "now" sort_order: 120 profile_region: diff --git a/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php b/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php index 0543df5..a62915a 100644 --- a/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php +++ b/data/upgrade/2/opUpgradeFrom2MemberProfileStrategy.class.php @@ -108,7 +108,7 @@ class opUpgradeFrom2MemberProfileStrategy extends opUpgradeAbstractStrategy $introId = $this->conn->lastInsertId(); $this->conn->execute('INSERT INTO member_profile (id, member_id, profile_id, profile_option_id, value, value_datetime, public_flag, tree_key, lft, rgt, level, created_at, updated_at) (SELECT c_member_profile_id, c_member_id, c_profile_id, NULL, value, NULL, public_flag, c_member_profile_id, 1, 2, 0, NOW(), NOW() FROM c_member_profile WHERE c_profile_id = ?)', array($introId)); - $this->conn->execute('INSERT INTO profile (id, name, is_required, is_unique, is_edit_public_flag, default_public_flag, form_type, value_type, is_disp_regist, is_disp_config, is_disp_search, value_regexp, value_min, value_max, sort_order, created_at, updated_at) VALUES (NULL, "op_preset_birthday", 1, 0, 0, 1, "date", "string", 1, 1, 1, NULL, NULL, NULL, 1, NOW(), NOW())'); + $this->conn->execute('INSERT INTO profile (id, name, is_required, is_unique, is_edit_public_flag, default_public_flag, form_type, value_type, is_disp_regist, is_disp_config, is_disp_search, value_regexp, value_min, value_max, sort_order, created_at, updated_at) VALUES (NULL, "op_preset_birthday", 1, 0, 0, 1, "date", "string", 1, 1, 1, NULL, "1901-01-01", "now", 1, NOW(), NOW())'); $birthdayId = $this->conn->lastInsertId(); $date = $this->conn->expression->concat('birth_year', '"-"', 'birth_month', '"-"' , 'birth_day'); diff --git a/lib/config/config/preset_profile.yml b/lib/config/config/preset_profile.yml index 8b2459f..1d9b587 100644 --- a/lib/config/config/preset_profile.yml +++ b/lib/config/config/preset_profile.yml @@ -34,9 +34,8 @@ birthday: IsRequired: false IsEditPublicFlag: true DefaultPublicFlag: 0 - Params: - "max" : "now" - "mix" : "-100years" + ValueMin: "-100years" + ValueMax: "now" country: Name: "country"
Shingo Yamada さんが約13年前に更新
Shingo Yamada は書きました:
【注意】
- このパッチでは設定済みのプロフィール項目には修正が適用されません(既存SNSでは管理画面からのプロフィール項目再設定が必要となってしまう)
上記問題についての提案¶
上記の件について、DBの値を修正する救済タスクを作成し、対応が必要なSNSの管理者にはそのタスクを実行してもらう方針はいかがでしょうか?
Minoru Takai さんが約13年前に更新
- 説明 を更新 (差分)
- 期日 を削除 (
2011-09-30) - 担当者 を削除 (
Fumie Toyooka) - 360対象 を削除 (
3.6.0)
この問題の OpenPNE-3.6.x での扱い¶
このチケットが作られた時点では OpenPNE-3.6.0 にこの修正を取り込む予定でしたが、この問題について検討した結果、この問題は修正しないこととしました。
- 2系では誕生日に制約が付いていた
- 3系の 3.1 時点(初期の時点)では、誕生日はプリセット項目ではなかった(そのため、通常のプロフィールにおける制約を付けることができた)
- 3系のプリセット項目が実装された後は本問題が生じていた
- 2系からのアップグレードでも、3系からのバージョンアップでも、新規インストールでも、プリセット項目の誕生日には制約が付かないようになっていた
この状況について、 現時点で(OpenPNE-3.6.0 までに) プリセット項目である誕生日に対して、制約(誕生日の下限・上限)を付ける必要性が強くないと判断しました。
また、制約を付ける修正を行っても note-7 で言及されているように、すでにSNSを運営していてプリセット項目の誕生日を使っている場合、そこには制約を付けることができません。そこにまで制約を付けるにはマイグレーションファイルを作成したりタスクを作成して、運用中のSNSで使っているDBレコードの値を変更する必要が生じますが、 OpenPNE-3.6RC1 がリリースされてから OpenPNE-3.6.0 がリリースされる間にこの対応を行うことは現実的ではありません(この問題のために十分な動作テストが必要になります)。
代わりにこの制約を付けたいSNS管理者のためにタスクを用意することは可能ですが、その必要性があるのかという点が疑問であり、OpenPNE-3.6.0 でその機能が提供されている必要はないと考えました。
この問題への対応¶
現状の最新版の OpenPNE に於いて誕生日に制約がないことは想定した結果ではなく、もともと制約をつけていたように本来は制約が付いているべきです。
しかし前述の対応は中途半端であり好ましくないため、note-1, note-2, note-3 で言及されている「管理画面でプリセットプロフィールに対して制約などを編集できるようにする」という修正を行おうと考えています。
このチケットでは master ブランチを対象に、op_preset_birthday に日付範囲の制約を付けると共に、誕生日管理画面でプリセットプロフィール項目の編集項目を増やすことを扱います。