release 0.6.1
[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  * @link      http://severinghaus.org/projects/icv/ iCal validator
27  */
28 class Renderer_Ical extends Renderer
29 {
30     /**
31      * HTTP content type
32      * @var string
33      */
34     protected $httpContentType = 'text/calendar; charset=utf-8';
35
36     /**
37      * Render the events in an iCalendar file
38      *
39      * X-WR-CALNAME is supported by claws mail's vcalendar plugin; it
40      * uses it as title.
41      *
42      * @param array $arEvents Event objects to render
43      *
44      * @return string iCal file
45      */
46     public function render($arEvents)
47     {
48         $s = "BEGIN:VCALENDAR\n"
49             . "VERSION:2.0\n"
50             . "PRODID:-//bdrem\n"
51             . "X-WR-CALNAME:birthdays\n";
52         foreach ($arEvents as $event) {
53             $props = array('BEGIN' => 'VEVENT');
54             
55             $props['UID'] = str_replace(
56                 array('-', '????'), array('', '0000'), $event->localDate
57             )
58                 . '.' . $event->age
59                 . '.' . md5($event->title . '/' . $event->type)
60                 . '@bdrem';
61             $props['DTSTART;VALUE=DATE']  = str_replace('-', '', $event->localDate);
62             $props['DURATION'] = 'P1D';
63             $props['SUMMARY']  = sprintf(
64                 '%s - %s. %s', $event->title, $event->age, $event->type
65             );
66             $props['END'] = 'VEVENT';
67
68             foreach ($props as $key => $value) {
69                 $s .= $key . ':' . $value . "\n";
70             }
71         }
72         $s .= "END:VCALENDAR\n";
73         return $s;
74     }
75 }
76 ?>