From cbecbef83053404e3c993dc32dc6b8a6920786f3 Mon Sep 17 00:00:00 2001 From: Lars Gebhardt-Kusche Date: Wed, 22 Jul 2026 22:19:31 +0200 Subject: [PATCH] adasd --- .projectstructure.txt | 7 +- PROJECT_CONTEXT.md | 6 +- README.md | 5 +- partials/landing/account/dashboard.php | 487 ++++++++++++++++--------- partials/landing/search/search.php | 77 +++- partials/structure/nav.php | 14 +- public/assets/css/app.css | 27 +- src/App/AccountPages.php | 21 +- 8 files changed, 450 insertions(+), 194 deletions(-) diff --git a/.projectstructure.txt b/.projectstructure.txt index 60bc0ea..8edc5e1 100644 --- a/.projectstructure.txt +++ b/.projectstructure.txt @@ -61,17 +61,18 @@ Stand: 2026-07-22 6. Aktueller Funktionsstand - Startseite mit Hero, Suche, neueste Treffen, Community-Vorschau, Mitgliederbereich. - Hauptnavigation aktuell reduziert auf `Home`, `Suche`, `Community`. -- Für eingeloggte Nutzer gibt es rechts ein Profil-Dropdown mit `Übersicht`, `Mitgliederbereich`, `Abmelden`. +- Für eingeloggte Nutzer gibt es rechts ein Profil-Dropdown mit Direktlinks zu `Profil`, `Kinder`, `Termine`, `Community`, `Einstellungen`, `Abmelden`. - Kein eigener Top-Level-Punkt `Termine`; Event-Fokus liegt derzeit auf Startseite und Suche. - Community mit Kategorien, Boards, Thread-Liste, Thread-Ansicht, Rollen-/Moderationslogik. -- Dashboard mit Profil, Kinder, eigene Events, Community-Status. +- Mitgliederbereich als Bereichslayout mit linker Navigation und separaten Seiten für Profil, Kinder, Termine, Community und Einstellungen. - Community-Admin-Bereich für Bewerbungen, Meldungen, Rollen und Migration. - Impressum, Datenschutz-&-Cookies-Seite und Über-uns vorhanden. - Standortsortierung auf der Startseite für Treffen in der Nähe. -- Standortpräferenz im Profil: +- Standortpräferenz im Einstellungsbereich: - `disabled` - `prompt` - `enabled` +- Im Einstellungsbereich stehen zusätzlich Browser-Hinweise zur Standortfreigabe sowie der Einstieg in die Consent-Verwaltung. - Consent-Manager: - notwendige Cookies immer aktiv - `analytics` für Matomo diff --git a/PROJECT_CONTEXT.md b/PROJECT_CONTEXT.md index 7d05a4a..f20463a 100644 --- a/PROJECT_CONTEXT.md +++ b/PROJECT_CONTEXT.md @@ -22,7 +22,8 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter. Kernbereiche sind l ## Navigation / Konto - Eingeloggte Nutzer sehen rechts ein Profil-Menü statt einzelner `Dashboard`-/`Logout`-Buttons. -- Das Profil-Menü enthält aktuell `Übersicht`, `Mitgliederbereich`, `Abmelden`. +- Das Profil-Menü enthält aktuell `Profil`, `Kinder`, `Termine`, `Community`, `Einstellungen`, `Abmelden`. +- Der Mitgliederbereich selbst ist als Layout mit linker Bereichsnavigation aufgebaut. - Debug ist kein Menüpunkt und erscheint nur als Floating-Käfer für `site_admin` bei aktivem Debug-Modus. ## Community und Rechte @@ -40,10 +41,11 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter. Kernbereiche sind l - `external_services` - Matomo wird nur nach Analyse-Einwilligung geladen. - Externe Karten-/Standortdienste und lokale Standortspeicherung hängen an `external_services`. -- Zusätzlich gibt es eine Standortpräferenz im Profil: +- Zusätzlich gibt es eine Standortpräferenz im Bereich `Einstellungen`: - `disabled` - `prompt` - `enabled` +- Im Einstellungsbereich werden außerdem Browser-Grenzen erklärt: Die Browser-Freigabe selbst kann nicht von der Website gesetzt oder aufgehoben werden. - Es gibt eine eigene Seite `/datenschutz` für Datenschutz- und Cookie-Hinweise sowie einen Footer-Link auf die Consent-Einstellungen. ## Doku-Regel diff --git a/README.md b/README.md index f955ac0..f7b313a 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,11 @@ 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 - Impressum, Datenschutz-&-Cookies-Seite und Über-uns - standortbasierte Sortierung für die neuesten Treffen -- Standortpräferenz im Profil +- eigener Einstellungsbereich für Standortfreigabe, Browser-Hinweise und Consent-Verwaltung - Consent-Manager für Analyse und externe Dienste - Navigation aktuell mit `Home`, `Suche`, `Community` -- eingeloggte Nutzer sehen rechts ein Profil-Menü statt separater `Dashboard`-/`Logout`-Buttons +- eingeloggte Nutzer sehen rechts ein Profil-Menü mit Direktlinks zu `Profil`, `Kinder`, `Termine`, `Community`, `Einstellungen` +- der Mitgliederbereich ist als Seitenlayout mit linker Bereichsnavigation aufgebaut - Debug-Floating-Button nur für `site_admin` im Debug-Modus ## Technik diff --git a/partials/landing/account/dashboard.php b/partials/landing/account/dashboard.php index 01da9a9..219ccc4 100755 --- a/partials/landing/account/dashboard.php +++ b/partials/landing/account/dashboard.php @@ -6,6 +6,16 @@ $editing = isset($editEvent) && $editEvent !== null; $actionEvent = $editing ? 'event_update' : 'event_add'; $startVal = $editEvent ? date('Y-m-d\TH:i', strtotime((string)$editEvent['starts_at'])) : ''; $allowNoKidsChecked = $editEvent ? ((int)$editEvent['allow_kids'] === 0) : false; +$sectionLinks = [ + 'profile' => 'Profil', + 'children' => 'Kinder', + 'events' => 'Termine', + 'community' => 'Community', + 'settings' => 'Einstellungen', +]; +if (in_array('admin', $allowedSections ?? [], true)) { + $sectionLinks['admin'] = 'Admin'; +} ?>
@@ -29,177 +39,272 @@ $allowNoKidsChecked = $editEvent ? ((int)$editEvent['allow_kids'] === 0) : false
-
- -
-
Admin
-

Community-Verwaltung

-
- Zum Admin-Bereich + -
+ -
-
-
Deine Events
-
- -
- -

Keine zukünftigen Events angelegt.

- -
    - -
  • -
    -
    - - - Abgesagt - -
    - · · - · Anmeldungen: -
    -
    -
    - Bearbeiten - -
    - - - -
    - - -
    - - - -
    - - -
    +
  • - -
- -
- Vergangene Events anzeigen - -

Keine vergangenen Events.

- -
    - -
  • -
    -
    - - - Abgesagt - -
    - · · - · Anmeldungen: -
    -
    -
    -
  • - -
+
+ - + + + + + + + + + + + + + + + + + + + + +
@@ -263,15 +368,6 @@ $allowNoKidsChecked = $editEvent ? ((int)$editEvent['allow_kids'] === 0) : false
-
- - -

Bei aktiver Freigabe wird dein aktueller Standort für passende Treffen in deiner Nähe verwendet. Du kannst die Abfrage hier jederzeit wieder auf Nachfrage oder komplett aus stellen.

-
@@ -335,7 +431,7 @@ $allowNoKidsChecked = $editEvent ? ((int)$editEvent['allow_kids'] === 0) : false

-
+ @@ -600,4 +696,45 @@ $allowNoKidsChecked = $editEvent ? ((int)$editEvent['allow_kids'] === 0) : false if (modal) { modal.classList.add('open'); } })(); + + (function(){ + const statusText = document.getElementById('locationBrowserStatusText'); + const hintText = document.getElementById('locationBrowserStatusHint'); + const profilePreference = document.body?.dataset.locationPreference || 'prompt'; + + if (!statusText || !hintText) return; + + const profileLabels = { + disabled: 'Deaktiviert', + prompt: 'Beim nächsten Mal fragen', + enabled: 'Immer verwenden', + }; + + const render = (browserState) => { + if (browserState === 'granted') { + statusText.textContent = 'Der Browser erlaubt Standortzugriffe derzeit.'; + } else if (browserState === 'denied') { + statusText.textContent = 'Der Browser blockiert Standortzugriffe derzeit.'; + } else if (browserState === 'prompt') { + statusText.textContent = 'Der Browser fragt bei Standortzugriffen erneut nach.'; + } else { + statusText.textContent = 'Der Browserstatus konnte nicht eindeutig ermittelt werden.'; + } + + const profileState = profileLabels[profilePreference] || profileLabels.prompt; + hintText.textContent = `Website-Einstellung: ${profileState}. Wenn Browser und Website-Einstellung sich unterscheiden, gilt technisch zuerst die Browserfreigabe.`; + }; + + if (!('permissions' in navigator) || typeof navigator.permissions.query !== 'function') { + render('unknown'); + return; + } + + navigator.permissions.query({ name: 'geolocation' }).then((result) => { + render(result.state); + if (typeof result.onchange !== 'undefined') { + result.onchange = () => render(result.state); + } + }).catch(() => render('unknown')); + })(); diff --git a/partials/landing/search/search.php b/partials/landing/search/search.php index 64af175..bc8d840 100755 --- a/partials/landing/search/search.php +++ b/partials/landing/search/search.php @@ -116,6 +116,7 @@ if ($pdo && ($q !== '' || $loc !== '' || ($lat !== null && $lng !== null))) {