photobooth funktionen im event admin verlinkt, gäste pwa zeigt photobooth nur noch an, wenn diese aktiviert ist. kontaktformular optimiert. teilen-link mit iMessage und whatsapp erweitert.

This commit is contained in:
Codex Agent
2025-11-23 22:22:06 +01:00
parent 3d9eaa1194
commit df414a31cd
32 changed files with 809 additions and 280 deletions

View File

@@ -918,6 +918,21 @@ class EventPublicController extends BaseController
];
}
private function resolveFontFamily(Event $event): ?string
{
$fontFamily = Arr::get($event->settings, 'branding.font_family')
?? Arr::get($event->tenant?->settings, 'branding.font_family');
if (! is_string($fontFamily)) {
return null;
}
$normalized = strtolower(trim($fontFamily));
$defaultInter = strtolower('Inter, sans-serif');
return $normalized === $defaultInter ? null : $fontFamily;
}
private function encodeGalleryCursor(Photo $photo): string
{
return base64_encode(json_encode([
@@ -1378,8 +1393,7 @@ class EventPublicController extends BaseController
];
$branding = $this->buildGalleryBranding($event);
$fontFamily = Arr::get($event->settings, 'branding.font_family')
?? Arr::get($event->tenant?->settings, 'branding.font_family');
$fontFamily = $this->resolveFontFamily($event);
$brandingAllowed = $this->determineBrandingAllowed($event);
$logoUrl = $brandingAllowed
? (Arr::get($event->settings, 'branding.logo_url')
@@ -1399,6 +1413,7 @@ class EventPublicController extends BaseController
'updated_at' => $event->updated_at,
'type' => $eventTypeData,
'join_token' => $joinToken?->token,
'photobooth_enabled' => (bool) $event->photobooth_enabled,
'branding' => [
'primary_color' => $branding['primary_color'],
'secondary_color' => $branding['secondary_color'],

View File

@@ -59,6 +59,7 @@ class MarketingController extends Controller
'name' => 'required|string|max:255',
'email' => 'required|email|max:255',
'message' => 'required|string|max:1000',
'nickname' => 'present|size:0',
]);
$locale = app()->getLocale();

View File

@@ -176,6 +176,15 @@ class AppServiceProvider extends ServiceProvider
return Limit::perMinute(10)->by('coupon-preview:'.$identifier);
});
RateLimiter::for('contact-form', function (Request $request) {
$ip = $request->ip() ?? 'unknown';
return [
Limit::perMinute(5)->by('contact:ip:'.$ip),
Limit::perHour(30)->by('contact:hour:'.$ip),
];
});
Inertia::share('locale', fn () => app()->getLocale());
Inertia::share('analytics', static function () {
$config = config('services.matomo');

View File

@@ -4,6 +4,7 @@ namespace App\Support;
use App\Models\Event;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Schema;
class WatermarkConfigResolver
{
@@ -35,7 +36,15 @@ class WatermarkConfigResolver
];
}
$baseSetting = WatermarkSetting::query()->first();
$baseSetting = null;
if (class_exists(\App\Models\WatermarkSetting::class) && \Illuminate\Support\Facades\Schema::hasTable('watermark_settings')) {
try {
$baseSetting = \App\Models\WatermarkSetting::query()->first();
} catch (\Throwable) {
$baseSetting = null;
}
}
$base = [
'asset' => $baseSetting?->asset ?? config('watermark.base.asset', 'branding/fotospiel-watermark.png'),
'position' => $baseSetting?->position ?? config('watermark.base.position', 'bottom-right'),
@@ -87,4 +96,3 @@ class WatermarkConfigResolver
];
}
}
use App\Models\WatermarkSetting;