うぃーん。

OpenPNE3は国際化に対応できる事を売りにしているわけですが、
まだまだです。
その中の取り組みとして、Timezoneに対応させる必要があるわけですが、
設定項目があるものの機能していないことに気づいた人は多いかもしれません。

今回、海外に行く機会もあるので折角なので対応させたよ。

データのTimezone対応としては、以下の手法を使いたいと思います。
http://kriswallsmith.net/post/136226720/doctrine-timestamps-and-user-timezones

独自に、Doctrine_Recordを継承したクラスを作成し、 _set() および _get() の挙動を変えたものを利用するようにする手法です。

OpenPNE3.6beta4-dev 時点では、 opDoctrineRecord を利用しているのでこれをいじればよさそうです。

ユーザ側の設定変更→言語とタイムゾーンの設定から変更することのできるタイムゾーン情報は
Member::getConfig(“time_zone”); により取得ができます。
この画面で保存される値は、PHPでサポートされているタイムゾーンによるものなので、date_default_timezone_set() に渡してしまっても問題なさそうです。

あとは、利用時にタイムゾーンを適切に管理したいところですが、これは symfony の sfUser の言語周りの挙動と同じように
してみようと思います。これを opSecurityUser で行ないます。

そんな感じで出来上がったのが、僕が本線にはまだいれていないものの、アグレッシブな改善を行なっている
「iroiro-kaizen」ブランチに行った以下の2つの変更です。
http://github.com/kawahara/OpenPNE3/commit/cbf84f27036c7f40dccd97ccb4efb69da96dbf1c

http://github.com/kawahara/OpenPNE3/commit/486e5bded4501e7f3a056902e3d44de6cc64d267

*ためしに、運営しているSNSで導入してなんとか動作していますが、無保証・無テスト品です。
*2つのコミットには順序がありますので、ご注意下さい。

サマータイムとかも自動的になんとかしてくれるっぽいのか。こりゃ面白い。

ちなみに、「iroiro-kaizen」ブランチでは、未完成かつ未テストなものの、
OpenPNEの為になるコミットを継続的に行なっていく予定です。
実はメール周りの国際化や、メールの設定周りなどを脳みそから漏らしていますので
本線に入るまで我慢出来ない人は、参考にしてみてもいいかもしれません。
(もちろん無保証です。)

あと、しばらく(他のことが忙しくなり)本線で戦うことができなくなりそうなので
勝手に本線にマージしてしまっても問題ないです。

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>