= ($data['items_total'] ?? 0)) { break; } } return $items; } function format_event_meta(array $item): string { $parts = []; $start = !empty($item['start']) ? new DateTime($item['start']) : null; $end = !empty($item['end']) ? new DateTime($item['end']) : null; if ($start) { $parts[] = !empty($item['whole_day']) ? 'Le ' . $start->format('d/m/Y') : 'Le ' . $start->format('d/m/Y à H:i'); } if ($end && (!$start || $end->format('Y-m-d') !== $start->format('Y-m-d'))) { $parts[] = "jusqu'au " . $end->format('d/m/Y H:i'); } $address = implode(', ', array_filter([$item['street'] ?? null, $item['zipcode'] ?? null, $item['city'] ?? null])); if ($address) { $parts[] = "Lieu : $address"; } return implode(' — ', $parts); } function build_events_feed(): string { $items = []; foreach (fetch_all_events() as $item) { $id = basename(rtrim($item['@id'] ?? '', '/')); $summary = strip_html($item['description_fr'] ?? $item['description'] ?? null); $meta = format_event_meta($item); $description = implode(' | ', array_filter([$meta, $summary])); $items[] = [ 'title' => $item['title_fr'] ?? $item['title'] ?? '(sans titre)', 'link' => SITE . '/agenda?event=' . rawurlencode($id), 'guid' => $item['UID'] ?? $id, 'pubDate' => $item['created'] ?? $item['start'] ?? null, 'description' => $description, ]; } return build_rss( 'Silly.be - Agenda', SITE . '/agenda', "Agenda / événements de la commune de Silly (Belgique)", $items ); } serve_cached_feed('agenda', 'build_events_feed');