From d62879cce39e7ebdcc52095e0e1402331b3f9538 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Sat, 12 Sep 2026 11:09:36 +0200 Subject: [PATCH] =?UTF-8?q?Monatsvorhersage=20mit=20vollst=C3=A4ndigen=20M?= =?UTF-8?q?ondphasen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ajax/save_monthly_preview_to_joomla.php | 5 +++- public/monatsvorhersage.php | 30 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/public/ajax/save_monthly_preview_to_joomla.php b/public/ajax/save_monthly_preview_to_joomla.php index 4f82ca2..81408ea 100644 --- a/public/ajax/save_monthly_preview_to_joomla.php +++ b/public/ajax/save_monthly_preview_to_joomla.php @@ -161,7 +161,10 @@ try { ); $authorId = (int) $authorStmt->fetchColumn(); if ($authorId <= 0) { - throw new RuntimeException('Kein Joomla-Autor für die Monatsvorschau vorhanden.'); + // Kategorie 59 kann beim ersten Export noch leer sein. + // Monatsvorschauen werden dann mit dem festgelegten Joomla- + // Autor angelegt. + $authorId = 217; } $insertContentStmt = $pdo->prepare( diff --git a/public/monatsvorhersage.php b/public/monatsvorhersage.php index c1d8758..31a1ef5 100644 --- a/public/monatsvorhersage.php +++ b/public/monatsvorhersage.php @@ -896,11 +896,10 @@ if (!function_exists('monthForecastBuildNarrativeText')) { } } - $moonEvents = $findEvents( + $moonEvents = array_values(array_filter( $filteredEvents, - static fn (array $event): bool => in_array((string) ($event['type'] ?? ''), ['moon_phase', 'golden_handle', 'moon_planet', 'moon_planet_approach', 'moon_deep_sky', 'moon_deep_sky_approach', 'moon_occultation', 'moon_apsis'], true), - 10 - ); + static fn (array $event): bool => in_array((string) ($event['type'] ?? ''), ['moon_phase', 'golden_handle', 'moon_planet', 'moon_planet_approach', 'moon_deep_sky', 'moon_deep_sky_approach', 'moon_occultation', 'moon_apsis'], true) + )); // Jahreszahl aus Datum entfernen (z. B. "19.04.2026" → "19.04.") $shortDate = static function (string $d): string { return (string) preg_replace('/\.\d{4}$/', '.', $d); @@ -914,7 +913,13 @@ if (!function_exists('monthForecastBuildNarrativeText')) { )); $phaseEvents = array_values(array_filter($sortedMoonEvents, static fn (array $e): bool => (string) ($e['type'] ?? '') === 'moon_phase')); - $nonPhaseEvents = array_values(array_filter($sortedMoonEvents, static fn (array $e): bool => (string) ($e['type'] ?? '') !== 'moon_phase')); + // Alle Mondphasen müssen erhalten bleiben. Die übrigen Mondereignisse + // werden weiterhin begrenzt, damit der Übersichtstext kompakt bleibt. + $nonPhaseEvents = array_slice( + array_values(array_filter($sortedMoonEvents, static fn (array $e): bool => (string) ($e['type'] ?? '') !== 'moon_phase')), + 0, + 10 + ); $moonSentences = []; @@ -952,12 +957,22 @@ if (!function_exists('monthForecastBuildNarrativeText')) { $apsis = null; $approaches = []; $goldenHandle = null; + $occultationTargets = []; foreach ($dateEvents as $de) { $type = (string) ($de['type'] ?? ''); if ($type === 'moon_apsis') { $apsis = $de; } elseif ($type === 'golden_handle') { $goldenHandle = $de; + } elseif ($type === 'moon_occultation' && isset($de['event_kind'])) { + $occultationLabel = trim((string) ($de['event'] ?? '')); + if (str_starts_with($occultationLabel, 'Mond bedeckt ')) { + $target = substr($occultationLabel, strlen('Mond bedeckt ')); + $target = trim(explode(' – ', $target, 2)[0]); + if ($target !== '') { + $occultationTargets[$target] = true; + } + } } else { $approaches[] = $de; } @@ -965,6 +980,10 @@ if (!function_exists('monthForecastBuildNarrativeText')) { $sd = $shortDate($date); + foreach (array_keys($occultationTargets) as $target) { + $moonSentences[] = 'Am ' . $sd . ' bedeckt der Mond ' . $target . '.'; + } + if ($goldenHandle !== null) { $moonSentences[] = 'Am ' . $sd . ' zeigt der Mond den Goldenen Henkel: Ein Gebirgskamm am Mondrand leuchtet bereits im Sonnenlicht, während das Tal dahinter noch im Schatten liegt – ein lohnender Anblick schon im kleinen Teleskop.'; } @@ -2474,6 +2493,7 @@ foreach ($moonPlanetApproaches as $approachEvent) { 'date' => (string) ($approachEvent['local_date'] ?? ''), 'time' => (string) ($approachEvent['local_time'] ?? ''), 'local_iso' => (string) ($approachEvent['local_iso'] ?? ''), + 'event_kind' => $eventKind, 'type' => $eventKind !== '' ? 'moon_occultation' : 'moon_planet', ]; }