Bug(バグ) #2137
完了
未ログインメンバーの最終ログインが「41年以上前」などと表示されている
Kiwa Sakai さんが13年以上前に追加.
13年以上前に更新.
説明
未ログインメンバーのお気に入り追加画面 ( /favorite/add )を表示した場合、最終ログインが「41年以上前」と表示される
この問題は次の箇所で生じている。
- /favorite/add
- /favorite/list
時刻表示に op_distance_of_time_in_word() を使用していることが原因。
未ログインのメンバーの場合、値が空になっているが、この関数は汎用性のためにこれを考慮しておらず、このための関数 op_format_last_login_time() が用意されている。
詳細は note-3 に示している。
修正方法¶
op_format_last_login_time() に変更する。
apps/pc_frontend/modules/favorite/templates/addSuccess.php
<td><?php echo op_distance_of_time_in_words($member->getLastLoginTime(), time()) ?></td>
この部分を /member/search のテンプレートに合わせて
<td><?php echo op_format_last_login_time($member->getLastLoginTime()) ?></td>
と変更することで「まだログインしていません」という表示になりました
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 担当者 を Masato Nagasawa にセット
- 対象バージョン を v1.0.1 にセット
- 進捗率 を 0 から 50 に変更
41年前という値は、日時が取得できない場合に 1970/1/1 (- 09:00:00) に相当する値で計算されてしまうことにより、2011年現在ではその日時の差が 41年前 であるために表示されていると考えられます。
op_format_last_login_time() と op_distance_of_time_in_words() が作成された経緯を見ると、「最終ログイン **分前」といった表示部分には op_format_last_login_time() を使うべきだということが読み取れそうです。
41年前などとなってしまうのを防ぐのに、
- t224 では op_format_last_login_time() を作成して対応
- t230 では ( t224 で作成した) op_format_last_login_time() を op_distance_of_time_in_words() へ変更すると同時に「41年前問題」の対応を外し、 新たに別の op_format_last_login_time() を作成してここで「41年前問題」を対応
ということをしているので、つまり、41年前などとなってしまうのを防ぐには op_format_last_login_time() を使うべきというわけです。
ちなみにこの関数のシグネチャは現時点では次のようになっています:
- function op_distance_of_time_in_words($from_time, $to_time, $include_seconds = false, $format = '%s ago')
- function op_format_last_login_time($from_time, $to_time = null)
- 題名 を お気に入り追加画面で未ログインメンバーを選択すると最終ログインが「41年以上前」となる から 未ログインメンバーの最終ログインが「41年以上前」などと表示されている に変更
このコメントを書いている時点で、このチケットは『お気に入り追加画面 ( /favorite/add )を表示した場合』のみを問題としています。
このチケットでは『(2011年現在で)最終ログインが「41年以上前」のように表示されてしまっている全ての箇所』を修正するものとして扱うべきなので書き換えます。
- ステータス を Pending Review(レビュー待ち) から Fixed(完了) に変更
- 進捗率 を 50 から 100 に変更
コードチェック及び動作テストを行いました。
修正方針は note-3 で示したとおり問題なく、動作テストについても想定通りの動作となっていることが確認できています。コーディング規約等の面でも特に問題はないようですので、note-2 の修正はOKとします。
チケットを完了にします。
他の形式にエクスポート: Atom
PDF