プロジェクト

全般

プロフィール

Bug(バグ) #3584

フォームタイプが日付のプロフィール項目の最小値に now を設定し、プロフィールに当日日付を設定するとエラーになる

Hisahsi Ishihara約10年前に追加. 約1年前に更新.

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

100%

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

説明

初めてです
3.8.10を使用。プロフィールに項目追加し、フォームタイプを日付にした時、最小値、最大値のいづれかまたは両方をnowにすると、SNS会員が当日の日付を入れて、送信ボタンを押すとエラーになって、プロフィールを更新できない。3.8.9の時は、エラーにならなかった。


子チケット

Backport(バックポート) #4580: フォームタイプが日付のプロフィール項目の最小値に now を設定し、プロフィールに当日日付を設定するとエラーになるFixed(完了)kaoru n

Backport(バックポート) #4581: フォームタイプが日付のプロフィール項目の最小値に now を設定し、プロフィールに当日日付を設定するとエラーになるFixed(完了)kaoru n

関係しているリビジョン

リビジョン c1ea13c1 (差分)
kaoru n約1年前に追加

(fixed #3584) プロフィール項目の日付タイプの比較時に時刻の比較でエラーになってしまう問題を修正

リビジョン 9b185152 (差分)
kaoru n約1年前に追加

(fixed #3584) プロフィール項目の日付タイプの比較時に with_time オプションが true ではない場合のみ、時刻を 00:00 とするよう修正

リビジョン c5bd0891 (差分)
kaoru n約1年前に追加

(fixed #3584) $min であるべきところを $max としていたのを修正

リビジョン 0f461014
kaoru n約1年前に追加

Merge pull request #685 from nishizoe/t-3584

(fixed #3584) プロフィール項目の日付タイプの比較時に時刻の比較でエラーになってしまう問題を修正

履歴

#1 kaoru n約4年前に更新

  • 対象バージョンOpenPNE 3.10.x にセット

#2 kaoru n約1年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者kaoru n にセット
  • 対象バージョンOpenPNE 3.10.x から OpenPNE 3.11.x に変更

#3 kaoru n約1年前に更新

最大値に now を設定し、プロフィール編集で当日日付を入力してもエラーにならない。

#4 kaoru n約1年前に更新

https://github.com/openpne/OpenPNE3/blob/master/lib/validator/opValidatorDate.class.php#L54-L70

    if ($this->hasOption('max'))
    {
      $max = new DateTime($this->getOption('max'));
      if ($max && $clean->format('U') > $max->format('U'))
      {
        throw new sfValidatorError($this, 'max', array('max' => $max->format($this->getOption('date_format_range_error'))));
      }
    }

    if ($this->hasOption('min'))
    {
      $min = new DateTime($this->getOption('min'));
      if ($min && $clean->format('U') < $min->format('U'))
      {
        throw new sfValidatorError($this, 'min', array('min' => $min->format($this->getOption('date_format_range_error'))));
      }
    }

$min, $max ともに now を設定した場合、new DateTime() の引数にそのまま now が設定されるため、時刻も比較対象とされる。

例えば now = '2023-02-07 18:18:18' だった場合、プロフィール編集で '2023/02/07' を入力すると入力値は '2023-02-07 00:00:00' として扱われるため、最小値との比較でエラーになる。

#5 kaoru n約1年前に更新

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

https://github.com/openpne/OpenPNE3/pull/685
にてプルリクエストしました

#6 kaoru n約1年前に更新

  • 題名プロフィール項目を追加し、フォームタイプを日付の時 から フォームタイプが日付のプロフィール項目no に変更

#7 kaoru n約1年前に更新

  • 題名フォームタイプが日付のプロフィール項目no から フォームタイプが日付のプロフィール項目の最小値に now を設定し、プロフィールに当日日付を設定するとエラーになる に変更

#8 Rimpei Ogawa約1年前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更

with_time オプションを設定している際は日付だけでなく時刻の情報も扱う想定になっていて、
max/min オプションについてもこれに沿うのが自然な挙動だと思います。

参考:ユニットテストの with_time オプションの箇所
https://github.com/openpne/OpenPNE3/blob/master/test/unit/validator/opValidatorDateTest.php#L132

OpenPNE本体には with_time オプションを使っている箇所はなかったのですが、
時刻の情報を消して比較するのは with_time がないときだけにする方がよいかなと思いました。

#9 kaoru n約1年前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

#3584-8 について修正し、
https://github.com/openpne/OpenPNE3/pull/685
を更新しました

#10 Rimpei Ogawa約1年前に更新

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

#11 isao sano約1年前に更新

  • ステータスPending Testing(テスト待ち) から Pending Merge(マージ待ち) に変更
  • 進捗率70 から 80 に変更

試験完了しました。問題ありません。

#12 kaoru n約1年前に更新

  • ステータスPending Merge(マージ待ち) から Fixed(完了) に変更
  • 進捗率80 から 100 に変更

マージしました

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