プロジェクト

全般

プロフィール

Bug(バグ) #1937

完了

日付のプロフィール項目で、管理画面で指定した上限の日が弾かれてしまう

Masato Nagasawa さんがほぼ14年前に追加. 約7年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
期日:
進捗率:

100%

予定工数:
(合計: 0:00時間)
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

Overview (現象)

日付のプロフィール項目があり、管理画面で下限上限を指定しているとき、下限の日はメンバーが設定できるのに対し、上限の日はメンバーが設定できない。

例えば、管理画面で日付型のプロフィール項目を作り、下限上限を (2011/01/10, 2011/01/20) と設定しているとき、メンバーは 2011/01/10 を入力して設定することができるが、 2011/01/20 を入力すると「2011-01-20以前にしてください。」と弾かれてしまう。

Causes (原因)

  • 注意:プロフィール項目周りやそのバリデータは修正が幾度か行われており、いつの実装が本来の仕様なのかについて曖昧になっている可能性がある。

#1595 修正後の master ブランチのソースで手元で確認した限り、プロフィール項目は以下のような動作になっている。

  • 管理画面の日付の下限上限の値:
    • sfValidatorDate で受け付けられる値がそのままDBに保存される
    • "2011/01/20" という値であれば、 DateTime では "2011/01/20 00:00:00" として扱われる
  • メンバーが入力した日付の値:
    • プロフィールの日付型は、現状の lib/util/opFormItemGenerator.class.php の実装を見る限り、扱う情報は「年月日」のみであり、「時分秒」は入力として受け付けないような仕様となっている
    • opValidatorDate で受け付けられる値となるが、その値は「現在日時に、入力された年月日をセットしたもの」となっている
    • lib/validator/opValidatorDate.class.php
          else
          {
            $clean = new DateTime();
            $clean->setDate(intval($value['year']), intval($value['month']), intval($value['day']));
          }
      

メンバーが "2011/01/20" を入力しても、メンバーが操作した時点の日時が Y年m月d日 18:10:50 であれば "2011/01/20 18:10:50" という値で扱われてしまい、管理画面の下限上限と比較する際に適切でない比較が行われてしまう。

結果として、管理画面から設定された上限が "2011/01/20" であれば通るはずのメンバー入力値 "2011/01/20" が、 "2011/01/20 18:10:50" として扱われるため、上限を超える日付だと判断されて弾かれている。

Way to fix (修正内容)

  • lib/validator/opValidatorDate.class.php
         else
         {
           $clean = new DateTime();
           $clean->setDate(intval($value['year']), intval($value['month']), intval($value['day']));
    +      $clean->setTime(0, 0, 0);
         }
    

のようにメンバー入力値を扱う場合に時分秒を 0 にセットするか、それに相当する記述に書き換える。


子チケット 1 (1件未完了0件完了)

Backport(バックポート) #4231: 日付のプロフィール項目で、管理画面で指定した上限の日が弾かれてしまうNew(新規)

操作

関連するチケット 3 (1件未完了2件完了)

関連している OpenPNE 3 - Bug(バグ) #940: プロフィール項目の日付やテキストの最小値を最大値より大きくして設定できてしまうPending Fixing(修正待ち)2010-04-05

操作
関連している OpenPNE 3 - Bug(バグ) #1595: ProfileForm で日付型のプロフィール項目の最大値・最小値の入力欄に now などの strtotime() が解釈できる文字列を入力すると、そのプロフィール項目を保存した時点の日付が DB に保存されてしまうFixed(完了)Minoru Takai2010-09-17

操作
関連している OpenPNE 3 - Bug(バグ) #633: opValidatorDate with date_time option don't return time correctly. (opValidatorDateをwith_timeオプション付きで使用したとき時刻が違う値になる)Fixed(完了)Shogo Kawahara2010-02-132010-03-04

操作

他の形式にエクスポート: Atom PDF