d8bfcfae65957cfd3015494bd5c3a3ca22219f6a
3 * EasyPeasyICS Simple ICS/vCal data generator.
4 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
5 * @author Manuel Reinhard <manu@sprain.ch>
7 * Built with inspiration from
8 * http://stackoverflow.com/questions/1463480/how-can-i-use-php-to-dynamically-publish-an-ical-file-to-be-read-by-google-calend/1464355#1464355
10 * 2010/12/17 - Manuel Reinhard - when it all started
11 * 2014 PHPMailer project becomes maintainer
16 * Simple ICS data generator
18 * @subpackage easypeasyics
23 * The name of the calendar
26 protected $calendarName;
28 * The array of events to add to this calendar
31 protected $events = array();
35 * @param string $calendarName
37 public function __construct($calendarName = "")
39 $this->calendarName
= $calendarName;
43 * Add an event to this calendar.
44 * @param string $start The start date and time as a unix timestamp
45 * @param string $end The end date and time as a unix timestamp
46 * @param string $summary A summary or title for the event
47 * @param string $description A description of the event
48 * @param string $url A URL for the event
49 * @param string $uid A unique identifier for the event - generated automatically if not provided
50 * @return array An array of event details, including any generated UID
52 public function addEvent($start, $end, $summary = '', $description = '', $url = '', $uid = '')
55 $uid = md5(uniqid(mt_rand(), true)) . '@EasyPeasyICS';
58 'start' => gmdate('Ymd', $start) . 'T' . gmdate('His', $start) . 'Z',
59 'end' => gmdate('Ymd', $end) . 'T' . gmdate('His', $end) . 'Z',
60 'summary' => $summary,
61 'description' => $description,
65 $this->events
[] = $event;
70 * @return array Get the array of events.
72 public function getEvents()
80 public function clearEvents()
82 $this->events
= array();
86 * Get the name of the calendar.
89 public function getName()
91 return $this->calendarName
;
95 * Set the name of the calendar.
98 public function setName($name)
100 $this->calendarName
= $name;
104 * Render and optionally output a vcal string.
105 * @param bool $output Whether to output the calendar data directly (the default).
106 * @return string The complete rendered vlal
108 public function render($output = true)
111 $ics = 'BEGIN:VCALENDAR
114 X-WR-CALNAME:' . $this->calendarName
. '
115 PRODID:-//hacksw/handcal//NONSGML v1.0//EN';
118 foreach ($this->events
as $event) {
121 UID:' . $event['uid'] . '
122 DTSTAMP:' . gmdate('Ymd') . 'T' . gmdate('His') . 'Z
123 DTSTART:' . $event['start'] . '
124 DTEND:' . $event['end'] . '
125 SUMMARY:' . str_replace("\n", "\\n", $event['summary']) . '
126 DESCRIPTION:' . str_replace("\n", "\\n", $event['description']) . '
127 URL;VALUE=URI:' . $event['url'] . '
137 $filename = $this->calendarName
;
138 //Filename needs quoting if it contains spaces
139 if (strpos($filename, ' ') !== false) {
140 $filename = '"'.$filename.'"';
142 header('Content-type: text/calendar; charset=utf-8');
143 header('Content-Disposition: inline; filename=' . $filename . '.ics');