LAMP環境で動くオープンソース(LGPL)のGoogleカレンダーもどき「wdCalendar」を試してみました。
ついでに日本語化とか、バグ対応とか。
ソース
http://www.webappers.com/2010/06/08/wdcalendar-jquery-based-google-calendar-clone/ からダウンロードして解凍。データベース対応
MySQLにデータベースを作成。解凍してできたsetup.sqlを修正。
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE `jqcalendar` (
`Id` int(11) NOT NULL auto_increment,
`Subject` varchar(1000) character set utf8 default NULL,
`Location` varchar(200) character set utf8 default NULL,
`Description` varchar(255) character set utf8 default NULL,
`StartTime` datetime default NULL,
`EndTime` datetime default NULL,
`IsAllDayEvent` smallint(6) NOT NULL,
`Color` varchar(200) character set utf8 default NULL,
`RecurringRule` varchar(500) character set utf8 default NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=4 ;
文字コードをutf8にしています。phpMyAdminなどで実行します。
php/dbconfig.phpを修正。
<?php class DBConnection{ function getConnection(){ //change to your database server/user name/password mysql_connect("servername","username","password") or die("Could not connect: " . mysql_error()); //change to your database name mysql_select_db("databasename") or die("Could not select database: " . mysql_error()); } } ?>
日本語化
src/plugins/datepicker_US.js, src/plugins/wdCalendar_lang_US.jsをコピーして、JP.jsを作成。sample.phpとedit.phpに「US.js」と書かれている個所が数行あるのでJPに書き換え。
(書き換えた内容は省略します)
不具合修正
日本語の日付形式(yyyy/M/d)に変更した場合、日付の扱いがおかしくなります。さきほどのJP.jsのseparator / year_index / month_index / day_indexを書き換えればいい作りになっていますが・・・
面倒なので、php/functions.phpにハードコーディングしました。
function js2PhpTime($jsdate){ if(preg_match('@(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)@', $jsdate, $matches)==1){ // $ret = mktime($matches[4], $matches[5], 0, $matches[1], $matches[2], $matches[3]); //echo $matches[4] ."-". $matches[5] ."-". 0 ."-". $matches[1] ."-". $matches[2] ."-". $matches[3]; $ret = mktime($matches[4], $matches[5], 0, $matches[2], $matches[3], $matches[1]); }else if(preg_match('@(\d+)/(\d+)/(\d+)@', $jsdate, $matches)==1){ // $ret = mktime(0, 0, 0, $matches[1], $matches[2], $matches[3]); //echo 0 ."-". 0 ."-". 0 ."-". $matches[1] ."-". $matches[2] ."-". $matches[3]; $ret = mktime(0, 0, 0, $matches[2], $matches[3], $matches[1]); } return $ret; } function php2JsTime($phpDate){ //echo $phpDate; //return "/Date(" . $phpDate*1000 . ")/"; // return date("m/d/Y H:i", $phpDate); return date("Y/m/d H:i", $phpDate); }
日本語も通りますし、よくできていると思います。