Deploy Ladill QR Plus / deploy (push) Successful in 28s
Full control center for ticketed events, contributions, attendees, badges, and programmes — not a QR utility clone. Includes SSO shell, import command, and platform cutover runbook. Co-authored-by: Cursor <cursoragent@cursor.com>
94 lines
3.1 KiB
PHP
94 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace App\Support\Qr;
|
|
|
|
class QrModuleStyleCatalog
|
|
{
|
|
/** @return array<string, array{label: string, description: string, circular: bool, circle_radius: float, connect_paths: bool, scan_risk: string, visible?: bool}> */
|
|
public static function all(): array
|
|
{
|
|
return [
|
|
'square' => [
|
|
'label' => 'Standard',
|
|
'description' => 'Traditional square QR modules',
|
|
'circular' => false,
|
|
'circle_radius' => 0.4,
|
|
'connect_paths' => false,
|
|
'scan_risk' => 'low',
|
|
],
|
|
'soft' => [
|
|
'label' => 'Rounded',
|
|
'description' => 'Soft rounded modules',
|
|
'circular' => true,
|
|
'circle_radius' => 0.36,
|
|
'connect_paths' => false,
|
|
'scan_risk' => 'medium',
|
|
'visible' => false,
|
|
],
|
|
'dots' => [
|
|
'label' => 'Dots',
|
|
'description' => 'Round dot modules',
|
|
'circular' => true,
|
|
'circle_radius' => 0.45,
|
|
'connect_paths' => false,
|
|
'scan_risk' => 'medium',
|
|
],
|
|
'bubble' => [
|
|
'label' => 'Large dots',
|
|
'description' => 'Bolder round dot modules',
|
|
'circular' => true,
|
|
'circle_radius' => 0.52,
|
|
'connect_paths' => false,
|
|
'scan_risk' => 'high',
|
|
'visible' => false,
|
|
],
|
|
'fluid' => [
|
|
'label' => 'Fluid',
|
|
'description' => 'Legacy decorative style',
|
|
'circular' => true,
|
|
'circle_radius' => 0.38,
|
|
'connect_paths' => true,
|
|
'scan_risk' => 'high',
|
|
'visible' => false,
|
|
],
|
|
'bold' => [
|
|
'label' => 'Bold',
|
|
'description' => 'Legacy thick square modules',
|
|
'circular' => false,
|
|
'circle_radius' => 0.4,
|
|
'connect_paths' => false,
|
|
'scan_risk' => 'low',
|
|
'visible' => false,
|
|
],
|
|
];
|
|
}
|
|
|
|
/** @return array<string, array{label: string, description: string, circular: bool, circle_radius: float, connect_paths: bool, scan_risk: string, visible?: bool}> */
|
|
public static function visible(): array
|
|
{
|
|
return array_filter(self::all(), fn (array $style): bool => ($style['visible'] ?? true) === true);
|
|
}
|
|
|
|
/** @return list<string> */
|
|
public static function keys(): array
|
|
{
|
|
return array_keys(self::all());
|
|
}
|
|
|
|
public static function isValid(string $style): bool
|
|
{
|
|
return isset(self::all()[$style]);
|
|
}
|
|
|
|
/** @return array<string, mixed> */
|
|
public static function optionsFor(string $style): array
|
|
{
|
|
return self::all()[$style] ?? self::all()['square'];
|
|
}
|
|
|
|
public static function isDecorative(string $style): bool
|
|
{
|
|
return in_array(self::optionsFor($style)['scan_risk'], ['medium', 'high'], true);
|
|
}
|
|
}
|