diff --git a/site/collections/termine.php b/site/collections/termine.php new file mode 100644 index 0000000..deff9d8 --- /dev/null +++ b/site/collections/termine.php @@ -0,0 +1,66 @@ +format('d.m.Y H:i') : $date; + } else { + $dt = DateTime::createFromFormat('Ymd', $date); + + return $dt ? $dt->format('d.m.Y') : $date; + } + } + +// ICS-Datei laden + $ics = @file_get_contents(CAL_URL); + if ( ! $ics) { + echo '
Kalender konnte nicht geladen werden.
'; + + return; + } + +// Termine parsen + function parse_ics($ics) + { + $lines = explode("\n", $ics); + $events = []; + $event = []; + $inEvent = false; + foreach ($lines as $line) { + $line = trim($line); + if ($line === 'BEGIN:VEVENT') { + $inEvent = true; + $event = []; + } elseif ($line === 'END:VEVENT') { + $inEvent = false; + $events[] = $event; + } elseif ($inEvent) { + // Property kann Parameter enthalten, z.B. DTSTART;TZID=Europe/Berlin:20240701T19000000 + $parts = explode(':', $line, 2); + if (count($parts) === 2) { + $key = $parts[0]; + $val = $parts[1]; + // Nur den eigentlichen Property-Namen extrahieren + $key = strtoupper(preg_replace('/;.+$/', '', $key)); + $event[$key] = $val; + } + } + } + + return $events; + } + + $events = parse_ics($ics); + + return function() use ($events) { + return $events; + } +?> \ No newline at end of file diff --git a/site/snippets/termine-home.php b/site/snippets/termine-home.php new file mode 100644 index 0000000..66dcb1c --- /dev/null +++ b/site/snippets/termine-home.php @@ -0,0 +1,215 @@ +format('Ymd'); + + // Nur zukünftige Termine anzeigen + $future_events = array_filter($events, function ($event) use ($today) { + return isset($event['DTSTART']) && $event['DTSTART'] >= $today; + }); + + // --- Deutsche Monatsnamen --- + $de_months = [ + '01' => 'Jan', + '02' => 'Feb', + '03' => 'Mrz', + '04' => 'Apr', + '05' => 'Mai', + '06' => 'Jun', + '07' => 'Jul', + '08' => 'Aug', + '09' => 'Sep', + '10' => 'Okt', + '11' => 'Nov', + '12' => 'Dez', + ]; +?> + +
+

Bevorstehende Termine

+ +
+ + +
+
+ + + +
+ +
+
+
+ +
+ +
+ + +
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+

+

ab Uhr

+
+
+
+
+ +
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/site/snippets/termine.php b/site/snippets/termine.php index 2cc3b7b..362ca0f 100644 --- a/site/snippets/termine.php +++ b/site/snippets/termine.php @@ -1,50 +1,5 @@ Kalender konnte nicht geladen werden.'; - - return; -} - -// Termine parsen -function parse_ics($ics) -{ - $lines = explode("\n", $ics); - $events = []; - $event = []; - $inEvent = false; - foreach ($lines as $line) { - $line = trim($line); - if ($line === 'BEGIN:VEVENT') { - $inEvent = true; - $event = []; - } elseif ($line === 'END:VEVENT') { - $inEvent = false; - $events[] = $event; - } elseif ($inEvent) { - // Property kann Parameter enthalten, z.B. DTSTART;TZID=Europe/Berlin:20240701T19000000 - $parts = explode(':', $line, 2); - if (count($parts) === 2) { - $key = $parts[0]; - $val = $parts[1]; - // Nur den eigentlichen Property-Namen extrahieren - $key = strtoupper(preg_replace('/;.+$/', '', $key)); - $event[$key] = $val; - } - } - } - - return $events; -} - function format_ics_date($date) { // Unterstützt sowohl ganztägige als auch Zeitangaben @@ -59,7 +14,8 @@ function format_ics_date($date) } } -$events = parse_ics($ics); +$events = collection('termine'); + // Nur Events mit DTSTART berücksichtigen $events = array_filter($events, function ($event) { return isset($event['DTSTART']) && ! empty($event['DTSTART']); @@ -135,6 +91,7 @@ if ($filter_jahr && $filter_monat) { $filtered_events = $future_events; } ?> +
diff --git a/site/templates/home.php b/site/templates/home.php new file mode 100644 index 0000000..e5a8214 --- /dev/null +++ b/site/templates/home.php @@ -0,0 +1,7 @@ + + +

Hallo Welt!

+ + + + \ No newline at end of file