Project

General

Profile

Bug(バグ) #2431

op_preset_birthday の日付範囲が制限されていない

Added by Shingo Yamada about 8 years ago. Updated over 7 years ago.

Status:
New(新規)
Priority:
Normal(通常)
Assignee:
-
Target version:
Start date:
2011-09-26
Due date:
% Done:

0%

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

Description

Overview (現象)

  • デフォルトプロフィール項目の「誕生日」(op_preset_birthday) の登録時に、日付範囲が制限されていない

Way to fix (修正内容)

op_preset_birthday の項目について、

  • 3系では範囲は「-100年 ~ 今日」が指定されているようにする
  • 2系からのバージョンアップの場合は2系の範囲を適用するようにする

これらの修正に併せて、管理画面から(全ての)プリセットプロフィールの制約などを(プリセットでないプロフィール項目と同じように)編集できるようにする機能追加を行う。


Related issues

Related to OpenPNE 3 - Bug(バグ) #2661: 年齢が0歳の場合にプロフィールに年齢が表示されない Won't fix(対応せず) 2011-12-02

History

#1 Updated by Mutsumi Imamura about 8 years ago

■修正方針の案として
日付の範囲指定ですが、「-100年 ~ 今日」といった固定の値ではなく、管理ユーザーが日付範囲指定を変更できるようにしてあげたほうが良いと思います。

理由としては↓の2点です。
  • 戦国武将SNSなど、歴史の偉人に成り切ってメンバー登録したい場合に不便になる
  • 100歳以上の人間は現に存在する

この2点の理由の回避策として、年齢のプリセットプロフィールを使わないで日付型プロフィールを追加するという方法もありますが、利用者の利便性を考えるとプリセットプロフィールで考慮してあげるのが良いと思います。

#2 Updated by Kousuke Ebihara about 8 years ago

■修正方針の案として
日付の範囲指定ですが、「-100年 ~ 今日」といった固定の値ではなく、管理ユーザーが日付範囲指定を変更できるようにしてあげたほうが良いと思います。

理由としては↓の2点です。
  • 戦国武将SNSなど、歴史の偉人に成り切ってメンバー登録したい場合に不便になる
  • 100歳以上の人間は現に存在する

この2点の理由の回避策として、年齢のプリセットプロフィールを使わないで日付型プロフィールを追加するという方法もありますが、利用者の利便性を考えるとプリセットプロフィールで考慮してあげるのが良いと思います。

この問題は誕生日に限ったものではありません。プリセットプロフィールの一部設定値がデフォルトから変更できないという現状の実装自体の問題です。

このチケットで扱っている問題は(チケットの書き方がとても悪いのですが)、 op_preset_birthday がデフォルトで許容する値として、多くの SNS で採用できるであろう「-100年から今日」という制限を指定しているにもかかわらず、それが機能していないという問題です。

  • チケット作成者はこのチケットの意図するところを明確に書くべきです
  • comment-1 の提案はオフトピックであり、このチケットで扱うべきではないと考えられます
  • comment-1 の提案に対して、誕生日に限定した対応をおこなうのは不適切です。この問題はすべてのプリセットプロフィールに共通の問題であり、対応もほとんど低コストで一般化できます
  • comment-1 の提案への対応は変更のインパクトがやや大きいため、安易に安定版に入れることはできません

#3 Updated by Mutsumi Imamura about 8 years ago

「-100年から今日」という制限を指定しているにもかかわらず、それが機能していないという問題です。

この問題ついて把握していなかったため、comment-1 の提案をしてしまいました。
制限が機能していないという問題であれば、comment-1 の提案は相応しくないと思います。
comment-1 の提案のような機能変更するのであればこのチケットではなく別のチケットにて対応するかつ、安定版では対応しないということに賛成します。

#4 Updated by Shingo Yamada about 8 years ago

  • Assignee set to Fumie Toyooka

#5 Updated by Minoru Takai about 8 years ago

この問題については既に調査が完了しており、修正パッチが存在するようです。

#6 Updated by Fumie Toyooka about 8 years ago

修正方針メモ
  • パッチを本線に適用する

#7 Updated by Shingo Yamada about 8 years ago

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" 

#8 Updated by Shingo Yamada about 8 years ago

Shingo Yamada は書きました:

【注意】
  • このパッチでは設定済みのプロフィール項目には修正が適用されません(既存SNSでは管理画面からのプロフィール項目再設定が必要となってしまう)
上記問題についての提案

上記の件について、DBの値を修正する救済タスクを作成し、対応が必要なSNSの管理者にはそのタスクを実行してもらう方針はいかがでしょうか?

#9 Updated by Minoru Takai about 8 years ago

  • Description updated (diff)
  • Due date deleted (2011-09-30)
  • Assignee deleted (Fumie Toyooka)
  • 360対象 deleted (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 に日付範囲の制約を付けると共に、誕生日管理画面でプリセットプロフィール項目の編集項目を増やすことを扱います。

#10 Updated by Shouta Kashiwagi over 7 years ago

  • Target version changed from OpenPNE 3.7.0 to 252

#11 Updated by Shouta Kashiwagi over 7 years ago

  • Target version changed from 252 to OpenPNE 3.8.x

#12 Updated by Akihiro KOBAYASHI almost 5 years ago

  • Related to Bug(バグ) #2661: 年齢が0歳の場合にプロフィールに年齢が表示されない added

Also available in: Atom PDF