EGOCMS  24.0
EGOTEC Content-Managament-System
Ego_ICS.php
gehe zur Dokumentation dieser Datei
1 <?php
2 
9 class Ego_ICS {
15  private array $event_list = [];
16 
22  private array $calendar_props = [
23  'VERSION' => '2.0',
24  'PRODID' => '-//EGOTEC//EGOCMS v22//DE',
25  'CALSCALE' => 'GREGORIAN',
26  'METHOD' => 'PUBLISH'
27  ];
28 
34  public function __construct(array $params) {
35  $this->setProperties($params);
36  }
37 
43  public function getICS(): string {
44  $ics_content = ['BEGIN:VCALENDAR'];
45 
46  foreach ($this->calendar_props as $attr => $calendar_prop) {
47  $ics_content[] = "$attr:$calendar_prop";
48  }
49 
50  foreach ($this->event_list as $event) {
51  $ics_content[] = 'BEGIN:VEVENT';
52  foreach ($event as $attr => $param) {
53  $ics_content[] = "$attr:$param";
54  }
55  $ics_content[] = 'END:VEVENT';
56  }
57 
58  $ics_content[] = 'END:VCALENDAR';
59 
60  return implode(PHP_EOL, $ics_content);
61  }
62 
69  public function setProperties(array $params) {
70  foreach ($params as $attr => $param) {
71  $this->calendar_props[strtoupper($attr)] = $this->sanitizeParam($attr, $param);
72  }
73  }
74 
81  public function addEvent(array $params) {
82  $event_props = [
83  'UID' => uniqid(),
84  'DTSTAMP' => $this->formatDate('now')
85  ];
86 
87  foreach ($params as $attr => $param) {
88  $event_props[strtoupper($attr)] = $this->sanitizeParam($attr, $param);
89  }
90 
91  $this->event_list[] = $event_props;
92  }
93 
103  private function sanitizeParam(string $attr, string $param = ''): string {
104  switch(strtoupper($attr)) {
105  case 'DTEND':
106  case 'DTSTAMP':
107  case 'DTSTART':
108  $param = $this->formatDate($param);
109  break;
110  default:
111  $param = $this->escapeParam($param);
112  }
113  return $param;
114  }
115 
123  private function formatDate(string $date): string {
124  $dt = new DateTime($date);
125  return $dt->format('Ymd\THis');
126  }
127 
134  private function escapeParam(string $param): string {
135  return preg_replace('/([\,;])/','\\\$1', $param);
136  }
137 }
addEvent(array $params)
Definition: Ego_ICS.php:81
getICS()
Definition: Ego_ICS.php:43
__construct(array $params)
Definition: Ego_ICS.php:34
setProperties(array $params)
Definition: Ego_ICS.php:69