This commit is contained in:
@@ -77,6 +77,7 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter. Kernbereiche sind l
|
|||||||
- Ziel: spätere Unterscheidung zwischen eigenem Event, Partner-Angebot, allgemeinem Ort und redaktionellem Termin
|
- Ziel: spätere Unterscheidung zwischen eigenem Event, Partner-Angebot, allgemeinem Ort und redaktionellem Termin
|
||||||
- In der Admin-Freigabe werden aktivierte Ortsanbieter serverseitig parallel durchsucht: OpenStreetMap/Nominatim, Google Places und Azure Maps. Ein Admin wählt einen Treffer gezielt aus; je Ort können Verknüpfungen mehrerer Anbieter gespeichert werden. Google-Gesamtwertung und Bewertungsanzahl werden erst nach der ausgewählten Google-Verknüpfung geladen.
|
- In der Admin-Freigabe werden aktivierte Ortsanbieter serverseitig parallel durchsucht: OpenStreetMap/Nominatim, Google Places und Azure Maps. Ein Admin wählt einen Treffer gezielt aus; je Ort können Verknüpfungen mehrerer Anbieter gespeichert werden. Google-Gesamtwertung und Bewertungsanzahl werden erst nach der ausgewählten Google-Verknüpfung geladen.
|
||||||
- Die Admin-Ansicht für Orte und Veranstaltungen hat die Unterpunkte `Freigaben`, `Bestehende Ortsbearbeitung` mit Suchfeld und `Fehlende Angaben`. Letzterer filtert veröffentlichte Einträge nach Verknüpfungen, die bei mindestens einem aktuell aktivierten Anbieter fehlen.
|
- Die Admin-Ansicht für Orte und Veranstaltungen hat die Unterpunkte `Freigaben`, `Bestehende Ortsbearbeitung` mit Suchfeld und `Fehlende Angaben`. Letzterer filtert veröffentlichte Einträge nach Verknüpfungen, die bei mindestens einem aktuell aktivierten Anbieter fehlen.
|
||||||
|
- Nach dem Übernehmen eines externen Treffers wird dessen temporäre Trefferliste entfernt. Der Bearbeiten-Button ist in jeder dieser Unteransichten zur Prüfung von Name und Adresse verfügbar.
|
||||||
- Eine manuelle Admin-Suche überträgt Name und Adressdaten des offenen Eintrags an die aktivierten Ortsanbieter; Datenschutz- und Consent-Hinweise müssen vor dem produktiven Aktivieren geprüft werden.
|
- Eine manuelle Admin-Suche überträgt Name und Adressdaten des offenen Eintrags an die aktivierten Ortsanbieter; Datenschutz- und Consent-Hinweise müssen vor dem produktiven Aktivieren geprüft werden.
|
||||||
|
|
||||||
## Vorgemerkte To-dos
|
## Vorgemerkte To-dos
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ Papa-Kind-Treff is a PHP-based platform for fathers. Core areas are local events
|
|||||||
- Goal: later distinguish between own event, partner offer, general place, and editorial event entry
|
- Goal: later distinguish between own event, partner offer, general place, and editorial event entry
|
||||||
- In admin approvals, enabled place providers are searched server-side in parallel: OpenStreetMap/Nominatim, Google Places, and Azure Maps. An admin deliberately selects a match; links to multiple providers can be saved for one place. Google aggregate rating and rating count are loaded only after the selected Google link.
|
- In admin approvals, enabled place providers are searched server-side in parallel: OpenStreetMap/Nominatim, Google Places, and Azure Maps. An admin deliberately selects a match; links to multiple providers can be saved for one place. Google aggregate rating and rating count are loaded only after the selected Google link.
|
||||||
- The admin view for places and events has the sub-items `Approvals`, `Existing place editing` with a search field, and `Missing information`. The latter filters published entries by links missing from at least one currently enabled provider.
|
- The admin view for places and events has the sub-items `Approvals`, `Existing place editing` with a search field, and `Missing information`. The latter filters published entries by links missing from at least one currently enabled provider.
|
||||||
|
- After an external match is accepted, its temporary result list is removed. The Edit button is available in each of these subviews to check the name and address.
|
||||||
- A manual admin lookup sends the open entry's name and address data to enabled place providers; privacy and consent notices must be reviewed before enabling this in production.
|
- A manual admin lookup sends the open entry's name and address data to enabled place providers; privacy and consent notices must be reviewed before enabling this in production.
|
||||||
|
|
||||||
## Deferred To-dos
|
## Deferred To-dos
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter mit Fokus auf:
|
|||||||
- Vorschläge für neue Orte und Veranstaltungen werden schon vor der Freigabe als mögliche Ortsauswahl für Events berücksichtigt, solange sie nicht abgelehnt oder archiviert wurden
|
- Vorschläge für neue Orte und Veranstaltungen werden schon vor der Freigabe als mögliche Ortsauswahl für Events berücksichtigt, solange sie nicht abgelehnt oder archiviert wurden
|
||||||
- In der Admin-Freigabe können berechtigte Nutzer offene Orte und Veranstaltungen serverseitig bei aktivierten Anbietern (OpenStreetMap, Google Places, Azure Maps) suchen und einen Treffer gezielt verknüpfen; Google-Gesamtwertung und Bewertungsanzahl werden erst nach einer bewussten Google-Verknüpfung geladen.
|
- In der Admin-Freigabe können berechtigte Nutzer offene Orte und Veranstaltungen serverseitig bei aktivierten Anbietern (OpenStreetMap, Google Places, Azure Maps) suchen und einen Treffer gezielt verknüpfen; Google-Gesamtwertung und Bewertungsanzahl werden erst nach einer bewussten Google-Verknüpfung geladen.
|
||||||
- Die Admin-Ansicht für Orte und Veranstaltungen gliedert sich in `Freigaben`, `Bestehende Ortsbearbeitung` mit Suchfeld und `Fehlende Angaben`; Letztere listet veröffentlichte Einträge ohne Verknüpfung zu mindestens einem aktuell aktivierten Anbieter.
|
- Die Admin-Ansicht für Orte und Veranstaltungen gliedert sich in `Freigaben`, `Bestehende Ortsbearbeitung` mit Suchfeld und `Fehlende Angaben`; Letztere listet veröffentlichte Einträge ohne Verknüpfung zu mindestens einem aktuell aktivierten Anbieter.
|
||||||
|
- Nach dem Übernehmen eines externen Treffers wird dessen temporäre Trefferliste entfernt. Der Button `Bearbeiten` steht in allen drei Admin-Unteransichten zur Prüfung von Name und Adresse bereit.
|
||||||
- Für später vorgemerkt: direkte Kalender-Anbindung großer Anbieter wie Google und Microsoft/Outlook per OAuth, zusätzlich zum bestehenden ICS-Feed
|
- Für später vorgemerkt: direkte Kalender-Anbindung großer Anbieter wie Google und Microsoft/Outlook per OAuth, zusätzlich zum bestehenden ICS-Feed
|
||||||
- Interne Projektdateien und das Datenbankschema liegen nicht mehr im Root, sondern unter `Internal/`
|
- Interne Projektdateien und das Datenbankschema liegen nicht mehr im Root, sondern unter `Internal/`
|
||||||
|
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ if ($isAdminArea && !empty($canManageSystemSettings)) {
|
|||||||
<?php if (!empty($request['provider_links'])): ?><p class="muted small">Verknüpft: <?= htmlspecialchars(implode(', ', array_map('strtoupper', array_keys((array)$request['provider_links']))), ENT_QUOTES) ?><?= $request['rating_value'] !== null ? ' · Google: ' . htmlspecialchars((string)$request['rating_value'], ENT_QUOTES) . ' / 5 (' . (int)$request['rating_count'] . ')' : '' ?></p><?php endif; ?>
|
<?php if (!empty($request['provider_links'])): ?><p class="muted small">Verknüpft: <?= htmlspecialchars(implode(', ', array_map('strtoupper', array_keys((array)$request['provider_links']))), ENT_QUOTES) ?><?= $request['rating_value'] !== null ? ' · Google: ' . htmlspecialchars((string)$request['rating_value'], ENT_QUOTES) . ' / 5 (' . (int)$request['rating_count'] . ')' : '' ?></p><?php endif; ?>
|
||||||
<?php if (!empty($request['missing_providers'])): ?><p class="muted small">Fehlt: <?= htmlspecialchars(implode(', ', array_map('strtoupper', (array)$request['missing_providers'])), ENT_QUOTES) ?></p><?php endif; ?>
|
<?php if (!empty($request['missing_providers'])): ?><p class="muted small">Fehlt: <?= htmlspecialchars(implode(', ', array_map('strtoupper', (array)$request['missing_providers'])), ENT_QUOTES) ?></p><?php endif; ?>
|
||||||
<div class="flex gap-12" style="flex-wrap:wrap; margin:14px 0;">
|
<div class="flex gap-12" style="flex-wrap:wrap; margin:14px 0;">
|
||||||
<?php if (($listingReviewTab ?? 'approvals') === 'approvals'): ?><a class="btn ghost" href="/dashboard?area=admin&section=listing-review&listing_tab=approvals&edit_listing=<?= (int)$request['listing_id'] ?>">Bearbeiten</a><?php endif; ?>
|
<a class="btn ghost" href="/dashboard?area=admin&section=listing-review&listing_tab=<?= htmlspecialchars((string)($listingReviewTab ?? 'approvals'), ENT_QUOTES) ?>&edit_listing=<?= (int)$request['listing_id'] ?>">Bearbeiten</a>
|
||||||
<form method="post"><input type="hidden" name="action" value="place_provider_search"><input type="hidden" name="listing_id" value="<?= (int)$request['listing_id'] ?>"><button class="btn ghost" type="submit">Externe Ortsdaten suchen</button></form>
|
<form method="post"><input type="hidden" name="action" value="place_provider_search"><input type="hidden" name="listing_id" value="<?= (int)$request['listing_id'] ?>"><button class="btn ghost" type="submit">Externe Ortsdaten suchen</button></form>
|
||||||
</div>
|
</div>
|
||||||
<?php $providerSearch = $placeProviderSearches[(int)$request['listing_id']] ?? null; ?>
|
<?php $providerSearch = $placeProviderSearches[(int)$request['listing_id']] ?? null; ?>
|
||||||
@@ -302,7 +302,7 @@ if ($isAdminArea && !empty($canManageSystemSettings)) {
|
|||||||
<div class="card stack gap-10" style="padding:14px; margin:14px 0;">
|
<div class="card stack gap-10" style="padding:14px; margin:14px 0;">
|
||||||
<strong>Treffer für <?= htmlspecialchars((string)($providerSearch['query'] ?? ''), ENT_QUOTES) ?></strong>
|
<strong>Treffer für <?= htmlspecialchars((string)($providerSearch['query'] ?? ''), ENT_QUOTES) ?></strong>
|
||||||
<?php foreach ((array)($providerSearch['notices'] ?? []) as $notice): ?><p class="muted small" style="margin:0;"><?= htmlspecialchars((string)$notice, ENT_QUOTES) ?></p><?php endforeach; ?>
|
<?php foreach ((array)($providerSearch['notices'] ?? []) as $notice): ?><p class="muted small" style="margin:0;"><?= htmlspecialchars((string)$notice, ENT_QUOTES) ?></p><?php endforeach; ?>
|
||||||
<?php if (empty($providerSearch['results'])): ?><p class="muted small" style="margin:0;">Keine Treffer. Adresse oder Name bitte über „Bearbeiten“ prüfen.</p><?php endif; ?>
|
<?php if (empty($providerSearch['results'])): ?><p class="muted small" style="margin:0;">Keine Treffer. Adresse oder Name über den Button „Bearbeiten“ oben prüfen.</p><?php endif; ?>
|
||||||
<?php foreach ((array)($providerSearch['results'] ?? []) as $resultIndex => $result): ?>
|
<?php foreach ((array)($providerSearch['results'] ?? []) as $resultIndex => $result): ?>
|
||||||
<div class="card" style="padding:12px;">
|
<div class="card" style="padding:12px;">
|
||||||
<div class="flex gap-12" style="align-items:flex-start; justify-content:space-between; flex-wrap:wrap;">
|
<div class="flex gap-12" style="align-items:flex-start; justify-content:space-between; flex-wrap:wrap;">
|
||||||
|
|||||||
@@ -770,6 +770,7 @@ final class AccountPages
|
|||||||
'linked' => true,
|
'linked' => true,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
unset($_SESSION['place_provider_search_results'][$listingId]);
|
||||||
$info = 'Externer Ortstreffer wurde verknüpft.';
|
$info = 'Externer Ortstreffer wurde verknüpft.';
|
||||||
} elseif ($action === 'application_decide') {
|
} elseif ($action === 'application_decide') {
|
||||||
if (!$canManageSystemSettings || !$communityAccess) {
|
if (!$canManageSystemSettings || !$communityAccess) {
|
||||||
|
|||||||
Reference in New Issue
Block a user