日付指定関連の不具合のご報告

質問全般・改善要望
noka
メンバー
メンバー
記事: 83
登録日時: 2013年6月19日(水) 10:02

日付指定関連の不具合のご報告

投稿記事by noka » 2014年7月23日(水) 20:03

yamaさま

謹んでご報告させていただきます。明確なバグ報告ついでに従前から感じていた改善希望もまとめさせていただいてます。ご検討のほどよろしくお願いします。

■$modx->parseText由来と思われる不具合(1.0.14J-r1より発現)
◎日付入力欄(例えば公開日指定)のソースをみると、プレースホルダ[+disabled+]が表に出ています。

コード: 全て選択

<input type="text" id="pub_date" [+disabled+] name="pub_date" class="DatePicker imeoff" value="" />

# 権限がない or HOME の場合は、きちんとdisabled="disabled"となります。

これは、割と最近ブラッシュアップされたparseText関数が直接の原因となってるみたいです。
/manager/include/document.parser.class.inc.php 2503行目

コード: 全て選択

         else $replace[$i]= "{$left}{$key}{$right}";

#プレースホルダの置き換える値がない場合はそのまま文字列を返すロジックになっているからなのですが、parseText関数としては正しい姿のような気もします。一瞬空白を代入するようPRしようかとおもいましたが。disabled関数(mutate_content.functions.inc.php)がfalseの場合に空白を返すようにする感じの方が良いような気もします。


■datepicker.js等JS周りと思われる不具合(主にFireFox、1.0.14J,14J-r1で確認してます)
========================================

明らかな不具合
------------------------------
◎公開日付を指定しているリーソースのテンプレートを変更すると、日付が1970/01/01(時刻は-10時間くらい)になります。


改善を希望したい挙動
------------------------------
(その1)
日付入力欄(例えば公開日指定や公開終了日指定)で、カレンダーを表示させ日付をクリックすることで「指定日付+現在の時刻」が挿入されますが、
続けて時間を調整しようとして、再び、日時欄をクリックして、カレンダーの時刻欄に時間を入力、確定(Enter)すると、
(カレンダー上の日付は先に指定した本日以外の日付になっているにもかかわらず)
◎「本日の日付+入力した時刻」と時刻のみではなく、日付も変わってしまいます。

また、時刻欄に入力後、Tabキーでフィールド遷移した場合には変更が反映されないようです。


(その2)
日付の変更があり、再度調整するケースでは、さらにまた日付だけ変更しようと、日時欄をクリックすると思いますが、
クリックするとカレンダー下部の時刻欄には、先ほど入力した時刻ではなく「現在の時刻」が表示されており、新しい日付をクリックすると、
◎「修正した日付+現在の時刻」が挿入されます。
これも割と意図しない挙動だと思います。


(その3)
◎テキスト欄に手入力した日付が、一度保存して再編集しないとポップアップカレンダーに反映されない
のも、何かと誤指定の元になりそうな気がします。


(私的に)期待する挙動としては、
・(dateOnly以外の)日時指定の場合、日付クリック後は時刻入力欄に強制移動した方が良い。もしくは、そもそも日付欄と時刻欄を分ける感じ。
・既に入力値が存在する場合はその日時の両方を取得して反映するようにしてほしい。

感じでしょうか。

※ワークアラウンド: 現状では「最初に時刻欄を入力した後にカレンダー日付をクリック」するのが確実な感じです。


#js周り、全体像が把握できてないこともあって原因追求できず報告のみで申しわけありません。


以上になります。よろしくお願い致します。
アバター
yama
管理人
記事: 2908
登録日時: 2009年7月29日(水) 02:50

Re: 日付指定関連の不具合のご報告

投稿記事by yama » 2014年7月24日(木) 07:28

調査ありがとうございます。parseText関数で処理対象とならずに残ったプレースホルダ文字列は、基本的には全削除することにしたいと思います。cleanupなどの名前で引数を追加して、この引数の値としてfalseをセットするなどすれば、削除せずに結果を返して他のスニペットなどに処理を引き継げるようにできると思います。
日付の値が変わってしまう件は、pub_date・unpub_dateに関しては、データベースにストアする際にunixtime形式に変換する処理になっているので、そのへんに由来する問題が発生していると思います。
上記の2点はすぐ修正できると思います。

DatePickerのUIに関しては、そもそもこのJavaScriptウィジェット自体が相当古いものなので、最近主流のjQueryプラグイン型のウィジェットに置き換えることを考えています。日付と時刻は分離できれば使い勝手がいいでしょうね。まずハードコーディング実装を改善してから、ウィジェットを変更します。
noka
メンバー
メンバー
記事: 83
登録日時: 2013年6月19日(水) 10:02

Re: 日付指定関連の不具合のご報告

投稿記事by noka » 2014年7月24日(木) 09:40

yama様

いつも素早いご対応ありがとうございます。
承知いたしました。 $modx->parseText()の件も了解です。
#ちなみに、日付が変わってしまう件は、1.0.10Jあたりだと発現しなかったです。

DatePicker周り、
日付+時刻でフィールドを分けた方がベターだろうなと思いましたが、地味に大変そうだなあという印象です。
が、ウィジェットの置き換えと合わせてしちゃうよ、ということでしたら微力ながら、テストでご協力させていただきます。
アバター
yama
管理人
記事: 2908
登録日時: 2009年7月29日(水) 02:50

Re: 日付指定関連の不具合のご報告

投稿記事by yama » 2014年7月24日(木) 17:38

evo.zip
(1.64 MiB) ダウンロード数: 100 回
修正しました。もしよければ確認をお願いします。managerフォルダのみ上書きすれば適用完了と思います。
DatePickerは後日改めて対応方法を検討します。
noka
メンバー
メンバー
記事: 83
登録日時: 2013年6月19日(水) 10:02

Re: 日付指定関連の不具合のご報告

投稿記事by noka » 2014年7月30日(水) 15:24

yama さま

確認が遅れているうちに、14J-r2がリリースされてました。助かります。ありがとうございました。
一応、DatePicker周りがあるので、解決済マークは付けずにおきたいと思います。