f20e461a2f10d5b758c65f807d386f27691ed937
[bdrem.git] / src / bdrem / Renderer / Ical.php
1 <?php
2 /**
3  * Part of bdrem
4  *
5  * PHP version 5
6  *
7  * @category  Tools
8  * @package   Bdrem
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
13  */
14 namespace bdrem;
15
16 /**
17  * Renders events in an iCalendar file
18  *
19  * @category  Tools
20  * @package   Bdrem
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
26  */
27 class Renderer_Ical extends Renderer
28 {
29     /**
30      * HTTP content type
31      * @var string
32      */
33     protected $httpContentType = 'text/calendar; charset=utf-8';
34
35     /**
36      * Render the events in an iCalendar file
37      *
38      * X-WR-CALNAME is supported by claws mail's vcalendar plugin; it
39      * uses it as title.
40      *
41      * @param array $arEvents Event objects to render
42      *
43      * @return string iCal file
44      */
45     public function render($arEvents)
46     {
47         $s = "BEGIN:VCALENDAR\n"
48             . "VERSION:2.0\n"
49             . "PRODID:-//bdrem\n"
50             . "X-WR-CALNAME:birthdays\n";
51         foreach ($arEvents as $event) {
52             $props = array('BEGIN' => 'VEVENT');
53             
54             $props['UID'] = str_replace(
55                 array('-', '????'), array('', '0000'), $event->localDate
56             )
57                 . '.' . $event->age
58                 . '.' . md5($event->title . '/' . $event->type)
59                 . '@bdrem';
60             // we want the zero time because it expresses midnight in every
61             // time zone
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
66             );
67             $props['END'] = 'VEVENT';
68
69             foreach ($props as $key => $value) {
70                 $s .= $key . ':' . $value . "\n";
71             }
72         }
73         $s .= "END:VCALENDAR\n";
74         return $s;
75     }
76 }
77 ?>