zu fabricjs gewechselt, noch nicht funktionsfähig

This commit is contained in:
Codex Agent
2025-10-31 20:19:09 +01:00
parent 06df61f706
commit eb0c31c90b
33 changed files with 7718 additions and 2062 deletions

View File

@@ -11,6 +11,7 @@ use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class EventJoinTokenController extends Controller
{
@@ -140,6 +141,24 @@ class EventJoinTokenController extends Controller
'metadata.layout_customization.background_gradient.angle' => ['nullable', 'numeric'],
'metadata.layout_customization.background_gradient.stops' => ['nullable', 'array', 'max:5'],
'metadata.layout_customization.background_gradient.stops.*' => ['nullable', 'string', 'regex:/^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6})$/'],
'metadata.layout_customization.mode' => ['nullable', Rule::in(['standard', 'advanced'])],
'metadata.layout_customization.elements' => ['nullable', 'array', 'max:50'],
'metadata.layout_customization.elements.*.id' => ['required_with:metadata.layout_customization.elements', 'string', 'max:120'],
'metadata.layout_customization.elements.*.type' => ['required_with:metadata.layout_customization.elements', Rule::in(['qr', 'headline', 'subtitle', 'description', 'link', 'badge', 'logo', 'cta', 'text'])],
'metadata.layout_customization.elements.*.x' => ['nullable', 'numeric', 'min:0'],
'metadata.layout_customization.elements.*.y' => ['nullable', 'numeric', 'min:0'],
'metadata.layout_customization.elements.*.width' => ['nullable', 'numeric', 'min:40'],
'metadata.layout_customization.elements.*.height' => ['nullable', 'numeric', 'min:40'],
'metadata.layout_customization.elements.*.rotation' => ['nullable', 'numeric'],
'metadata.layout_customization.elements.*.font_size' => ['nullable', 'numeric', 'min:8', 'max:160'],
'metadata.layout_customization.elements.*.align' => ['nullable', Rule::in(['left', 'center', 'right'])],
'metadata.layout_customization.elements.*.content' => ['nullable', 'string', 'max:400'],
'metadata.layout_customization.elements.*.font_family' => ['nullable', 'string', 'max:120'],
'metadata.layout_customization.elements.*.letter_spacing' => ['nullable', 'numeric', 'min:-5', 'max:20'],
'metadata.layout_customization.elements.*.line_height' => ['nullable', 'numeric', 'min:0.5', 'max:3'],
'metadata.layout_customization.elements.*.fill' => ['nullable', 'string', 'max:20'],
'metadata.layout_customization.elements.*.locked' => ['nullable', 'boolean'],
'metadata.layout_customization.elements.*.initial' => ['nullable', 'boolean'],
];
$validated = $request->validate($rules);
@@ -156,6 +175,36 @@ class EventJoinTokenController extends Controller
unset($validated['metadata']['layout_customization']['logo_data_url']);
}
if (isset($validated['metadata']['layout_customization']['elements'])
&& is_array($validated['metadata']['layout_customization']['elements'])) {
$validated['metadata']['layout_customization']['elements'] = array_values(array_filter(array_map(
static function ($element) {
if (! is_array($element) || empty($element['id']) || empty($element['type'])) {
return null;
}
return array_filter([
'id' => (string) $element['id'],
'type' => (string) $element['type'],
'x' => array_key_exists('x', $element) ? (float) $element['x'] : null,
'y' => array_key_exists('y', $element) ? (float) $element['y'] : null,
'width' => array_key_exists('width', $element) ? (float) $element['width'] : null,
'height' => array_key_exists('height', $element) ? (float) $element['height'] : null,
'rotation' => array_key_exists('rotation', $element) ? (float) $element['rotation'] : null,
'font_size' => array_key_exists('font_size', $element) ? (float) $element['font_size'] : null,
'align' => $element['align'] ?? null,
'content' => array_key_exists('content', $element) ? (string) $element['content'] : null,
'font_family' => $element['font_family'] ?? null,
'letter_spacing' => array_key_exists('letter_spacing', $element) ? (float) $element['letter_spacing'] : null,
'line_height' => array_key_exists('line_height', $element) ? (float) $element['line_height'] : null,
'fill' => $element['fill'] ?? null,
'locked' => array_key_exists('locked', $element) ? (bool) $element['locked'] : null,
], static fn ($value) => $value !== null && $value !== '');
},
$validated['metadata']['layout_customization']['elements']
)));
}
return $validated;
}
}