From 57d9e920672fd159860af791561590ce4acacf93 Mon Sep 17 00:00:00 2001 From: Debatty-Tom <145542891+Debatty-Tom@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:25:19 +0200 Subject: [PATCH 1/6] Overwrite the consent cookie by a session cookie to keep user preferences in session while managing preferences --- src/CookiesManager.php | 2 +- src/Http/Controllers/ResetController.php | 44 ++++++++++++++++++------ 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/CookiesManager.php b/src/CookiesManager.php index 58b387c..a4124cf 100644 --- a/src/CookiesManager.php +++ b/src/CookiesManager.php @@ -16,7 +16,7 @@ class CookiesManager /** * The user's current consent preferences. */ - protected ?array $preferences = null; + public ?array $preferences = null; /** * Create a new Service Manager instance. diff --git a/src/Http/Controllers/ResetController.php b/src/Http/Controllers/ResetController.php index 47121ca..a372cc5 100644 --- a/src/Http/Controllers/ResetController.php +++ b/src/Http/Controllers/ResetController.php @@ -2,6 +2,8 @@ namespace Whitecube\LaravelCookieConsent\Http\Controllers; +use Illuminate\Support\Facades\Cookie as CookieFacade; +use Whitecube\LaravelCookieConsent\ConsentResponse; use Whitecube\LaravelCookieConsent\CookiesManager; use Illuminate\Http\Request; @@ -9,17 +11,39 @@ class ResetController { public function __invoke(Request $request, CookiesManager $cookies) { - $response = ! $request->expectsJson() - ? redirect()->back() - : response()->json([ - 'status' => 'ok', - 'scripts' => $cookies->getNoticeScripts(true), - 'notice' => $cookies->getNoticeMarkup(), - ]); - - return $response->withoutCookie( - cookie: config('cookieconsent.cookie.name'), + + $categories = $cookies->getCategories(); + + $currentPreferences = $cookies->preferences ?? []; + + $cookiesData = [ + 'consent_at' => $currentPreferences['consent_at'] ?? time(), + 'categories' => [], + ]; + + foreach ($categories as $category) { + $cookieNames = collect($category->getCookies())->pluck('name'); + + $allAccepted = $cookieNames->every(fn($name) => !empty($currentPreferences[$name])); + + $cookiesData['categories'][$category->key()] = $allAccepted; + } + + $cookie = CookieFacade::make( + name: config('cookieconsent.cookie.name'), + value: json_encode($cookiesData), + minutes: 0, domain: config('cookieconsent.cookie.domain'), + secure: (config('app.env') == 'local') ? false : true ); + + $response = $request->expectsJson() + ? response()->json([ + 'status' => 'updated', + 'preferences' => $cookiesData, + ]) + : redirect()->back(); + + return $response->withCookie($cookie); } } From 772a2dffc0d4c8f1ba7db5a954139434684a27b9 Mon Sep 17 00:00:00 2001 From: Debatty-Tom <145542891+Debatty-Tom@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:26:14 +0200 Subject: [PATCH 2/6] update view to pre-check categories depending of the user preferences --- resources/views/cookies.blade.php | 83 ++++++++++++++++++------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/resources/views/cookies.blade.php b/resources/views/cookies.blade.php index e194d00..4c0d7ae 100644 --- a/resources/views/cookies.blade.php +++ b/resources/views/cookies.blade.php @@ -1,4 +1,5 @@ -