diff --git a/app/Http/Controllers/Checkout/CheckoutController.php b/app/Http/Controllers/Checkout/CheckoutController.php index 7b1cac6..fa4f465 100644 --- a/app/Http/Controllers/Checkout/CheckoutController.php +++ b/app/Http/Controllers/Checkout/CheckoutController.php @@ -164,16 +164,14 @@ public function saveAddress(string $locale, Request $request): JsonResponse $this->checkout->setBillingAddress($billing); $cart = $this->checkout->setShippingAddress($shipping); - $cart->meta = [ - ...($cart->meta?->toArray() ?? []), - 'ship_to_billing' => $sameAsBilling, - // Interim storage only — the proper consent record (timestamp, - // policy version) is the back-end Task 2. This just lets the - // checkbox round-trip on reload like every other field. - 'marketing_consent' => $request->boolean('marketing_consent'), - ]; + $cart->meta = [...($cart->meta?->toArray() ?? []), 'ship_to_billing' => $sameAsBilling]; $cart->save(); + // Abandoned-cart-recovery opt-in — boboko-core owns the record (bool + + // timestamp + policy version on Cart::meta, RecoveryConsentSet event). + // Deliberately its own scope, not merged with any future newsletter opt-in. + $this->checkout->setRecoveryConsent($request->boolean('recovery_consent')); + // ShippingManifest is a request-lifetime singleton whose getOptions() // appends without ever clearing, and addOption() keeps the FIRST entry // per identifier. The setBillingAddress() recalc above ran ApplyShipping diff --git a/database/seeders/CheckoutTranslationsSeeder.php b/database/seeders/CheckoutTranslationsSeeder.php index 1883d09..817337d 100644 --- a/database/seeders/CheckoutTranslationsSeeder.php +++ b/database/seeders/CheckoutTranslationsSeeder.php @@ -77,9 +77,9 @@ private function lines(): array 'page.guest_tab' => ['Guest', 'Ως επισκέπτης'], 'page.login_tab' => ['Log in', 'Σύνδεση'], 'page.email_label' => ['Email', 'Email'], - 'page.marketing_consent' => [ - 'Email me offers, news and order reminders', - 'Στείλε μου προσφορές, νέα και υπενθυμίσεις παραγγελιών', + 'page.recovery_consent' => [ + "Email me a reminder if I don't finish my order", + 'Στείλε μου μια υπενθύμιση αν δεν ολοκληρώσω την παραγγελία μου', ], 'page.login_email_label' => ['Email', 'Email'], 'page.send_code' => ['Send code', 'Αποστολή κωδικού'], diff --git a/resources/views/checkout/page.blade.php b/resources/views/checkout/page.blade.php index 90f5dee..a798e0d 100644 --- a/resources/views/checkout/page.blade.php +++ b/resources/views/checkout/page.blade.php @@ -63,21 +63,21 @@ class="bbk-checkout-tab" form="bbk-address-form" /> - {{-- One combined marketing opt-in (offers + news + unfinished-order - reminders). Optional, unticked, never required — all of it is - direct marketing under ePrivacy (GR L. 3471/2006 art. 11), so it - needs an explicit opt-in and checkout can't be gated on it. - The bool round-trips via cart.meta (see saveAddress); the proper - consent record — timestamp, policy version — is back-end Task 2. --}} + {{-- Abandoned-cart-recovery opt-in. Optional, unticked, never + required — direct marketing under ePrivacy (GR L. 3471/2006 + art. 11), so it needs an explicit opt-in and checkout can't be + gated on it. Narrow scope by design (boboko-core's + setRecoveryConsent) — a general newsletter opt-in, if wanted, + is a separate checkbox. --}}