ical renderer
[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      * @param array $arEvents Event objects to render
39      *
40      * @return string iCal file
41      */
42     public function render($arEvents)
43     {
44         $s = "BEGIN:VCALENDAR\n"
45             . "VERSION:2.0\n"
46             . "PRODID:-//bdrem\n";
47         foreach ($arEvents as $event) {
48             $props = array('BEGIN' => 'VEVENT');
49             
50             $props['UID'] = str_replace(
51                 array('-', '????'), array('', '0000'), $event->date
52             )
53                 . '.' . $event->age
54                 . '.' . md5($event->title . '/' . $event->type)
55                 . '@bdrem';
56             $props['DTSTART']  = str_replace('-', '', $event->date);
57             $props['DURATION'] = 'P1D';
58             $props['SUMMARY']  = sprintf(
59                 '%s - %s. %s', $event->title, $event->age, $event->type
60             );
61             $props['END'] = 'VEVENT';
62
63             foreach ($props as $key => $value) {
64                 $s .= $key . ':' . $value . "\n";
65             }
66         }
67         $s .= "END:VCALENDAR\n";
68         return $s;
69     }
70 }
71 ?>