This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
Anweisung: Projektstruktur (Basis-Template) wie in „papa-kind-treff“
|
Anweisung: Projektstruktur (Basis-Template) wie in „papa-kind-treff“
|
||||||
|
|
||||||
Aktueller Projektstand
|
Aktueller Projektstand
|
||||||
- Papa-Kind-Treff nutzt im Mitgliederbereich DiceBear `lorelei` über einen internen API-Proxy mit lokalem Cache.
|
- Papa-Kind-Treff nutzt im Mitgliederbereich DiceBear `lorelei` direkt für externe SVG-Avatare.
|
||||||
- Relevante Logik liegt in `src/App/Avatar/Lorelei.php`.
|
- Relevante Logik liegt in `src/App/Avatar/Lorelei.php`.
|
||||||
- Der Avatar-Proxy liegt unter `public/page/api/avatar.php`.
|
- Die Avatar-Logik erzeugt direkte DiceBear-URLs; der frühere Proxy wird aktuell nicht mehr für die Auslieferung verwendet.
|
||||||
- Die visuelle Avatar-Konfiguration liegt im Dashboard-Modal unter `partials/landing/account/dashboard.php` und rendert Komponenten-Vorschauen live nach.
|
- Die visuelle Avatar-Konfiguration liegt im Dashboard-Modal unter `partials/landing/account/dashboard.php` und rendert Komponenten-Vorschauen live nach.
|
||||||
- Neue Grundvarianten werden im gleichen Modal als separates Auswahlraster eingeblendet und übernehmen die aktuell gewählten Lorelei-Komponenten.
|
- Neue Grundvarianten werden im gleichen Modal als separates Auswahlraster eingeblendet und übernehmen die aktuell gewählten Lorelei-Komponenten.
|
||||||
- Alte statische Avatar-Presets und frühere Layer-Assets sind entfernt; aktiv ist nur noch der Lorelei-Generator.
|
- Alte statische Avatar-Presets und frühere Layer-Assets sind entfernt; aktiv ist nur noch der Lorelei-Generator.
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter. Kernbereiche sind l
|
|||||||
- Die Community ist hierarchisch aufgebaut: Kategorien -> Boards -> Threads -> Posts.
|
- Die Community ist hierarchisch aufgebaut: Kategorien -> Boards -> Threads -> Posts.
|
||||||
- Moderation ist getrennt vom normalen Community-Frontend in einem eigenen Adminbereich.
|
- Moderation ist getrennt vom normalen Community-Frontend in einem eigenen Adminbereich.
|
||||||
- Standortfunktionen sind relevant für lokale Treffen und werden künftig weiter ausgebaut.
|
- Standortfunktionen sind relevant für lokale Treffen und werden künftig weiter ausgebaut.
|
||||||
- Profilbilder werden aktuell über DiceBear im Stil `lorelei` serverseitig erzeugt und lokal gecacht.
|
- Profilbilder werden aktuell über DiceBear im Stil `lorelei` direkt als externe SVG geladen.
|
||||||
- Der Avatar-Editor bietet aktuell visuelle Komponenten-Vorschauen statt reiner Text-Dropdowns.
|
- Der Avatar-Editor bietet aktuell visuelle Komponenten-Vorschauen statt reiner Text-Dropdowns.
|
||||||
- Frühere statische Preset-Avatar-Assets wurden entfernt; der aktuelle Stand nutzt nur noch den Generator mit Proxy/Cache.
|
- Frühere statische Preset-Avatar-Assets wurden entfernt; der aktuelle Stand nutzt nur noch den Generator mit direkter DiceBear-Auslieferung.
|
||||||
|
|
||||||
## Navigation / Konto
|
## Navigation / Konto
|
||||||
- Eingeloggte Nutzer sehen rechts ein Profil-Menü statt einzelner `Dashboard`-/`Logout`-Buttons.
|
- Eingeloggte Nutzer sehen rechts ein Profil-Menü statt einzelner `Dashboard`-/`Logout`-Buttons.
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Papa-Kind-Treff ist eine PHP-basierte Plattform für Väter mit Fokus auf lokale
|
|||||||
- Impressum, Datenschutz-&-Cookies-Seite und Über-uns
|
- Impressum, Datenschutz-&-Cookies-Seite und Über-uns
|
||||||
- standortbasierte Sortierung für die neuesten Treffen
|
- standortbasierte Sortierung für die neuesten Treffen
|
||||||
- eigener Einstellungsbereich für Standortfreigabe, Browser-Hinweise und Consent-Verwaltung
|
- eigener Einstellungsbereich für Standortfreigabe, Browser-Hinweise und Consent-Verwaltung
|
||||||
- modernes Avatar-System auf Basis von DiceBear `lorelei`, serverseitig über einen lokalen Proxy mit Cache ausgeliefert
|
- modernes Avatar-System auf Basis von DiceBear `lorelei`, direkt als externe SVG ausgeliefert
|
||||||
- Profilbild-Generator mit visueller Komponenten-Auswahl für Augen, Augenbrauen, Mund, Brille, Haare, Bart und Ohrringe sowie einer separaten Auswahl neuer Grundvarianten
|
- Profilbild-Generator mit visueller Komponenten-Auswahl für Augen, Augenbrauen, Mund, Brille, Haare, Bart und Ohrringe sowie einer separaten Auswahl neuer Grundvarianten
|
||||||
- keine statischen Avatar-Preset-Dateien mehr im Repository; Vorschau und Auswahl laufen vollständig über den Lorelei-Generator
|
- keine statischen Avatar-Preset-Dateien mehr im Repository; Vorschau und Auswahl laufen vollständig über den Lorelei-Generator
|
||||||
- Consent-Manager für Analyse und externe Dienste
|
- Consent-Manager für Analyse und externe Dienste
|
||||||
@@ -50,7 +50,7 @@ Der aktuelle Code nutzt oder kann nutzen:
|
|||||||
- lokale Standortspeicherung via Cookie, `localStorage`, `sessionStorage` (`external_services`)
|
- lokale Standortspeicherung via Cookie, `localStorage`, `sessionStorage` (`external_services`)
|
||||||
- Leaflet von `unpkg.com` (`external_services`)
|
- Leaflet von `unpkg.com` (`external_services`)
|
||||||
- OpenStreetMap Nominatim (`external_services`)
|
- OpenStreetMap Nominatim (`external_services`)
|
||||||
- DiceBear `lorelei` für serverseitig erzeugte Profilbilder
|
- DiceBear `lorelei` für extern geladene Profilbilder
|
||||||
|
|
||||||
Wichtig:
|
Wichtig:
|
||||||
- Nicht notwendige Analyse- und Drittanbieterfunktionen dürfen erst nach Einwilligung aktiv werden.
|
- Nicht notwendige Analyse- und Drittanbieterfunktionen dürfen erst nach Einwilligung aktiv werden.
|
||||||
|
|||||||
@@ -744,6 +744,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const avatarComponentFields = Object.keys(avatarComponentFieldMap);
|
const avatarComponentFields = Object.keys(avatarComponentFieldMap);
|
||||||
|
const avatarEndpoint = 'https://api.dicebear.com/10.x/lorelei/svg';
|
||||||
|
|
||||||
const buildAvatarParams = (form, overrides = {}) => {
|
const buildAvatarParams = (form, overrides = {}) => {
|
||||||
const seed = overrides.avatar_preset || readAvatarValue(form, 'avatar_preset');
|
const seed = overrides.avatar_preset || readAvatarValue(form, 'avatar_preset');
|
||||||
@@ -770,7 +771,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const params = buildAvatarParams(form);
|
const params = buildAvatarParams(form);
|
||||||
if (!params) return;
|
if (!params) return;
|
||||||
|
|
||||||
const url = `/api/avatar?${params.toString()}`;
|
params.set('size', '256');
|
||||||
|
const url = `${avatarEndpoint}?${params.toString()}`;
|
||||||
if (!url) return;
|
if (!url) return;
|
||||||
image.src = url;
|
image.src = url;
|
||||||
};
|
};
|
||||||
@@ -782,7 +784,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const params = buildAvatarParams(form, { [field]: value });
|
const params = buildAvatarParams(form, { [field]: value });
|
||||||
if (!params) return;
|
if (!params) return;
|
||||||
|
|
||||||
image.src = `/api/avatar?${params.toString()}`;
|
params.set('size', '256');
|
||||||
|
image.src = `${avatarEndpoint}?${params.toString()}`;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -800,9 +803,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
card.type = 'button';
|
card.type = 'button';
|
||||||
card.className = 'avatar-seed-card';
|
card.className = 'avatar-seed-card';
|
||||||
card.setAttribute('data-avatar-seed-option', seed);
|
card.setAttribute('data-avatar-seed-option', seed);
|
||||||
|
params.set('size', '256');
|
||||||
card.innerHTML = `
|
card.innerHTML = `
|
||||||
<span class="avatar-seed-card__thumb">
|
<span class="avatar-seed-card__thumb">
|
||||||
<img src="/api/avatar?${params.toString()}" alt="Grundvariante ${index + 1}">
|
<img src="${avatarEndpoint}?${params.toString()}" alt="Grundvariante ${index + 1}">
|
||||||
</span>
|
</span>
|
||||||
<span class="avatar-seed-card__label">Variante ${index + 1}</span>
|
<span class="avatar-seed-card__label">Variante ${index + 1}</span>
|
||||||
`;
|
`;
|
||||||
|
|||||||
@@ -151,9 +151,9 @@ $clientCookie = $config->cookiePrefix() . 'client';
|
|||||||
<section>
|
<section>
|
||||||
<h2>10. Profilbilder mit DiceBear</h2>
|
<h2>10. Profilbilder mit DiceBear</h2>
|
||||||
<p>
|
<p>
|
||||||
Profilbilder werden serverseitig über den Dienst DiceBear im Stil „Lorelei“ erzeugt. Dabei wird für die
|
Profilbilder werden über den Dienst DiceBear im Stil „Lorelei“ erzeugt. Dabei wird für die
|
||||||
Generierung nur der im Profil gespeicherte Avatar-Seed verwendet. Der Abruf erfolgt über unsere Anwendung
|
Generierung nur der im Profil gespeicherte Avatar-Seed verwendet. Dein Browser lädt die Avatar-Grafiken
|
||||||
und wird lokal zwischengespeichert, sodass dein Browser die Avatar-Grafiken nicht direkt bei DiceBear lädt.
|
direkt von DiceBear.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Rechtsgrundlage ist Art. 6 Abs. 1 lit. b DSGVO, soweit die Avatar-Erzeugung Teil des gewählten
|
Rechtsgrundlage ist Art. 6 Abs. 1 lit. b DSGVO, soweit die Avatar-Erzeugung Teil des gewählten
|
||||||
@@ -166,7 +166,7 @@ $clientCookie = $config->cookiePrefix() . 'client';
|
|||||||
<p>
|
<p>
|
||||||
Eine Weitergabe erfolgt nur, soweit sie für den Betrieb der Website oder einzelner Funktionen erforderlich ist.
|
Eine Weitergabe erfolgt nur, soweit sie für den Betrieb der Website oder einzelner Funktionen erforderlich ist.
|
||||||
Dazu können insbesondere technische Hosting-Dienstleister, E-Mail-Dienstleister,
|
Dazu können insbesondere technische Hosting-Dienstleister, E-Mail-Dienstleister,
|
||||||
Analyse-Dienstleister, DiceBear für die serverseitige Avatar-Erzeugung sowie die oben genannten externen Karten- und Standortdienste gehören.
|
Analyse-Dienstleister, DiceBear für die Avatar-Erzeugung sowie die oben genannten externen Karten- und Standortdienste gehören.
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ final class Lorelei
|
|||||||
|
|
||||||
public static function buildProxyUrl(array $row): string
|
public static function buildProxyUrl(array $row): string
|
||||||
{
|
{
|
||||||
return '/api/avatar?' . http_build_query(self::apiQuery($row));
|
return 'https://api.dicebear.com/10.x/lorelei/svg?' . http_build_query(self::apiQuery($row) + ['size' => '256']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function previewChoices(array $row, string $field): array
|
public static function previewChoices(array $row, string $field): array
|
||||||
|
|||||||
Reference in New Issue
Block a user