15 private array $event_list = [];
22 private array $calendar_props = [
24 'PRODID' =>
'-//EGOTEC//EGOCMS v22//DE',
25 'CALSCALE' =>
'GREGORIAN',
44 $ics_content = [
'BEGIN:VCALENDAR'];
46 foreach ($this->calendar_props as $attr => $calendar_prop) {
47 $ics_content[] =
"$attr:$calendar_prop";
50 foreach ($this->event_list as $event) {
51 $ics_content[] =
'BEGIN:VEVENT';
52 foreach ($event as $attr => $param) {
53 $ics_content[] =
"$attr:$param";
55 $ics_content[] =
'END:VEVENT';
58 $ics_content[] =
'END:VCALENDAR';
60 return implode(PHP_EOL, $ics_content);
70 foreach ($params as $attr => $param) {
71 $this->calendar_props[strtoupper($attr)] = $this->sanitizeParam($attr, $param);
84 'DTSTAMP' => $this->formatDate(
'now')
87 foreach ($params as $attr => $param) {
88 $event_props[strtoupper($attr)] = $this->sanitizeParam($attr, $param);
91 $this->event_list[] = $event_props;
103 private function sanitizeParam(
string $attr,
string $param =
''): string {
104 switch(strtoupper($attr)) {
108 $param = $this->formatDate($param);
111 $param = $this->escapeParam($param);
123 private function formatDate(
string $date): string {
124 $dt = new DateTime($date);
125 return $dt->format(
'Ymd\THis');
134 private function escapeParam(
string $param): string {
135 return preg_replace(
'/([\,;])/',
'\\\$1', $param);
__construct(array $params)
setProperties(array $params)