Habe hier mal noch ein Skript bauen lassen. Alle Farben etc. anpassbar. Ähnelt an das ToDo-Liste Modul von da8ter. Vielleicht kanns jemand brauchen.
<?php
//***********************************************************************************************************************
// 1. Objekt-Einstellungen
$KalenderId = 47818; // iCal Reader Instanz
$UrlaubId = 57046; // Boolean Variable für Urlaubstage
$TerminId_Heute = 16507; // String Variable für Termine Heute
$TerminId_Morgen = 11553; // String Variable für Termine Morgen
$TerminId_Uebermorgen = 10108; // String Variable für Termine Übermorgen
$TerminId_Gesamt = 50965; // String Variable mit Profil ~HTMLBox (Diese verlinken für die Visualisierung)
//***********************************************************************************************************************
// 2. DESIGN-EINSTELLUNGEN
// --- Schriftgrößen ---
$size_box_label = "0.65rem";
$size_box_number = "1.6rem";
$size_list_title = "0.65rem";
$size_list_content = "0.85rem";
// --- Farben obere Boxen ---
$color_box1_border = "rgba(211,105,30,0.5)";
$color_box1_text = "#d3691e";
$color_box2_border = "rgba(52,152,219,0.5)";
$color_box2_text = "#3498db";
$color_box3_border = "rgba(46,204,113,0.5)";
$color_box3_text = "#2ecc71";
// --- Rahmen obere Boxen ---
$box1_border_width = "2px";
$box1_border_style = "solid";
$box2_border_width = "2px";
$box2_border_style = "solid";
$box3_border_width = "2px";
$box3_border_style = "solid";
//***********************************************************************************************************************
// GLOW EINSTELLUNGEN (NUR EINE Variante aktivieren!)
// STANDARD – Glow wenn Termine > 0
// $enable_glow_effect = true;
// VARIANTE 1 – Glow immer aktiv
$enable_glow_always = true;
// VARIANTE 2 – Glow erst ab bestimmter Anzahl
// $glow_min_count = 3;
// VARIANTE 3 – Dynamischer Glow (mehr Termine = stärker)
// $enable_dynamic_glow = true;
// VARIANTE 4 – Farbiger Glow nach Anzahl
// $enable_color_glow = true;
//***********************************************************************************************************************
// LISTEN DESIGN
$color_list_border = "rgba(255,255,255,0.1)";
$list_border_width = "1px";
$color_list_label = "#777777";
$color_list_bg = "rgba(255,255,255,0.03)";
// --- Allgemeines ---
$color_bg_card = "rgba(45,45,48,1)";
$color_count_zero = "rgba(150,150,150,0.4)";
$border_radius = "10px";
$spacing_gap = "12px";
//***********************************************************************************************************************
// HILFSFUNKTIONEN
function normalizeTextOutput(string $content): string
{
$clean = trim($content);
if ($clean === "") {
return "Keine Termine";
}
return str_replace("<br>", PHP_EOL, $content);
}
function generateTopBox(
$title,
$count,
$borderColor,
$borderWidth,
$borderStyle,
$textColor,
$zeroColor,
$bgColor,
$radius,
$sizeLabel,
$sizeNumber
) {
global $enable_glow_effect;
global $enable_glow_always;
global $glow_min_count;
global $enable_dynamic_glow;
global $enable_color_glow;
$displayColor = ($count == 0) ? $zeroColor : $textColor;
$glow = "";
// STANDARD
if (isset($enable_glow_effect) && $enable_glow_effect && $count > 0) {
$glow = "box-shadow:0 0 10px $borderColor;";
}
// VARIANTE 1
if (isset($enable_glow_always) && $enable_glow_always) {
$glow = "box-shadow:0 0 10px $borderColor;";
}
// VARIANTE 2
if (isset($glow_min_count) && $count >= $glow_min_count) {
$glow = "box-shadow:0 0 12px $borderColor;";
}
// VARIANTE 3
if (isset($enable_dynamic_glow) && $enable_dynamic_glow && $count > 0) {
$strength = min(20, 5 + ($count * 2));
$glow = "box-shadow:0 0 {$strength}px $borderColor;";
}
// VARIANTE 4
if (isset($enable_color_glow) && $enable_color_glow && $count > 0) {
if ($count <= 2) {
$glowColor = "#2ecc71";
} elseif ($count <= 5) {
$glowColor = "#f39c12";
} else {
$glowColor = "#e74c3c";
}
$glow = "box-shadow:0 0 12px $glowColor;";
}
return "<div style='
flex:1;
border:$borderWidth $borderStyle $borderColor;
border-radius:$radius;
padding:10px 2px;
text-align:center;
background:$bgColor;
$glow'>
<div style='font-size:$sizeLabel;color:$textColor;font-weight:bold;margin-bottom:4px;text-transform:uppercase;'>
$title
</div>
<div style='font-size:$sizeNumber;color:$displayColor;font-weight:bold;line-height:1;'>
$count
</div>
</div>";
}
//***********************************************************************************************************************
// KALENDER LADEN
ICCR_UpdateCalendar($KalenderId);
$calendar_array = json_decode(ICCR_GetCachedCalendar($KalenderId), true);
SetValue($UrlaubId, false);
$ts_heute = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
$ts_morgen = strtotime("+1 day", $ts_heute);
$ts_uebermorgen = strtotime("+2 days", $ts_heute);
$ts_ende = strtotime("+3 days", $ts_heute);
$text1 = "";
$text2 = "";
$text3 = "";
$count_1 = 0;
$count_2 = 0;
$count_3 = 0;
if (is_array($calendar_array)) {
foreach ($calendar_array as $entry) {
$status = $entry["Status"] ?? "";
if ($status === "CANCELLED") {
continue;
}
$start = $entry["From"] ?? 0;
$ende_t = $entry["To"] ?? 0;
$name = $entry["Name"] ?? "Unbenannter Termin";
$allDay = !empty($entry["allDay"]);
if ($start <= 0 || $ende_t <= 0) {
continue;
}
$zeit = date("H:i", $start) . " Uhr ";
// HEUTE
if (
($start >= $ts_heute && $start < $ts_morgen) ||
($start < $ts_heute && $ende_t > $ts_heute)
) {
$text1 .= "• " . ($allDay ? "" : $zeit) . $name . "<br>";
$count_1++;
if (stripos($name, "Urlaub") !== false) {
SetValue($UrlaubId, true);
}
}
// MORGEN
elseif (
($start >= $ts_morgen && $start < $ts_uebermorgen) ||
($start < $ts_morgen && $ende_t > $ts_morgen)
) {
$text2 .= "• " . ($allDay ? "" : $zeit) . $name . "<br>";
$count_2++;
}
// ÜBERMORGEN
elseif (
($start >= $ts_uebermorgen && $start < $ts_ende) ||
($start < $ts_uebermorgen && $ende_t > $ts_uebermorgen)
) {
$text3 .= "• " . ($allDay ? "" : $zeit) . $name . "<br>";
$count_3++;
}
}
}
//***********************************************************************************************************************
// LISTEN
$generateListBox = function ($label, $content) use (
$color_list_border,
$list_border_width,
$color_list_label,
$color_list_bg,
$border_radius,
$size_list_title,
$size_list_content
) {
$clean = trim($content);
$final = ($clean === "") ? "Keine Termine" : $clean;
return "<div style='border:$list_border_width solid $color_list_border;border-radius:$border_radius;padding:10px;background:$color_list_bg;'>
<div style='font-size:$size_list_title;color:$color_list_label;font-weight:bold;text-transform:uppercase;margin-bottom:6px;'>$label</div>
<div style='font-size:$size_list_content;line-height:1.4;'>$final</div>
</div>";
};
//***********************************************************************************************************************
// HTML
$html = "<div style='font-family:sans-serif;color:white;padding:2px;'>";
$html .= "<div style='display:flex;gap:8px;margin-bottom:15px;'>";
$html .= generateTopBox("Heute", $count_1, $color_box1_border, $box1_border_width, $box1_border_style, $color_box1_text, $color_count_zero, $color_bg_card, $border_radius, $size_box_label, $size_box_number);
$html .= generateTopBox("Morgen", $count_2, $color_box2_border, $box2_border_width, $box2_border_style, $color_box2_text, $color_count_zero, $color_bg_card, $border_radius, $size_box_label, $size_box_number);
$html .= generateTopBox("Übermorgen", $count_3, $color_box3_border, $box3_border_width, $box3_border_style, $color_box3_text, $color_count_zero, $color_bg_card, $border_radius, $size_box_label, $size_box_number);
$html .= "</div>";
$html .= "<div style='display:flex;flex-direction:column;gap:$spacing_gap;'>";
$html .= $generateListBox("Termine Heute", $text1);
$html .= $generateListBox("Termine Morgen", $text2);
$html .= $generateListBox("Termine Übermorgen", $text3);
$html .= "</div></div>";
//***********************************************************************************************************************
// VARIABLEN SETZEN
SetValueString($TerminId_Heute, normalizeTextOutput($text1));
SetValueString($TerminId_Morgen, normalizeTextOutput($text2));
SetValueString($TerminId_Uebermorgen, normalizeTextOutput($text3));
SetValueString($TerminId_Gesamt, $html);


