diff --git a/app/Http/Controllers/Merchant/StorefrontController.php b/app/Http/Controllers/Merchant/StorefrontController.php index d20d260..2b062e9 100644 --- a/app/Http/Controllers/Merchant/StorefrontController.php +++ b/app/Http/Controllers/Merchant/StorefrontController.php @@ -8,6 +8,7 @@ use App\Services\Qr\QrCodeManagerService; use App\Services\Qr\QrImageGeneratorService; use App\Services\Qr\QrPdfExporter; use App\Support\Qr\QrTypeCatalog; +use App\Support\CrmPrefillCodec; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; @@ -50,7 +51,15 @@ class StorefrontController extends Controller $requestedType = QrCode::TYPE_SHOP; } - return view('merchant.storefronts.create', ['requestedType' => $requestedType]); + $prefill = CrmPrefillCodec::decode($request->query('prefill')); + if (($prefill['kind'] ?? null) === 'merchant_storefront' && ! empty($prefill['type'])) { + $requestedType = (string) $prefill['type']; + } + + return view('merchant.storefronts.create', [ + 'requestedType' => $requestedType, + 'prefill' => ($prefill['kind'] ?? null) === 'merchant_storefront' ? $prefill : null, + ]); } public function store(Request $request): RedirectResponse diff --git a/app/Support/CrmPrefillCodec.php b/app/Support/CrmPrefillCodec.php new file mode 100644 index 0000000..d8fd642 --- /dev/null +++ b/app/Support/CrmPrefillCodec.php @@ -0,0 +1,29 @@ +|null */ + public static function decode(?string $token): ?array + { + if (! is_string($token) || $token === '') { + return null; + } + + $padded = $token.str_repeat('=', (4 - strlen($token) % 4) % 4); + $json = base64_decode(strtr($padded, '-_', '+/'), true); + + if ($json === false) { + return null; + } + + try { + $data = json_decode($json, true, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException) { + return null; + } + + return is_array($data) ? $data : null; + } +} diff --git a/resources/views/merchant/storefronts/create.blade.php b/resources/views/merchant/storefronts/create.blade.php index e499005..5cacc09 100644 --- a/resources/views/merchant/storefronts/create.blade.php +++ b/resources/views/merchant/storefronts/create.blade.php @@ -1,6 +1,17 @@ Create storefront - @php $createType = old('type', $requestedType ?? \App\Models\QrCode::TYPE_SHOP); @endphp + @php + $prefill = $prefill ?? []; + $createType = old('type', $prefill['type'] ?? $requestedType ?? \App\Models\QrCode::TYPE_SHOP); + $prefillContent = []; + if (!empty($prefill)) { + $prefillContent = array_filter([ + 'title' => $prefill['shop_title'] ?? null, + 'sections' => $prefill['sections'] ?? null, + 'accepts_payment' => $prefill['accepts_payment'] ?? true, + ], fn ($v) => $v !== null); + } + @endphp
@@ -12,6 +23,12 @@

Pick what you're selling, then add your products, menu, or bookable services.

+ @if(!empty($prefill)) +
+ Prefilled from Ladill CRM. Review products and payment settings, then create your storefront. +
+ @endif + @if(session('error'))
{{ session('error') }}
@endif @@ -43,13 +60,13 @@
-

Private name to find this storefront in your dashboard.

- @include('merchant.storefronts.partials.editor-fields', ['content' => []]) + @include('merchant.storefronts.partials.editor-fields', ['content' => $prefillContent ?? []])