'', 'time_from' => '', 'time_to' => '', 'note' => '']];
$recurrenceRuleValue = $editingListing ? (string)($editListing['recurrence_rule'] ?? '') : '';
$recurrenceUntilValue = '';
if ($editingListing && !empty($editListing['recurrence_until'])) {
$recurrenceUntilValue = date('Y-m-d', strtotime((string)$editListing['recurrence_until']));
}
$recurrenceModeValue = 'single';
if (str_contains($recurrenceRuleValue, 'FREQ=DAILY')) {
$recurrenceModeValue = 'daily';
} elseif (str_contains($recurrenceRuleValue, 'FREQ=WEEKLY')) {
$recurrenceModeValue = 'weekly';
}
$categoryTitleMap = [];
foreach (($listingCategories ?? []) as $categoryRow) {
$categoryTitleMap[(string)($categoryRow['slug'] ?? '')] = (string)($categoryRow['title'] ?? '');
}
$categoryInputValue = !empty($eventDraftValues['category_input'])
? (string)$eventDraftValues['category_input']
: ($categoryTitleMap[$categorySlugValue] ?? $categorySlugValue);
$eventLocationModeValue = $editingEvent ? (string)($editEvent['location_source_type'] ?? 'custom') : (!empty($eventDraftValues['event_location_mode']) ? (string)$eventDraftValues['event_location_mode'] : 'custom');
$eventLocationSourceIdValue = $editingEvent && !empty($editEvent['location_source_listing_id']) ? (int)$editEvent['location_source_listing_id'] : (!empty($eventDraftValues['event_location_source_id']) ? (int)$eventDraftValues['event_location_source_id'] : 0);
$eventLocationPlaceOptions = [];
$eventLocationEditorialOptions = [];
foreach (($eventLocationOptions ?? []) as $locationOption) {
if ((string)($locationOption['listing_type'] ?? '') === 'place') {
$eventLocationPlaceOptions[] = $locationOption;
} elseif ((string)($locationOption['listing_type'] ?? '') === 'editorial_event') {
$eventLocationEditorialOptions[] = $locationOption;
}
if ((int)($locationOption['id'] ?? 0) !== $eventLocationSourceIdValue) {
continue;
}
$optionTypeLabel = (string)($locationOption['listing_type'] ?? '') === 'place' ? 'Ort' : 'Veranstaltung';
$optionAddressLabel = trim(implode(', ', array_filter([
(string)($locationOption['street'] ?? ''),
trim((string)($locationOption['zip'] ?? '') . ' ' . (string)($locationOption['city'] ?? '')),
])));
if ($eventLocationModeValue !== 'custom' && !empty($locationOption['category_title'])) {
$categoryInputValue = (string)$locationOption['category_title'];
$categorySlugValue = (string)($locationOption['category_slug'] ?? $categorySlugValue);
$streetValue = (string)($locationOption['street'] ?? $streetValue);
$zipValue = (string)($locationOption['zip'] ?? $zipValue);
$cityValue = (string)($locationOption['city'] ?? $cityValue);
$regionValue = (string)($locationOption['region'] ?? $regionValue);
$latValue = (string)($locationOption['lat'] ?? $latValue);
$lngValue = (string)($locationOption['lng'] ?? $lngValue);
}
break;
}
$usesDatabaseEventLocation = $currentEntryKind === 'event' && $eventLocationModeValue !== 'custom';
$eventAddressInfoValue = trim(implode(', ', array_filter([
$streetValue,
trim($zipValue . ' ' . $cityValue),
$regionValue,
])));
$priceRows = [];
if ($editingListing && !empty($editListing['prices']) && is_array($editListing['prices'])) {
foreach ($editListing['prices'] as $priceRow) {
$ageFrom = '';
$ageTo = '';
$noteValue = (string)($priceRow['note'] ?? '');
if (preg_match('/ab\s+(\d+)/u', $noteValue, $match)) {
$ageFrom = $match[1];
}
if (preg_match('/bis\s+(\d+)/u', $noteValue, $match)) {
$ageTo = $match[1];
}
$priceRows[] = [
'amount' => (string)($priceRow['amount'] ?? ''),
'age_from' => $ageFrom,
'age_to' => $ageTo,
];
}
}
if ($priceRows === []) {
$priceRows = [[
'amount' => '',
'age_from' => '',
'age_to' => '',
]];
}
$editingChild = isset($editChild) && $editChild !== null;
$childAction = $editingChild ? 'child_update' : 'child_add';
$childModalTitle = $editingChild ? 'Kind bearbeiten' : 'Kind hinzufügen';
$sectionLinks = [
'profile' => 'Profil',
'children' => 'Kinder',
'events' => 'Events',
'places' => 'Orte & Veranstaltungen',
'community' => 'Community',
'settings' => 'Einstellungen',
];
if (!empty($canManageProfileLevels)) {
$sectionLinks['profile-levels'] = 'Profil-Levels';
}
$showEventTypeChoice = !$editing && (($section ?? 'events') === 'places') && $requestedCreateListingKind === null;
$modalSectionTarget = ($editingListing || ($section ?? '') === 'places') ? 'places' : 'events';
if (!empty($canManageCategories)) {
$sectionLinks['categories'] = 'Kategorien';
}
if (!empty($canManageSystemSettings)) {
$sectionLinks['system'] = 'System';
}
?>
Hallo, = htmlspecialchars($profile['display_name'] ?: 'Papa', ENT_QUOTES) ?> !
Verwalte dein Profil, Kinder, Events und Teilnahmen.
= htmlspecialchars($flash['message'], ENT_QUOTES) ?>
= htmlspecialchars($info, ENT_QUOTES) ?>
Fehler: = htmlspecialchars($error, ENT_QUOTES) ?>
Dein Profil
Hier pflegst du deine persönlichen Angaben für den Mitgliederbereich.
= \App\Avatar\AvatarManager::render($profile, $profile['display_name'] ?: 'Papa', 'xl', $dashboardUserId) ?>
Dein Profilbild
Dein Profilbild wird mit dem Avatar-Generator erzeugt und als feste SVG-Datei zu deinem Konto gespeichert. Stil, Seed und Varianten bleiben dabei in deinem Profil hinterlegt.
Profilbild gestalten
Basis
Anzeigename = htmlspecialchars($profile['display_name'] ?: 'Nicht hinterlegt', ENT_QUOTES) ?>
Name = htmlspecialchars(trim($profile['first_name'] . ' ' . $profile['last_name']) ?: 'Nicht hinterlegt', ENT_QUOTES) ?>
E-Mail = htmlspecialchars($profile['email'] ?: 'Nicht hinterlegt', ENT_QUOTES) ?>
Telefon = htmlspecialchars($profile['contact_phone'] ?: 'Nicht hinterlegt', ENT_QUOTES) ?>
Standort
Adresse = htmlspecialchars(trim(implode(', ', array_filter([(string)($profile['street'] ?? ''), trim((string)$profile['zip'] . ' ' . (string)$profile['city']), (string)($profile['region'] ?? '')]))) ?: 'Nicht hinterlegt', ENT_QUOTES) ?>
Sprachen = htmlspecialchars($profile['languages'] ?: 'Nicht hinterlegt', ENT_QUOTES) ?>
Beruf = htmlspecialchars($profile['profession'] ?: 'Nicht hinterlegt', ENT_QUOTES) ?>
Über dich
= nl2br(htmlspecialchars((string)$profile['about'], ENT_QUOTES)) ?>
Profil bearbeiten
Deine Kinder
Optionale Angaben, die dir bei Planung und passenden Events und Treffen helfen können.
Noch keine Kinder eingetragen.
= htmlspecialchars($c['first_name'], ENT_QUOTES) ?> ,
= htmlspecialchars($c['gender'], ENT_QUOTES) ?>
= $c['age_years'] ? '(' . (int)$c['age_years'] . ' Jahre)' : '' ?>
· geboren am = htmlspecialchars(date('d.m.Y', strtotime((string)$c['birthdate'])), ENT_QUOTES) ?>
= htmlspecialchars($c['note'], ENT_QUOTES) ?>
Dein Community-Status
Rang, Punkte und nur bei Bedarf ein Hinweis zu aktiven Schreibsperren.
Rang = htmlspecialchars(trim(($communityLevel['icon'] ?? '') . ' ' . ($communityLevel['label'] ?? '')), ENT_QUOTES) ?>
Punkte = number_format((float)$communityPoints, 1, ',', '.') ?>
Themen erstellen = $communityRestrictions['thread_create_blocked'] ? 'Gesperrt' : 'Erlaubt' ?>
Antworten schreiben = $communityRestrictions['reply_blocked'] ? 'Gesperrt' : 'Erlaubt' ?>
Hinweis zur Community-Sperre: = htmlspecialchars((string)$communityRestrictions['reason'], ENT_QUOTES) ?>
Letzte Bewerbung: = htmlspecialchars((string)$communityApplication['status'], ENT_QUOTES) ?>
= htmlspecialchars((string)$communityApplication['decision_reason'], ENT_QUOTES) ?>
Profil-Levels
Kürzlich erreicht
= htmlspecialchars($recentHighLevelUserName, ENT_QUOTES) ?>
= htmlspecialchars($recentHighLevelUserLevel, ENT_QUOTES) ?> ·
= number_format((float)($recentHighLevelUser['points'] ?? 0), 1, ',', '.') ?> Punkte ·
= htmlspecialchars(date('d.m.Y', strtotime((string)($recentHighLevelUser['reached_at'] ?? ''))), ENT_QUOTES) ?>
Keine neuen Aufstiege vorhanden.
Benutzer suchen
= htmlspecialchars((string)($searchedUser['display_name'] ?: trim(((string)($searchedUser['first_name'] ?? '')) . ' ' . ((string)($searchedUser['last_name'] ?? ''))) ?: 'Mitglied'), ENT_QUOTES) ?>
ID: = (int)($searchedUser['id'] ?? 0) ?> ·
= htmlspecialchars((string)($searchedUser['email'] ?? ''), ENT_QUOTES) ?> ·
Punkte: = number_format((float)($searchedUser['community_points'] ?? 0), 1, ',', '.') ?> ·
Level: = htmlspecialchars(trim(((string)(($searchedUser['community_level']['icon'] ?? ''))) . ' ' . ((string)(($searchedUser['community_level']['label'] ?? '')))), ENT_QUOTES) ?>
System-Level: = htmlspecialchars(implode(', ', array_map('strval', (array)$searchedUser['roles'])), ENT_QUOTES) ?>
Keine passenden Benutzer gefunden.
Community-Levels
= htmlspecialchars((string)($levelDefinition['label'] ?? ''), ENT_QUOTES) ?> · ab = number_format((float)($levelDefinition['min'] ?? 0), 1, ',', '.') ?> Punkten
System-Level
= htmlspecialchars((string)($systemLevel['label'] ?? ''), ENT_QUOTES) ?>
Aktuell:
= htmlspecialchars((string)$systemRight, ENT_QUOTES) ?>
Deine Events
Hier verwaltest du nur echte eigene Events und Events, an denen du teilnimmst.
Meine Events
Neues Event anlegen
Kalendersynchronisation
Abgelaufene Events
Eigene Events
Keine zukünftigen eigenen Events angelegt.
= htmlspecialchars($e['title'], ENT_QUOTES) ?>
Abgesagt
= htmlspecialchars($e['city'], ENT_QUOTES) ?> · = htmlspecialchars($e['starts_at'], ENT_QUOTES) ?> · = htmlspecialchars($e['visibility'], ENT_QUOTES) ?>
· Anmeldungen: = (int)$e['participant_count'] ?>
Angemeldete Events
Events anderer Nutzer, bei denen du eingetragen bist.
Aktuell nimmst du an keinen zukünftigen Events teil.
= htmlspecialchars((string)$entry['title'], ENT_QUOTES) ?>
= htmlspecialchars(trim(implode(' · ', array_filter([
(string)($entry['city'] ?? ''),
!empty($entry['starts_at']) ? (string)$entry['starts_at'] : null,
!empty($entry['host_name']) ? 'Von ' . (string)$entry['host_name'] : null,
!empty($entry['participation_status']) ? 'Status: ' . (string)$entry['participation_status'] : null,
]))), ENT_QUOTES) ?>
Kalender-Synchronisierung
Exportiert werden immer alle eigenen Events und alle Events, an denen du teilnimmst.
Kalender abonnieren
Der persönliche Kalender-Feed ist für Apps gedacht, die Internet-Kalender abonnieren können. So bleiben Änderungen, Absagen oder Löschungen bei der nächsten Synchronisierung aktuell.
Persönlicher Kalender-Feed
So nutzt du den Feed
1. Feed-Link kopieren.
2. Im Kalender-Anbieter `Kalender abonnieren` oder `Per URL hinzufügen` wählen.
3. Den Link einfügen und speichern.
Wichtiger Unterschied
„ICS herunterladen“ ist nur eine Momentaufnahme für den manuellen Import. Spätere Änderungen in Papa-Kind-Treff werden dadurch nicht automatisch in deinem privaten Kalender nachgezogen.
Für laufende Aktualisierungen solltest du deshalb den persönlichen Kalender-Feed abonnieren.
Vergangene eigene Events
Hier siehst du deine bereits abgelaufenen oder vergangenen eigenen Events.
Keine vergangenen Events.
= htmlspecialchars($e['title'], ENT_QUOTES) ?>
Abgesagt
= htmlspecialchars($e['city'], ENT_QUOTES) ?> · = htmlspecialchars($e['starts_at'], ENT_QUOTES) ?> · = htmlspecialchars($e['visibility'], ENT_QUOTES) ?>
· Anmeldungen: = (int)$e['participant_count'] ?>
Vergangene Teilnahmen
Events anderer Nutzer, an denen du in der Vergangenheit teilgenommen hast.
Keine vergangenen Event-Teilnahmen.
= htmlspecialchars((string)$entry['title'], ENT_QUOTES) ?>
= htmlspecialchars(trim(implode(' · ', array_filter([
(string)($entry['city'] ?? ''),
!empty($entry['starts_at']) ? (string)$entry['starts_at'] : null,
!empty($entry['host_name']) ? 'Von ' . (string)$entry['host_name'] : null,
!empty($entry['participation_status']) ? 'Status: ' . (string)$entry['participation_status'] : null,
]))), ENT_QUOTES) ?>
Orte & Veranstaltungen
Hier legst du dauerhafte Orte wie Cafés oder Spielplätze sowie zeitlich begrenzte Veranstaltungen an.
Ort oder Veranstaltung anlegen
Deine eingereichten Vorschläge
Aktuell warten keine eigenen Orte oder Veranstaltungen auf Prüfung.
= htmlspecialchars((string)$entry['title'], ENT_QUOTES) ?>
= ($entry['listing_type'] ?? '') === 'place' ? 'Ort' : 'Veranstaltung' ?>
= (string)($entry['moderation_request_status'] ?? '') === 'rejected' ? 'Abgelehnt' : 'Wartet auf Freigabe' ?>
Admin-Hinweis: = htmlspecialchars((string)$entry['moderation_review_note'], ENT_QUOTES) ?>
Noch keine freigegebenen Orte oder Veranstaltungen vorhanden.
Freigegebene Orte & Veranstaltungen
Hier siehst du die systemweit verfügbaren Einträge. Für Änderungen oder Löschungen ist immer eine begründete Anfrage nötig.
= htmlspecialchars((string)$entry['title'], ENT_QUOTES) ?>
= ($entry['listing_type'] ?? '') === 'place' ? 'Ort' : 'Veranstaltung' ?>
= htmlspecialchars((string)$entry['category_title'], ENT_QUOTES) ?>
Änderung angefragt
Löschung angefragt
= htmlspecialchars(trim(implode(' · ', array_filter([
trim(implode(', ', array_filter([
(string)($entry['street'] ?? ''),
trim((string)($entry['zip'] ?? '') . ' ' . (string)($entry['city'] ?? '')),
]))),
(string)($entry['region'] ?? ''),
!empty($entry['starts_at']) ? (string)$entry['starts_at'] : null,
]))), ENT_QUOTES) ?>
Einstellungen
Standort, Browserfreigabe und Cookie-Einstellungen an einem Ort.
Standort auf Papa-Kind-Treff verwenden
>Nie verwenden
>Bei Bedarf nachfragen
>Wenn im Browser erlaubt, automatisch verwenden
Diese Einstellung steuert nur, ob Papa-Kind-Treff Standortdaten nutzen darf. Die eigentliche Browserfreigabe wird separat im Browser verwaltet.
Einstellungen speichern
Cookie-Einstellungen öffnen
Browser-Status für Standort
Wird geprüft …
Deine Website-Einstellung und die Browserfreigabe sind getrennte Ebenen. Wenn der Browser blockiert, kann Papa-Kind-Treff den Standort auch bei aktiver Einstellung nicht nutzen.
Warum gibt es zwei Einstellungen?
Der Browser entscheidet technisch, ob Standortzugriffe erlaubt sind. Papa-Kind-Treff entscheidet mit deiner Website-Einstellung, ob diese Möglichkeit auf der Plattform überhaupt verwendet werden soll.
Chrome und Edge
Auf das Schloss-Symbol links neben der Adresszeile klicken, dann `Website-Einstellungen` oder `Standort` öffnen und die Freigabe dort anpassen.
Firefox
Auf das Schloss-Symbol links neben der Adresse klicken und unter Berechtigungen den Standort prüfen oder zurücksetzen. Alternativ über Einstellungen → Datenschutz & Sicherheit → Berechtigungen.
Safari
In Safari die Website-Einstellungen für den aktuellen Tab oder die Datenschutz-/Standort-Einstellungen des Browsers beziehungsweise des Geräts prüfen.
Direkt in die Browser-Einstellungen springen?
Nein, das kann eine Website nicht zuverlässig und browserübergreifend auslösen. Deshalb zeigt Papa-Kind-Treff nur den Status an und erklärt, wo du die Freigabe findest.
System-Einstellungen
Globale Schalter für Wartung, externe Ortsdaten und die neue Termin-/Ort-Basis.
Wartung und Verfügbarkeit
Orts- und Bewertungsdienste
System-Einstellungen speichern
Status der neuen Termin-/Ort-Basis
Neue Tabellenbasis: = !empty($listingCatalogStatus['complete']) ? 'Vollständig initialisiert' : 'Noch unvollständig' ?>
Geplante Grundtypen: Event, Partner-Angebot, Ort, redaktioneller Termin
Geplante Zusatzlogik: Kategorien, Serientermine, Preise, Gutscheine, Kapazitäten
Fehlende Tabellen: = !empty($listingCatalogStatus['missing']) ? htmlspecialchars(implode(', ', $listingCatalogStatus['missing']), ENT_QUOTES) : 'Keine' ?>
Kategorien
Suchergebnisse
= htmlspecialchars((string)$categoryItem['title'], ENT_QUOTES) ?>
Neu
Slug: = htmlspecialchars((string)$categoryItem['slug'], ENT_QUOTES) ?> · Einträge: = (int)($categoryItem['listing_count'] ?? 0) ?> · Orte: = (int)($categoryItem['place_count'] ?? 0) ?> · Eigene Events: = (int)($categoryItem['event_count'] ?? 0) ?>
Zweite Kategorie
Behalten
= htmlspecialchars((string)$categoryItem['title'], ENT_QUOTES) ?>
Zweite Kategorie
Zusammenführen
Bestätigen
Keine passenden Kategorien gefunden.
= htmlspecialchars((string)$categoryItem['title'], ENT_QUOTES) ?>
Neu
Slug: = htmlspecialchars((string)$categoryItem['slug'], ENT_QUOTES) ?> · Einträge: = (int)($categoryItem['listing_count'] ?? 0) ?> · Orte: = (int)($categoryItem['place_count'] ?? 0) ?> · Eigene Events: = (int)($categoryItem['event_count'] ?? 0) ?>
Zweite Kategorie
Behalten
= htmlspecialchars((string)$categoryItem['title'], ENT_QUOTES) ?>
Zweite Kategorie
Zusammenführen
Bestätigen
Aktuell gibt es keine neuen Kategorien.
Profilbild gestalten
✕
= \App\Avatar\AvatarManager::render($profile, $profile['display_name'] ?: 'Papa', 'xxl', $dashboardUserId) ?>
Wähle eine Komponente und passe dein neues Profilbild Schritt für Schritt an. Gespeichert wird erst nach Klick auf den Button unten.
1): ?>
Stil
$styleMeta): ?>
>
= htmlspecialchars((string)$styleMeta['label'], ENT_QUOTES) ?>
Random Profilbild
Abbrechen
Profilbild speichern
$styleMeta): ?>
>
$component): ?>
= htmlspecialchars((string)($component['label'] ?? $field), ENT_QUOTES) ?>
(= (int)($component['count'] ?? 0) ?>)
$component): ?>
= htmlspecialchars((string)($component['label'] ?? $field), ENT_QUOTES) ?>
Gesamtes Profilbild zur sicheren Vorschau
Profil bearbeiten
✕
Persönliche Angaben werden app-seitig verschlüsselt gespeichert. Nur für Login und Kontofunktionen wird die E-Mail intern über einen separaten Lookup-Hash adressiert.
Basisdaten
Adresse und Umgebung
Adresse suchen
Browser-Adresse übernehmen
?
Für Suche und Browser-Übernahme werden dieselben Karten-/Adressdienste wie bei Events genutzt und nur nach Einwilligung in externe Dienste.
Gewählte Adresse: = htmlspecialchars(trim(implode(', ', array_filter([(string)($profile['street'] ?? ''), trim((string)$profile['zip'] . ' ' . (string)$profile['city']), (string)($profile['region'] ?? '')]))), ENT_QUOTES) ?>
Die Adresse wurde manuell geändert. Vor dem Speichern bitte erneut suchen oder die Browser-Adresse übernehmen.
Sprache und Beruf
Kurzvorstellung
Über dich
= htmlspecialchars($profile['about'], ENT_QUOTES) ?>
Abbrechen
Speichern
Warum wir die Adresse abfragen
✕
Deine Adresse hilft uns, dir passende Events, Termine und Treffen in deiner Umgebung gezielter anzuzeigen.
Wenn keine Adresse hinterlegt ist, können wir lokale Bedarfe und passende Angebote deutlich schlechter einschätzen.
Die Adresse wird nur für diese Plattform-Funktionen genutzt. Straße und Hausnummer werden verschlüsselt gespeichert.
Verstanden
Adresse auswählen
✕
Wähle den passenden Treffer für dein Profil.
Abbrechen
= htmlspecialchars($childModalTitle, ENT_QUOTES) ?>
✕
Notiz
Abbrechen
= $editingChild ? 'Änderungen speichern' : 'Speichern' ?>
= htmlspecialchars($eventTitle, ENT_QUOTES) ?>
✕
= htmlspecialchars(trim(implode(', ', array_filter([(string)($placeSuggestion['street'] ?? ''), trim((string)($placeSuggestion['zip'] ?? '') . ' ' . (string)($placeSuggestion['city'] ?? '')), (string)($placeSuggestion['region'] ?? '')]))), ENT_QUOTES) ?>
Was möchtest du anlegen?
Ort
Sonstige Veranstaltung
Ort: dauerhaft verfügbar oder Veranstaltung: zeitlich begrenzter Hinweis.
Eintragstyp
= $currentEntryKind === 'place' ? 'Ort: dauerhaft verfügbar.' : ($currentEntryKind === 'editorial_event' ? 'Sonstige Veranstaltung: zeitlich begrenzter Hinweis.' : 'Eigenes Event: von dir organisiert.') ?>
Titel
Beschreibung
= htmlspecialchars($descriptionValue, ENT_QUOTES) ?>
Location
>Ort aus Datenbank
>Veranstaltung aus Datenbank
>Benutzerdefiniert
Ort aus Datenbank
= $eventLocationModeValue === 'editorial_event' ? 'Keine aktuell verfügbaren Veranstaltungen' : 'Ort aus der Datenbank auswählen' ?>
>= htmlspecialchars($optionLabel, ENT_QUOTES) ?>
Neuen Ort anlegen
Neue Veranstaltung anlegen
>
Kategorie
= htmlspecialchars($categoryInputValue !== '' ? $categoryInputValue : 'Keine Kategorie ausgewählt.', ENT_QUOTES) ?>
>
Gültig bis
>
Wiederholung
>Einmalig
>Täglich
>Wöchentlich
Begründung für die Änderungsanfrage
Die Änderung wird erst nach Prüfung durch einen Admin freigegeben.
Dieser Vorschlag ist noch nicht veröffentlicht und kann direkt aktualisiert werden.
Neue Orte und Veranstaltungen werden erst nach Prüfung durch einen Admin freigegeben.
Adresse suchen
📍 Aktuellen Standort
>
Adresse
= htmlspecialchars($eventAddressInfoValue !== '' ? $eventAddressInfoValue : 'Kein Ort ausgewählt.', ENT_QUOTES) ?>
>
Karte
📍 Aktuellen Standort auf Karte zeigen
Kontaktangaben
Öffnungszeiten / Zeitfenster
Öffnungszeiten / Zeitfenster
Zeit hinzufügen
= htmlspecialchars($openingHoursValue, ENT_QUOTES) ?>
Weitere Optionen
Bild hinzufügen
Eintritt / Kosten
Preisregeln
Preisregel hinzufügen
Sonderkonditionen
= htmlspecialchars($specialConditionsValue, ENT_QUOTES) ?>
Abbrechen
= htmlspecialchars($submitLabel, ENT_QUOTES) ?>