プロジェクト

全般

プロフィール

Bug(バグ) #1937

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

Masato Nagasawa約13年前に追加. 6年以上前に更新.

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

100%

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 にセットするか、それに相当する記述に書き換える。


子チケット

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


関連するチケット

関連している OpenPNE 3 - Bug(バグ) #940: プロフィール項目の日付やテキストの最小値を最大値より大きくして設定できてしまう Pending Fixing(修正待ち) 2010-04-05
関連している OpenPNE 3 - Bug(バグ) #1595: ProfileForm で日付型のプロフィール項目の最大値・最小値の入力欄に now などの strtotime() が解釈できる文字列を入力すると、そのプロフィール項目を保存した時点の日付が DB に保存されてしまう Fixed(完了) 2010-09-17
関連している OpenPNE 3 - Bug(バグ) #633: opValidatorDate with date_time option don't return time correctly. (opValidatorDateをwith_timeオプション付きで使用したとき時刻が違う値になる) Fixed(完了) 2010-02-13 2010-03-04

関係しているリビジョン

リビジョン c446e5dc (差分)
Minoru Takai12年以上前に追加

(fixes #1937) fixed a bug that could not set date if the date is max-date

履歴

#1 Masato Nagasawa約13年前に更新

  • ステータスNew(新規) から Invalid(無効) に変更

#940 で時刻を設定できなくする対応を行っているため、このチケットは閉じます。

#2 Masato Nagasawa約13年前に更新

  • ステータスInvalid(無効) から New(新規) に変更

#940 のチケットが完了次第こちらのチケットを閉じる方向で。
ひとまずこのチケットを再オープンしておきます。

#3 Minoru Takaiほぼ13年前に更新

このチケットが作成された時点でのチケット内容を残しておきます。

日付のプロフィール項目で、管理画面で時刻を設定している場合に最小値、最大値で登録できてしまう

Overview (現象)

プロフィール登録の際の判定時に、どうやら現在時刻として判定しているようです。
最小値、最大値で設定した日付は設定できないのが正しい挙動です。

時刻が「2011-03-01-20:00:00」であった場合

  • 最小値「2011-01-01 00:00:00」 最大値「2011-03-01 00:00:00」→通らない(2011-03-01以前にしてください。)
  • 最小値「2011-01-01 00:00:00」 最大値「2011-03-01 21:00:00」→通る

Causes (原因)

バグが発生した原因を記入

Way to fix (修正内容)

修正内容を記入

#4 Minoru Takaiほぼ13年前に更新

  • 題名日付のプロフィール項目で、管理画面で時刻を設定している場合に最小値、最大値で登録できてしまう から 日付のプロフィール項目で、管理画面で指定した上限の日が弾かれてしまう に変更
  • 担当者Minoru Takai にセット
  • 対象バージョンOpenPNE 3.7.0 にセット
  • 3.6 で発生するかYes にセット

このチケットでは、

プロフィール登録の際の判定時に、どうやら現在時刻として判定しているようです。
最小値、最大値で設定した日付は設定できないのが正しい挙動です。

とだけ示されていますが、何が適切な仕様であり、現状の動作がどのような問題であるのかよく分かりません(下限・上限として「設定した日付は設定できないのが正しい挙動」とは一体どういうことか)。

チケットを書き換えます。

#5 Minoru Takai12年以上前に更新

  • ステータスNew(新規) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

更新履歴 c446e5dcf47544022c4ce36df22edb174912c68e で適用されました。

#6 Kousuke Ebihara12年以上前に更新

  • ステータスPending Review(レビュー待ち) から Pending Testing(テスト待ち) に変更
  • 進捗率50 から 70 に変更

#7 Shouta Kashiwagi約12年前に更新

  • 3.6 で発生するかYes から Unknown (未調査) に変更
  • 3.4 で発生するかUnknown (未調査) にセット

以下のようなエラーが発生しましたが、#2478 での変更がエラー発生の原因となっているので、#2478 が修正され次第ステータスをFixedにします。

・再現手順

1.プロフィール項目追加画面にアクセスする(/pc_backend.php/profile/edit)
2.フォームタイプで日付を選択する
3.最小値にlast Monday、最大値にnowを入れsubmit
4.frontendログイン後、プロフィール編集ページでアクセスする
5.管理画面で設定した範囲内の値(最小値)で設定する

・発生エラー

 Fatal error: Call to a member function setValue() on a non-object in /path/to/OpenPNE3/lib/form/doctrine/MemberProfileForm.class.php on line 99

#8 Shouta Kashiwagi約12年前に更新

  • 対象バージョンOpenPNE 3.7.0 から 252 に変更

#9 Yuma Sakata約12年前に更新

  • 対象バージョン252 から OpenPNE 3.8beta1 に変更

#10 Yuma Sakata約12年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テストOKです。

#11 kaoru n8年以上前に更新

  • 3.8 で発生するかUnknown (未調査) にセット

#12 Chiharu Nakajima6年以上前に更新

3.6未対応
3.8発生せず

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