- Wired the checkout wizard for Google “comfort login”: added Socialite controller + dependency, new Google env
hooks in config/services.php/.env.example, and updated wizard steps/controllers to store session payloads, attach packages, and surface localized success/error states. - Retooled payment handling for both Stripe and PayPal, adding richer status management in CheckoutController/ PayPalController, fallback flows in the wizard’s PaymentStep.tsx, and fresh feature tests for intent creation, webhooks, and the wizard CTA. - Introduced a consent-aware Matomo analytics stack: new consent context, cookie-banner UI, useAnalytics/ useCtaExperiment hooks, and MatomoTracker component, then instrumented marketing pages (Home, Packages, Checkout) with localized copy and experiment tracking. - Polished package presentation across marketing UIs by centralizing formatting in PresentsPackages, surfacing localized description tables/placeholders, tuning badges/layouts, and syncing guest/marketing translations. - Expanded docs & reference material (docs/prp/*, TODOs, public gallery overview) and added a Playwright smoke test for the hero CTA while reconciling outstanding checklist items.
This commit is contained in:
@@ -5,6 +5,9 @@ return [
|
||||
'platform' => 'Plattform',
|
||||
'library' => 'Bibliothek',
|
||||
'content' => 'Inhalte',
|
||||
'platform_management' => 'Plattformverwaltung',
|
||||
'billing' => 'Billing & Finanzen',
|
||||
'security' => 'Sicherheit',
|
||||
],
|
||||
|
||||
'common' => [
|
||||
@@ -33,6 +36,8 @@ return [
|
||||
'settings' => 'Einstellungen',
|
||||
'join' => 'Beitreten',
|
||||
'unnamed' => 'Ohne Namen',
|
||||
'from' => 'Von',
|
||||
'until' => 'Bis',
|
||||
],
|
||||
|
||||
'photos' => [
|
||||
@@ -213,6 +218,23 @@ return [
|
||||
'uploads_per_day' => [
|
||||
'heading' => 'Uploads (14 Tage)',
|
||||
],
|
||||
'credit_alerts' => [
|
||||
'low_balance_label' => 'Mandanten mit niedrigen Credits',
|
||||
'low_balance_desc' => 'Benötigen Betreuung',
|
||||
'monthly_revenue_label' => 'Umsatz (Monat)',
|
||||
'monthly_revenue_desc' => 'Aktueller Monat (:month)',
|
||||
'active_subscriptions_label' => 'Aktive Abos',
|
||||
'active_subscriptions_desc' => 'Laufende Pakete',
|
||||
],
|
||||
'revenue_trend' => [
|
||||
'heading' => 'Monatliche Einnahmen',
|
||||
'series' => 'Umsatz (€)',
|
||||
],
|
||||
'top_tenants_by_revenue' => [
|
||||
'heading' => 'Top‑Mandanten nach Umsatz',
|
||||
'total' => 'Gesamt (€)',
|
||||
'count' => 'Käufe',
|
||||
],
|
||||
],
|
||||
|
||||
'notifications' => [
|
||||
@@ -228,6 +250,82 @@ return [
|
||||
'contact_email' => 'Kontakt‑E‑Mail',
|
||||
'event_credits_balance' => 'Event‑Credits‑Kontostand',
|
||||
'features' => 'Funktionen',
|
||||
'total_revenue' => 'Gesamtumsatz',
|
||||
'active_reseller_package' => 'Aktives Reseller-Paket',
|
||||
'remaining_events' => 'Verbleibende Events',
|
||||
'package_expires_at' => 'Ablaufdatum Paket',
|
||||
'is_active' => 'Aktiv',
|
||||
'is_suspended' => 'Suspendiert',
|
||||
],
|
||||
'actions' => [
|
||||
'adjust_credits' => 'Credits anpassen',
|
||||
'adjust_credits_delta' => 'Anzahl Credits (positiv/negativ)',
|
||||
'adjust_credits_delta_hint' => 'Positive Werte fügen Credits hinzu, negative Werte ziehen ab.',
|
||||
'adjust_credits_reason' => 'Interne Notiz',
|
||||
'adjust_credits_success_title' => 'Credits aktualisiert',
|
||||
'adjust_credits_success_body' => 'Die Credits wurden um :delta verändert. Neuer Kontostand: :balance.',
|
||||
],
|
||||
],
|
||||
|
||||
'purchase_history' => [
|
||||
'fields' => [
|
||||
'tenant' => 'Mandant',
|
||||
'package' => 'Paket',
|
||||
'credits' => 'Credits',
|
||||
'price' => 'Preis',
|
||||
'currency' => 'Währung',
|
||||
'platform' => 'Plattform',
|
||||
'transaction_id' => 'Transaktions-ID',
|
||||
'purchased_at' => 'Kaufdatum',
|
||||
],
|
||||
'filters' => [
|
||||
'purchased_at' => 'Zeitraum',
|
||||
'platform' => 'Plattform',
|
||||
'currency' => 'Währung',
|
||||
'tenant' => 'Mandant',
|
||||
],
|
||||
'actions' => [
|
||||
'export' => 'Exportieren',
|
||||
],
|
||||
'platforms' => [
|
||||
'ios' => 'iOS',
|
||||
'android' => 'Android',
|
||||
'web' => 'Web',
|
||||
'manual' => 'Manuell',
|
||||
],
|
||||
'export_success' => 'Export abgeschlossen. :count Einträge exportiert.',
|
||||
],
|
||||
|
||||
'oauth' => [
|
||||
'fields' => [
|
||||
'name' => 'Name',
|
||||
'client_id' => 'Client-ID',
|
||||
'client_secret' => 'Client-Secret',
|
||||
'tenant' => 'Mandant',
|
||||
'redirect_uris' => 'Redirect-URIs',
|
||||
'scopes' => 'Scopes',
|
||||
'is_active' => 'Aktiv',
|
||||
'description' => 'Beschreibung',
|
||||
'updated_at' => 'Zuletzt geändert',
|
||||
],
|
||||
'hints' => [
|
||||
'client_secret' => 'Leer lassen, um das bestehende Secret zu behalten oder für PKCE-Clients ohne Secret.',
|
||||
'redirect_uris' => 'Eine URL pro Zeile. Die Callback-URL muss exakt übereinstimmen.',
|
||||
],
|
||||
'filters' => [
|
||||
'is_active' => 'Status',
|
||||
'any' => 'Alle',
|
||||
'active' => 'Aktiv',
|
||||
'inactive' => 'Inaktiv',
|
||||
],
|
||||
'actions' => [
|
||||
'regenerate_secret' => 'Secret neu generieren',
|
||||
],
|
||||
'notifications' => [
|
||||
'secret_regenerated_title' => 'Neues Secret erstellt',
|
||||
'secret_regenerated_body' => 'Speichere das neue Secret sicher: :secret',
|
||||
'created_title' => 'OAuth-Client erstellt',
|
||||
'updated_title' => 'OAuth-Client gespeichert',
|
||||
],
|
||||
],
|
||||
|
||||
|
||||
Reference in New Issue
Block a user