From fa40ca1a602fc09bf32bdd85dc448cf672a0522a Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Thu, 6 Aug 2026 01:17:05 +0200 Subject: [PATCH] XyX --- Internal/de/PROJECT_CONTEXT.md | 15 ++- Internal/de/PROJECT_STRUCTURE.md | 8 +- Internal/de/README.md | 10 +- Internal/en/PROJECT_CONTEXT.md | 15 ++- Internal/en/PROJECT_STRUCTURE.md | 8 +- Internal/en/README.md | 10 +- README.md | 10 +- partials/landing/account/dashboard.php | 138 +++++++++++++++++-------- src/App/AccountPages.php | 32 +++++- 9 files changed, 165 insertions(+), 81 deletions(-) diff --git a/Internal/de/PROJECT_CONTEXT.md b/Internal/de/PROJECT_CONTEXT.md index fdb8767..08b17ec 100644 --- a/Internal/de/PROJECT_CONTEXT.md +++ b/Internal/de/PROJECT_CONTEXT.md @@ -1,6 +1,6 @@ # Papa-Kind-Treff – Projektkontext -Stand: 2026-08-04 +Stand: 2026-08-05 ## Kurzbeschreibung Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter. Kernbereiche sind lokale Events, Termine und Treffen, ein Community-Forum, Mitgliederprofile mit optionalen Kinderinfos und ein Moderations-/Adminbereich. @@ -16,17 +16,16 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter. Kernbereiche sind l - Seiten-Admins erhalten eine eigene System-Sektion für globale Betriebs- und Diensteschalter. ## Konto / Mitgliederbereich -- Profil-Menü aktuell: `Profil`, `Kinder`, `Events`, `Community`, `Einstellungen`, `Abmelden` +- Profil-Menü aktuell: `Profil`, `Kinder`, `Events`, `Ausflugsziele`, `Community`, `Einstellungen`, `Abmelden` - Kinder können angelegt, bearbeitet und gelöscht werden. - Wenn ein Geburtsdatum gesetzt ist, wird das Alter automatisch berechnet und später bei Bedarf aktualisiert. - Die Konto-E-Mail wird app-seitig verschlüsselt gespeichert und über einen separaten HMAC-Lookup-Hash adressiert. - Profiladresse kann per Suche oder Browser-Standort übernommen werden. -- Im Bereich `Events` gibt es jetzt drei Eintragstypen: eigenes Event, Ort und sonstige Veranstaltung. -- Die Eingabe im Bereich `Events` soll so einfach wie möglich bleiben und zeigt deshalb zuerst nur Pflichtangaben. -- Kategorien werden im Mitgliederbereich nicht mehr per Select gewählt, sondern per Sucheingabe mit bestehenden Vorschlägen und automatischer Neuanlage gepflegt. -- Eigene Events unterstützen Kategorie, optionales Bild, Ja/Nein-Angabe `Mit Kindern`, optionale Platzzahl und Sichtbarkeit. -- `Ort` nutzt die gleiche Adresslogik wie das Profil, blendet den Event-Termin aus und erlaubt stattdessen flexible Öffnungs-/Zeitfenster, optionale Kontaktangaben und flexible Preisregeln. -- `Sonstige Veranstaltung` nutzt ebenfalls die Profil-Adresslogik, unterstützt Wiederholungen, ein Pflichtfeld `Gültig bis`, flexible Preisregeln, Bild-Upload und die Angabe `Mit Kindern`. +- Der Bereich `Events` ist wieder auf echte eigene Events und Event-Teilnahmen begrenzt. +- Orte und Veranstaltungen als Ausflugsziele sind vorerst in einen separaten Mitgliederbereichspunkt `Ausflugsziele` verschoben. +- Die Eingabe im Bereich `Events` soll so einfach wie möglich bleiben und zeigt deshalb nur die für echte Termine relevanten Felder. +- Kategorien werden im Mitgliederbereich per Sucheingabe mit bestehenden Vorschlägen und automatischer Neuanlage gepflegt. +- Eigene Events unterstützen Kategorie, optionales Bild, Ja/Nein-Angabe `Mit Kindern`, optionale Platzzahl und direkte Karten-/Adress-Synchronisierung. ## Technischer Rahmen - eigener Front-Controller in `public/index.php` diff --git a/Internal/de/PROJECT_STRUCTURE.md b/Internal/de/PROJECT_STRUCTURE.md index 6a2bc99..56cdb85 100644 --- a/Internal/de/PROJECT_STRUCTURE.md +++ b/Internal/de/PROJECT_STRUCTURE.md @@ -1,6 +1,6 @@ # Papa-Kind-Treff – Projektstruktur -Stand: 2026-08-04 +Stand: 2026-08-05 ## Projektordner - `config/`: Konfigurationen, inklusive `prod/` und `staging/` @@ -14,12 +14,12 @@ Stand: 2026-08-04 ## Aktuelle Strukturhinweise - Avatar-Verwaltung: `src/App/Avatar/AvatarManager.php` - aktive Styles: `src/App/Avatar/Lorelei.php`, `src/App/Avatar/Croodles.php` -- Profil-/Kinder-/Event-Logik im Mitgliederbereich: `partials/landing/account/dashboard.php` +- Profil-/Kinder-/Event-/Ausflugsziel-Logik im Mitgliederbereich: `partials/landing/account/dashboard.php` - Consent- und rechtliche Texte: `public/page/datenschutz.php` - System-Einstellungen: `src/App/SystemSettings.php` - neue Listing-/Ort-Basis: `src/App/ListingCatalog.php` -- UI für Eintragstyp-Auswahl im Mitgliederbereich: `partials/landing/account/dashboard.php` -- Preis-, Wiederholungs-, Bild- und Ortseingabe für neue Listing-Typen: `partials/landing/account/dashboard.php` plus Speicherung in `src/App/ListingCatalog.php` +- UI für getrennte Bereiche `Events` und `Ausflugsziele` im Mitgliederbereich: `partials/landing/account/dashboard.php` +- Preis-, Bild- und Ortseingabe für Ausflugsziele sowie reduzierte Event-Maske: `partials/landing/account/dashboard.php` plus Speicherung in `src/App/ListingCatalog.php` - Legacy-Eigen-Events wurden erweitert in `src/App/AccountPages.php` und `schema.sql` um Kategorie- und Bildfelder - Kategorien-Prüfung und Zusammenführung für Seiten-Admins liegen ebenfalls in `partials/landing/account/dashboard.php` mit Logik in `src/App/ListingCatalog.php` diff --git a/Internal/de/README.md b/Internal/de/README.md index fc3f9e7..4c0f5c4 100644 --- a/Internal/de/README.md +++ b/Internal/de/README.md @@ -1,6 +1,6 @@ # Papa-Kind-Treff -Stand: 2026-08-04 +Stand: 2026-08-05 Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter mit Fokus auf lokale Events, Termine und Treffen, Community-Austausch und einen geschützten Mitgliederbereich. @@ -16,15 +16,15 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter mit Fokus auf lokale - Community-Admin-Bereich für Bewerbungen, Meldungen, Rollen und Migration - standortbasierte Sortierung für die neuesten Events - Mitgliederbereich mit linker Bereichsnavigation -- Profil-Menü mit `Profil`, `Kinder`, `Events`, `Community`, `Einstellungen` +- Profil-Menü mit `Profil`, `Kinder`, `Events`, `Ausflugsziele`, `Community`, `Einstellungen` - Konto-E-Mails sowie sensible Profilfelder werden app-seitig verschlüsselt gespeichert - Kinder können angelegt, bearbeitet und gelöscht werden - Profiladresse mit verschlüsselter Straße/Hausnummer, Adresssuche, Browser-Übernahme und Validierung - System-Sektion für Seiten-Admins mit Wartungs- und Diensteschaltern - neue Datenbasis für ein späteres Termin-, Ort- und Veranstaltungssystem angelegt -- Mitgliederbereich `Events` unterstützt jetzt drei Anlagetypen: `Eigenes Event`, `Ort`, `Sonstige Veranstaltung` -- Eigene Events haben jetzt Kategorie, optionales Bild, klare Kinderangabe, optionale Platzzahl und serverseitig validierte Adressdaten -- Orte und sonstige Veranstaltungen haben jetzt eine angepasste Eingabemaske mit Ortssuche, Browser-Adressübernahme, serverseitiger Adressvalidierung, flexiblen Preisregeln, flexiblen Öffnungs-/Zeitfenstern und Bild-Upload +- Mitgliederbereich `Events` ist wieder auf echte eigene Events und Event-Teilnahmen fokussiert +- Eigene Events haben jetzt Kategorie, optionales Bild, klare Kinderangabe, optionale Platzzahl und eine direktere Karten-/Adress-Synchronisierung +- Orte und sonstige Veranstaltungen wurden vorerst in einen separaten Bereich `Ausflugsziele` verschoben - Die Eingabemasken sind jetzt progressiv aufgebaut: erst Pflichtangaben, optionale Daten in einklappbaren Bereichen - Kategorien laufen jetzt über eine Sucheingabe mit bestehenden Vorschlägen; neue Kategorien werden automatisch angelegt und können im Systembereich von Seiten-Admins zusammengeführt werden diff --git a/Internal/en/PROJECT_CONTEXT.md b/Internal/en/PROJECT_CONTEXT.md index 2e6475f..3431ae6 100644 --- a/Internal/en/PROJECT_CONTEXT.md +++ b/Internal/en/PROJECT_CONTEXT.md @@ -1,6 +1,6 @@ # Papa-Kind-Treff – Project Context -Updated: 2026-08-04 +Updated: 2026-08-05 ## Summary Papa-Kind-Treff is a PHP-based platform for fathers. Core areas are local events, appointments, and meetups, a community forum, member profiles with optional child information, and a moderation/admin area. @@ -16,17 +16,16 @@ Papa-Kind-Treff is a PHP-based platform for fathers. Core areas are local events - Site admins get a dedicated system section for global operating and service flags. ## Account / Member Area -- Profile menu currently contains `Profile`, `Children`, `Events`, `Community`, `Settings`, `Logout`. +- Profile menu currently contains `Profile`, `Children`, `Events`, `Outings`, `Community`, `Settings`, `Logout`. - Children can be created, edited, and deleted. - If a birth date is set, age is calculated automatically and updated later when needed. - Account email is encrypted application-side and addressed through a separate HMAC lookup hash. - Profile address can be completed via address search or browser-based location import. -- The `Events` area now distinguishes between own events, places, and other time-limited event entries. -- The `Events` input flow should stay as simple as possible and therefore shows required fields first. -- Categories in the member area are no longer chosen via select only, but via a search input with existing suggestions and automatic creation when needed. -- Own events support category, optional image, a clear `with children` yes/no field, optional capacity, and visibility. -- `Place` uses the same address flow as the profile, hides the event date, and instead supports flexible opening/time slots, optional contact data, and flexible pricing rules. -- `Other Event` also uses the profile-style address flow, supports recurrence, a required `valid until` field, flexible pricing rules, image upload, and a `with children` flag. +- The `Events` area is limited again to real own events and event participations. +- Places and event-like outing targets were moved for now into a separate member-area section `Outings`. +- The `Events` input flow should stay as simple as possible and therefore only shows fields relevant for real scheduled events. +- Categories in the member area are handled via a search input with existing suggestions and automatic creation when needed. +- Own events support category, optional image, a clear `with children` yes/no field, optional capacity, and direct map/address synchronization. ## Technical Frame - custom front controller in `public/index.php` diff --git a/Internal/en/PROJECT_STRUCTURE.md b/Internal/en/PROJECT_STRUCTURE.md index 72c7a10..4fa6843 100644 --- a/Internal/en/PROJECT_STRUCTURE.md +++ b/Internal/en/PROJECT_STRUCTURE.md @@ -1,6 +1,6 @@ # Papa-Kind-Treff – Project Structure -Updated: 2026-08-04 +Updated: 2026-08-05 ## Main Directories - `config/`: configuration, including `prod/` and `staging/` @@ -14,12 +14,12 @@ Updated: 2026-08-04 ## Current Structure Notes - avatar management: `src/App/Avatar/AvatarManager.php` - active avatar styles: `src/App/Avatar/Lorelei.php`, `src/App/Avatar/Croodles.php` -- profile/children/event logic inside member area: `partials/landing/account/dashboard.php` +- profile/children/event/outing logic inside member area: `partials/landing/account/dashboard.php` - consent and legal texts: `public/page/datenschutz.php` - system settings: `src/App/SystemSettings.php` - new listing/place base: `src/App/ListingCatalog.php` -- entry type selector UI in member area: `partials/landing/account/dashboard.php` -- pricing, recurrence, image upload, and place/address input for new listing types: `partials/landing/account/dashboard.php` with persistence in `src/App/ListingCatalog.php` +- separated `Events` and `Outings` UI in member area: `partials/landing/account/dashboard.php` +- pricing, image upload, and place/address input for outings plus a reduced own-event form: `partials/landing/account/dashboard.php` with persistence in `src/App/ListingCatalog.php` - legacy own events were extended in `src/App/AccountPages.php` and `schema.sql` with category and image fields ## Documentation Rule diff --git a/Internal/en/README.md b/Internal/en/README.md index b8cfa01..d70b974 100644 --- a/Internal/en/README.md +++ b/Internal/en/README.md @@ -1,6 +1,6 @@ # Papa-Kind-Treff -Updated: 2026-08-04 +Updated: 2026-08-05 Papa-Kind-Treff is a PHP-based platform for fathers focused on local events, appointments, and meetups, community exchange, and a protected member area. @@ -16,15 +16,15 @@ Papa-Kind-Treff is a PHP-based platform for fathers focused on local events, app - community admin area for applications, reports, roles, and migrations - location-based ordering for the newest events - member area with left-side section navigation -- profile menu with `Profile`, `Children`, `Events`, `Community`, `Settings` +- profile menu with `Profile`, `Children`, `Events`, `Outings`, `Community`, `Settings` - account emails and sensitive profile fields are stored encrypted application-side - children can be created, edited, and deleted - profile address supports encrypted street/house number, address search, browser import, and validation - system section for site admins with maintenance and service toggles - new data foundation prepared for a broader event, place, and listing system -- member area `Events` now supports three creation types: `Own Event`, `Place`, and `Other Event` -- own events now include category, optional image, explicit child suitability, optional capacity, and server-side validated address data -- places and other events now use adaptive forms with place lookup, browser address pickup, server-side address validation, flexible pricing rules, flexible opening/time slots, and image upload +- member area `Events` is now limited again to real own events and event participations +- own events now include category, optional image, explicit child suitability, optional capacity, and more direct map/address synchronization +- places and other events were moved for now into a separate member-area section `Outings` - the member-area entry forms now follow a progressive approach: required fields first, optional data inside collapsible sections - categories now use a search input with existing suggestions; new categories are created automatically and can be merged by site admins in the system area diff --git a/README.md b/README.md index 495df06..061af62 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Papa-Kind-Treff – Start-Doku -Stand: 2026-08-04 +Stand: 2026-08-05 Diese Datei ist die zentrale Start-Doku für neue Chats und den schnellen Projekteinstieg. @@ -33,12 +33,12 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter mit Fokus auf: - Primärbegriff im Produkt: `Events` - `Termine` und `Treffen` ergänzend in SEO- und Erklärungstexten - Hauptnavigation aktuell: `Home`, `Event Suche`, `Community` -- Profil-Menü aktuell: `Profil`, `Kinder`, `Events`, `Community`, `Einstellungen`, `Abmelden` +- Profil-Menü aktuell: `Profil`, `Kinder`, `Events`, `Ausflugsziele`, `Community`, `Einstellungen`, `Abmelden` - neue interne Grundstruktur: `listing_places`, `listings`, `listing_occurrences`, `listing_prices`, `listing_benefits` - Seiten-Admins haben zusätzlich eine System-Sektion für globale Wartungs- und Diensteschalter -- Im Mitgliederbereich unter `Events` können Nutzer jetzt zwischen `Eigenes Event`, `Ort` und `sonstiger Veranstaltung` unterscheiden -- Für Orte und sonstige Veranstaltungen gibt es jetzt typabhängige Masken mit Ortssuche, Browser-Adressübernahme, Adressprüfung, flexiblen Preisregeln, flexiblen Öffnungs-/Zeitfenstern und Bild-Upload -- Eigene Events unterstützen jetzt zusätzlich Kategorie, Bild-Upload, klare Kinderangabe und optionale Platzzahl +- Im Mitgliederbereich ist `Events` jetzt wieder auf echte eigene Events und Event-Teilnahmen beschränkt +- Orte und sonstige Veranstaltungen laufen jetzt separat unter `Ausflugsziele` +- Eigene Events unterstützen aktuell Kategorie, Bild-Upload, klare Kinderangabe, optionale Platzzahl und direkte Karten-/Adress-Synchronisierung - Die Eingabe im Mitgliederbereich ist jetzt bewusst vereinfacht: zuerst nur Pflichtangaben, optionale Angaben in einklappbaren Bereichen - Kategorien werden jetzt über eine Sucheingabe mit bestehenden Vorschlägen gepflegt; neue Kategorien werden automatisch angelegt und sind für Seiten-Admins im Systembereich zusammenführbar diff --git a/partials/landing/account/dashboard.php b/partials/landing/account/dashboard.php index dbb95a5..f89f6b9 100755 --- a/partials/landing/account/dashboard.php +++ b/partials/landing/account/dashboard.php @@ -9,7 +9,7 @@ $dashboardUserId = (int)($_SESSION['user_id'] ?? 0); $editingEvent = isset($editEvent) && $editEvent !== null; $editingListing = isset($editListing) && $editListing !== null; $editing = $editingEvent || $editingListing; -$currentEntryKind = $editingListing ? (string)($editListing['listing_type'] ?? 'editorial_event') : 'event'; +$currentEntryKind = $editingListing ? (string)($editListing['listing_type'] ?? 'editorial_event') : (($section ?? 'events') === 'places' ? 'place' : 'event'); $actionEvent = $editing ? 'event_update' : 'event_add'; $startVal = ''; if ($editingEvent && !empty($editEvent['starts_at'])) { @@ -18,8 +18,8 @@ if ($editingEvent && !empty($editEvent['starts_at'])) { $startVal = date('Y-m-d', strtotime((string)$editListing['starts_at'])); } $withChildrenValue = $editingEvent ? (((int)($editEvent['allow_kids'] ?? 1)) === 1 ? 'yes' : 'no') : (($editingListing && $currentEntryKind === 'editorial_event' && !empty($editListing['supports_registration'])) ? 'yes' : 'yes'); -$eventTitle = $editingEvent ? 'Event bearbeiten' : ($editingListing ? ($currentEntryKind === 'place' ? 'Ort bearbeiten' : 'Veranstaltung bearbeiten') : 'Neuen Eintrag anlegen'); -$submitLabel = $editingEvent ? 'Event speichern' : ($editingListing ? ($currentEntryKind === 'place' ? 'Ort speichern' : 'Veranstaltung speichern') : 'Eintrag anlegen'); +$eventTitle = $editingEvent ? 'Event bearbeiten' : ($editingListing ? ($currentEntryKind === 'place' ? 'Ort bearbeiten' : 'Veranstaltung bearbeiten') : ((($section ?? 'events') === 'places') ? 'Ausflugsziel anlegen' : 'Neues Event anlegen')); +$submitLabel = $editingEvent ? 'Event speichern' : ($editingListing ? ($currentEntryKind === 'place' ? 'Ort speichern' : 'Veranstaltung speichern') : ((($section ?? 'events') === 'places') ? 'Ausflugsziel anlegen' : 'Event anlegen')); $titleValue = $editingEvent ? (string)($editEvent['title'] ?? '') : (string)($editListing['title'] ?? ''); $teaserValue = $editingEvent ? (string)($editEvent['teaser_public'] ?? '') : (string)($editListing['teaser_public'] ?? ''); $descriptionValue = $editingEvent ? (string)($editEvent['description'] ?? '') : (string)($editListing['description'] ?? ''); @@ -87,9 +87,12 @@ $sectionLinks = [ 'profile' => 'Profil', 'children' => 'Kinder', 'events' => 'Events', + 'places' => 'Ausflugsziele', 'community' => 'Community', 'settings' => 'Einstellungen', ]; + $showEventTypeChoice = !$editing && (($section ?? 'events') === 'places'); + $modalSectionTarget = ($editingListing || ($section ?? '') === 'places') ? 'places' : 'events'; if (!empty($canManageSystemSettings)) { $sectionLinks['system'] = 'System'; } @@ -275,12 +278,12 @@ if (!empty($canManageSystemSettings)) {
+ + + +
+ +