feat: extend event toolkit and polish guest pwa
This commit is contained in:
@@ -46,6 +46,8 @@ class EventJoinTokenLayoutController extends Controller
|
||||
abort(404, 'Unbekanntes Exportformat.');
|
||||
}
|
||||
|
||||
$layoutConfig = $this->applyCustomization($layoutConfig, $joinToken);
|
||||
|
||||
$tokenUrl = url('/e/'.$joinToken->token);
|
||||
|
||||
$qrPngDataUri = 'data:image/png;base64,'.base64_encode(
|
||||
@@ -66,6 +68,7 @@ class EventJoinTokenLayoutController extends Controller
|
||||
'tokenUrl' => $tokenUrl,
|
||||
'qrPngDataUri' => $qrPngDataUri,
|
||||
'backgroundStyle' => $backgroundStyle,
|
||||
'customization' => $joinToken->metadata['layout_customization'] ?? null,
|
||||
];
|
||||
|
||||
$filename = sprintf('%s-%s.%s', Str::slug($eventName ?: 'event'), $layoutConfig['id'], $format);
|
||||
@@ -80,7 +83,7 @@ class EventJoinTokenLayoutController extends Controller
|
||||
|
||||
$html = view('layouts.join-token.pdf', $viewData)->render();
|
||||
|
||||
$options = new Options();
|
||||
$options = new Options;
|
||||
$options->set('isHtml5ParserEnabled', true);
|
||||
$options->set('isRemoteEnabled', true);
|
||||
$options->set('defaultFont', 'Helvetica');
|
||||
@@ -115,6 +118,57 @@ class EventJoinTokenLayoutController extends Controller
|
||||
return is_string($name) && $name !== '' ? $name : 'Event';
|
||||
}
|
||||
|
||||
private function applyCustomization(array $layout, EventJoinToken $joinToken): array
|
||||
{
|
||||
$customization = data_get($joinToken->metadata, 'layout_customization');
|
||||
|
||||
if (! is_array($customization)) {
|
||||
return $layout;
|
||||
}
|
||||
|
||||
$layoutId = $customization['layout_id'] ?? null;
|
||||
if (is_string($layoutId) && isset($layout['id']) && $layoutId !== $layout['id']) {
|
||||
// Allow customization to target a specific layout; if mismatch, skip style overrides.
|
||||
// General text overrides are still applied below.
|
||||
}
|
||||
|
||||
$colorKeys = [
|
||||
'accent' => 'accent_color',
|
||||
'text' => 'text_color',
|
||||
'background' => 'background_color',
|
||||
'secondary' => 'secondary_color',
|
||||
'badge' => 'badge_color',
|
||||
];
|
||||
|
||||
foreach ($colorKeys as $layoutKey => $customKey) {
|
||||
if (isset($customization[$customKey]) && is_string($customization[$customKey])) {
|
||||
$layout[$layoutKey] = $customization[$customKey];
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($customization['background_gradient']) && is_array($customization['background_gradient'])) {
|
||||
$layout['background_gradient'] = $customization['background_gradient'];
|
||||
}
|
||||
|
||||
foreach (['headline' => 'name', 'subtitle', 'description', 'badge_label', 'instructions_heading', 'link_heading', 'cta_label', 'cta_caption', 'link_label'] as $customKey => $layoutKey) {
|
||||
if (isset($customization[$customKey]) && is_string($customization[$customKey])) {
|
||||
$layout[$layoutKey] = $customization[$customKey];
|
||||
}
|
||||
}
|
||||
|
||||
if (array_key_exists('instructions', $customization) && is_array($customization['instructions'])) {
|
||||
$layout['instructions'] = array_values(array_filter($customization['instructions'], fn ($value) => is_string($value) && trim($value) !== ''));
|
||||
}
|
||||
|
||||
if (! empty($customization['logo_data_url']) && is_string($customization['logo_data_url'])) {
|
||||
$layout['logo_url'] = $customization['logo_data_url'];
|
||||
} elseif (! empty($customization['logo_url']) && is_string($customization['logo_url'])) {
|
||||
$layout['logo_url'] = $customization['logo_url'];
|
||||
}
|
||||
|
||||
return $layout;
|
||||
}
|
||||
|
||||
private function buildBackgroundStyle(array $layout): string
|
||||
{
|
||||
$gradient = $layout['background_gradient'] ?? null;
|
||||
@@ -128,4 +182,4 @@ class EventJoinTokenLayoutController extends Controller
|
||||
|
||||
return $layout['background'] ?? '#FFFFFF';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user