9 * @author Christian Weiske <cweiske@cweiske.de>
10 * @copyright 2014 Christian Weiske
11 * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3
12 * @link http://cweiske.de/bdrem.htm
17 * Renders events in an iCalendar file
21 * @author Christian Weiske <cweiske@cweiske.de>
22 * @copyright 2014 Christian Weiske
23 * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3
24 * @version Release: @package_version@
25 * @link http://cweiske.de/bdrem.htm
27 class Renderer_Ical extends Renderer
33 protected $httpContentType = 'text/calendar; charset=utf-8';
36 * Render the events in an iCalendar file
38 * X-WR-CALNAME is supported by claws mail's vcalendar plugin; it
41 * @param array $arEvents Event objects to render
43 * @return string iCal file
45 public function render($arEvents)
47 $s = "BEGIN:VCALENDAR\n"
50 . "X-WR-CALNAME:birthdays\n";
51 foreach ($arEvents as $event) {
52 $props = array('BEGIN' => 'VEVENT');
54 $props['UID'] = str_replace(
55 array('-', '????'), array('', '0000'), $event->localDate
58 . '.' . md5($event->title . '/' . $event->type)
60 // we want the zero time because it expresses midnight in every
62 $props['DTSTART'] = str_replace('-', '', $event->localDate) . 'T000000';
63 $props['DURATION'] = 'P1D';
64 $props['SUMMARY'] = sprintf(
65 '%s - %s. %s', $event->title, $event->age, $event->type
67 $props['END'] = 'VEVENT';
69 foreach ($props as $key => $value) {
70 $s .= $key . ':' . $value . "\n";
73 $s .= "END:VCALENDAR\n";