プラグインEvents Manager(5.3.2)のicsファイルを改造する

CSオーガナイザーは、Events Managerというプラグインを使ってスケジュール機能を実現している。このプラグイン、GoogleカレンダーやiCal(Macのカレンダーソフト)に取り込むことができるicsファイルを公開している。ところが、デフォルトのicsには問題があって、改造の仕方を古い記事で記録してある。

ところが、Events Managerのバージョンが上がって(5.3.2)、コードの内容が変更になっている。改善された部分もあるのだが、以前日時のずれが不具合として残っているが、古い記事の改造方法だとダメな部分がでてきたので、改訂する。

===========================

CSオーガナイザーの場合、下記のURLでicsファイルを取得できる。ただし、将来の予定のみ。

  • https://www.consadeconsa.com/calendar/events.ics

Googleカレンダーで取り込む方法は下記の通り。左側のメニューの「他のカレンダー」の所の「URLで追加」に上記のURLを入力する。

ところが、デフォルトのicsには問題があって、

(1)終日イベントの日がずれてしまう。
(2)Googleカレンダーに取り込むと、CSオーガナイザーの予定のURLを取り込んでくれない。Macのカレンダーの場合は、取り込んでくれる。

(1)は大問題なので、Evenst Manager 5.3.2のソースファイルをのぞいてみる。icsを書き出しているソースは、templateのなかにあるical.phpというファイル。それを、ちょこっといじくる。

[php]
if($EM_Event->event_all_day){
$dateStart = ‘;VALUE=DATE:’.date(‘Ymd’,$EM_Event->start); //all day
$dateEnd = ‘;VALUE=DATE:’.date(‘Ymd’,$EM_Event->end + 86400); //add one day
}else{
$dateStart = ‘:’.date(‘Ymd\THis\Z’,$EM_Event->start);
$dateEnd = ‘:’.date(‘Ymd\THis\Z’,$EM_Event->end);
}
[/php]
↓(後半のコードを下記の様にして、時間を意図的にずらす)
[php]
if($EM_Event->event_all_day){
$dateStart = ‘;VALUE=DATE:’.date(‘Ymd’,$EM_Event->start); //all day
$dateEnd = ‘;VALUE=DATE:’.date(‘Ymd’,$EM_Event->end + 86400); //add one day
}else{
$dateStart = ‘:’.date(‘Ymd\THis\Z’,$EM_Event->start -32400);
$dateEnd = ‘:’.date(‘Ymd\THis\Z’,$EM_Event->end – 32400);
}
[/php]

32400は秒で、540分=9時間に該当する。
なんか、どろくさい改造だが、なんととなく、うまくいった。

(2)については、EventsMangerは、各イベントのURLを、「URL:」という項目で出力しているのだが、どうもGoogleカレンダーでは、それを読み込んでくれない。Macのカレンダーは、それを読み込んでくれるのだが。

Googleカレンダーは、ics内のイベント情報に「DESCRIPTION:」という項があると、これをメモ欄に読み込んでくれる。URLファイル形式だと、自動でリンクの様にしてくれる。
そこで、ical.phpファイルの一番下の部分に各イベントの情報出力形式を記述してあるので、そこに「DESCRIPTION:」を追加して、URLを記述させるようにした。