aboutsummaryrefslogtreecommitdiff
path: root/src/bdrem/Renderer/Ical.php
blob: 7383accc67e756a408bed10ff31f1cda9e6d6ed6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
/**
 * Part of bdrem
 *
 * PHP version 5
 *
 * @category  Tools
 * @package   Bdrem
 * @author    Christian Weiske <cweiske@cweiske.de>
 * @copyright 2014 Christian Weiske
 * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
 * @link      http://cweiske.de/bdrem.htm
 */
namespace bdrem;

/**
 * Renders events in an iCalendar file
 *
 * @category  Tools
 * @package   Bdrem
 * @author    Christian Weiske <cweiske@cweiske.de>
 * @copyright 2014 Christian Weiske
 * @license   http://www.gnu.org/licenses/agpl.html GNU AGPL v3
 * @version   Release: @package_version@
 * @link      http://cweiske.de/bdrem.htm
 * @link      http://severinghaus.org/projects/icv/ iCal validator
 */
class Renderer_Ical extends Renderer
{
    /**
     * HTTP content type
     * @var string
     */
    protected $httpContentType = 'text/calendar; charset=utf-8';

    /**
     * Render the events in an iCalendar file
     *
     * X-WR-CALNAME is supported by claws mail's vcalendar plugin; it
     * uses it as title.
     *
     * @param array $arEvents Event objects to render
     *
     * @return string iCal file
     */
    public function render($arEvents)
    {
        $s = "BEGIN:VCALENDAR\n"
            . "VERSION:2.0\n"
            . "PRODID:-//bdrem\n"
            . "X-WR-CALNAME:birthdays\n";
        foreach ($arEvents as $event) {
            $props = array('BEGIN' => 'VEVENT');
            
            $props['UID'] = str_replace(
                array('-', '????'), array('', '0000'), $event->localDate
            )
                . '.' . $event->age
                . '.' . md5($event->title . '/' . $event->type)
                . '@bdrem';
            $props['DTSTART;VALUE=DATE']  = str_replace('-', '', $event->localDate);
            $props['DURATION'] = 'P1D';
            $props['SUMMARY']  = sprintf(
                '%s - %s. %s', $event->title, $event->age, $event->type
            );
            $props['END'] = 'VEVENT';

            foreach ($props as $key => $value) {
                $s .= $key . ':' . $value . "\n";
            }
        }
        $s .= "END:VCALENDAR\n";
        return $s;
    }
}
?>