getDaysRange($dayStart, 1); } // Der eine Tag, den wir anzeigen $day = $dayData['days'][0] ?? date('Y-m-d'); // ============================================================ // SENDUNGEN FÜR DIESEN TAG ZUSAMMENSTELLEN // - alle Sendungen, die an diesem Tag starten // - PLUS Sendungen vom Vortag, die über Mitternacht in diesen Tag laufen // ============================================================ $dayEntries = $manager->getEntries($day, $day); $prevDayDate = date('Y-m-d', strtotime($day . ' -1 day')); $prevEntries = $manager->getEntries($prevDayDate, $prevDayDate); foreach ($prevEntries as $pe) { $isOvernight = $pe['zeit_bis'] < $pe['zeit_von']; // Sonderfall: Endet um exakt 00:00 → gilt NICHT als tagübergreifend if ($pe['zeit_bis'] === '00:00:00' || $pe['zeit_bis'] === '00:00') { $isOvernight = false; } if ($isOvernight) { // läuft über Mitternacht in den aktuellen Tag → hier mit anzeigen $dayEntries[] = $pe; } } // Sortieren: nach Startzeit, tagübergreifende vom Vortag zuerst usort($dayEntries, function($a, $b) use ($day) { // Sendungen vom Vortag zuerst (sie laufen schon seit gestern) $aPrev = ($a['datum'] !== $day); $bPrev = ($b['datum'] !== $day); if ($aPrev && !$bPrev) return -1; if (!$aPrev && $bPrev) return 1; // Innerhalb der Gruppen nach zeit_von sortieren return strcmp($a['zeit_von'], $b['zeit_von']); }); $dayEntries = $manager->fillWithAutoDj($day, $dayEntries); function e(string $value): string { return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); } // Wochentag-Map (ausgeschrieben) $weekdayMap = [ 'Mo' => $lang->get('sendeplan_montag', 'Montag'), 'Di' => $lang->get('sendeplan_dienstag', 'Dienstag'), 'Mi' => $lang->get('sendeplan_mittwoch', 'Mittwoch'), 'Do' => $lang->get('sendeplan_donnerstag', 'Donnerstag'), 'Fr' => $lang->get('sendeplan_freitag', 'Freitag'), 'Sa' => $lang->get('sendeplan_samstag', 'Samstag'), 'So' => $lang->get('sendeplan_sonntag', 'Sonntag'), ]; $weekdayShort = $manager->getWeekday($day); $weekday = $weekdayMap[$weekdayShort] ?? $weekdayShort; $dayNum = (new DateTime($day))->format('d.m.Y'); $isToday = $manager->isToday($day); // 🔥 NEU: Zählung ohne Auto-DJ $realEntries = array_filter($dayEntries, function($e) { return empty($e['is_autodj']); }); $entryCount = count($realEntries); ?> <?= $lang->get('sendeplan_title', '📅 Sendeplan') ?> – <?= e($weekday) ?>

📅 get('sendeplan_title', 'Sendeplan') ?>

get('sendeplan_view_week', '📋 Wochen Ansicht') ?>
· get('sendeplan_day_is_today', '– heute') ?> get('sendeplan_no_entries', 'keine Sendungen') ?> 1 get('sendeplan_entry', 'Sendung') ?> get('sendeplan_entries', 'Sendungen') ?>
get('sendeplan_no_entries_planned', 'Keine Sendungen geplant') ?>
= $entry['zeit_von'] && $currentTime <= $entry['zeit_bis']) { $isLive = true; } } if ($entry['datum'] === $day && $isOvernight) { if ($currentTime >= $entry['zeit_von']) { $isLive = true; } } if ($isFromPrevDay && $isOvernight) { if ($currentTime <= $entry['zeit_bis']) { $isLive = true; } } } ?>
<?= e($entry['sendungsname']) ?> get('sendeplan_sendebild', 'Sendebild') ?>
🔴 LIVE formatTime($entry['zeit_von'])) ?> - formatTime($entry['zeit_bis'])) ?> get('sendeplan_day_from_prev', '(vom Vortag)') ?>
<?= e($entry['moderator_name']) ?> 🎤 = $startTs && $nowTs <= $endTs); $isPast = ($nowTs > $endTs); $isFuture = ($nowTs < $startTs); // Klickbar wenn: // - Modus 1 oder 2 und gerade live // - Modus 2 und Sendung in der Zukunft $isClickable = false; if ($wbMode >= 1 && !$isPast) { if ($isLive) { $isClickable = true; } elseif ($isFuture && $wbMode === 2) { $isClickable = true; } } ?> 0): ?> <?= $lang->get('wunschbox_title', 'Wunschbox') ?> <?= $lang->get('wunschbox_title', 'Wunschbox') ?>