Project

General

Profile

Backport(バックポート) #2683

op_preset_birthdayについて、member_profileのvalue_datetimeがゼロ値もしくはnullの場合、プロフィール閲覧時に例外が発生し閲覧できない場合がある

Added by Kousuke Ebihara almost 8 years ago. Updated almost 8 years ago.

Status:
Fixed(完了)
Priority:
High(高め)
Assignee:
Target version:
Start date:
2011-01-12
Due date:
2012-01-12
% Done:

100%


Description

Overview (現象)

http://sns.openpne.jp/diary/25790 より転記

お世話様です。
既出や3.6βで解決してたらごめんなさい。

OpenPNE3.52を使ってます。
プロフィールを閲覧不能のメンバーがたまに出てきてphpMyAdminで直して気付いたんですが、生年月日の生まれ年を適当に入れたり全角で入れたりするとこの症状が出ます

リストボックスのように選べるのを限定(沢山有ってダメっすかね?)かチェックをかける事はできますか?

現在サポート中の各バージョンおよびMasterにおいて、チェック(バリデーション)がかかっています。

ただし、旧バージョンからのアップグレード等で、
op_preset_birthdayのmember_profileデータが正しくない場合
(具体的にはvalue_datetimeがゼロ値もしくはvalue_datetimeがnullかつ、valueが日付として認識できない場合)
プロフィール閲覧(member/profile)で「Impossible to parse date "xxxxxxxx" with format "yyyy-MM-dd HH:mm:ss".」という例外が発生します

(3.0系ではデータ構造が異なるため上記の現象は発生しません)

Causes (原因)

本来、member_profileのvalue_datetimeには日付が正しく入っているはずで、
その値をもとにプロフィール閲覧の表示を行っているが
上記のように、ゼロ値もしくはnullかつvalueがでたらめの場合は
プロフィール閲覧で利用しているop_format_date()で例外が発生してしまう。

Way to fix (修正内容)

member_profileの値が以下の場合は値を返さず、nullを返すようにする
  • value_datetimeがnullではなく、ゼロ値の場合
  • op_preset_birthdayに対応するデータなのに、value_datetimeがnullの場合

Related issues

Related to OpenPNE 3 - Bug(バグ) #1863: op_preset_birthdayについて、member_profileのvalue_datetimeがゼロ値もしくはnullの場合、プロフィール閲覧時に例外が発生し閲覧できない場合がある Fixed(完了) 2011-01-12

Associated revisions

Revision fbb3bdb6 (diff)
Added by Maki Takahashi almost 8 years ago

(fixes #2683, BP from #1863) changed MemberProfile::getValue() to return null if op_preset_birthday's data is Invalid (value_datetime is zero or null)

BP from #1863
692335657d0685572a43e6c756a8718c3f7c19b3

History

#1 Updated by Kousuke Ebihara almost 8 years ago

  • Due date set to 2012-01-12

#2 Updated by Yuya Watanabe almost 8 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Yuya Watanabe

#3 Updated by Maki Takahashi almost 8 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

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

#4 Updated by Kousuke Ebihara almost 8 years ago

  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

OK とします。

ただ、バックポート元のコードで 0000-00-00 00:00:00 というマジックナンバーが使われているのは好ましくありません。しかもこの値は MySQL 独自の未定義値であり、 OpenPNE のこのレイヤーでは前提とするべき値ではありません。ただ、既に他のバージョンで取り込まれていることや、チケットで示されているような状況は OpenPNE 2 からのアップグレードを経由した場合ぐらいしか発生し得ないと考えられるため、ここでは実際的な問題はないものとします。

0000-00-00 00:00:00 を決めうちで使いたいなら、 opDoctrineRecord.class::UNDEFINED_DATETIME_BC を用いるべきです。また、日付型に特化した処理をおこなわせたいなら opDoctrineRecord::_get() 内で checkIsDatetimeField() が true を返す場合の配慮が特定のプロフィール項目の場合にも機能するように、 checkIsDatetimeField() をオーバーライドする方法も採用しうるのではないかと思います。

先述の通り、このチケットで対応するべき内容とは言えないのでステータスは「テスト待ち」にします。別チケット対応とするべきかどうかについてはまだ考えがありません。

#5 Updated by Yuma Sakata almost 8 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

テストOKです。

Also available in: Atom PDF