From 474df2aa613a0d2b3fe5b4f7e7e80c4b718b8bed Mon Sep 17 00:00:00 2001 From: TheMaddax Date: Thu, 18 Dec 2025 11:33:47 -0700 Subject: [PATCH] Add unsubscribe confirmation page - Created Unsubscribe.vue with matching site styling - Added showUnsubscribe method to SubscriptionController - Updated routes: GET /unsubscribe/{token} shows confirmation page - POST /api/unsubscribe/{token} processes unsubscribe - Updated email template to use new unsubscribe route - Prevents accidental unsubscribes with confirmation dialog --- .../Controllers/SubscriptionController.php | 19 ++- resources/js/Pages/Unsubscribe.vue | 153 ++++++++++++++++++ .../views/emails/new-docket-entry.blade.php | 2 +- routes/web.php | 3 +- 4 files changed, 174 insertions(+), 3 deletions(-) create mode 100644 resources/js/Pages/Unsubscribe.vue diff --git a/app/Http/Controllers/SubscriptionController.php b/app/Http/Controllers/SubscriptionController.php index 8575f51f..0971ea9c 100644 --- a/app/Http/Controllers/SubscriptionController.php +++ b/app/Http/Controllers/SubscriptionController.php @@ -62,7 +62,24 @@ class SubscriptionController extends Controller } /** - * Unsubscribe using token. + * Show unsubscribe confirmation page. + */ + public function showUnsubscribe(string $token) + { + $subscription = Subscription::where('unsubscribe_token', $token)->first(); + + if (!$subscription) { + abort(404, 'Invalid unsubscribe token.'); + } + + return inertia('Unsubscribe', [ + 'token' => $token, + 'email' => $subscription->email, + ]); + } + + /** + * Process unsubscribe request. */ public function unsubscribe(Request $request, string $token): JsonResponse { diff --git a/resources/js/Pages/Unsubscribe.vue b/resources/js/Pages/Unsubscribe.vue new file mode 100644 index 00000000..43864974 --- /dev/null +++ b/resources/js/Pages/Unsubscribe.vue @@ -0,0 +1,153 @@ + + + diff --git a/resources/views/emails/new-docket-entry.blade.php b/resources/views/emails/new-docket-entry.blade.php index 3d844971..2a7f8877 100644 --- a/resources/views/emails/new-docket-entry.blade.php +++ b/resources/views/emails/new-docket-entry.blade.php @@ -145,7 +145,7 @@ Court Docket Notification System

- Unsubscribe from notifications + Unsubscribe from notifications

diff --git a/routes/web.php b/routes/web.php index 6f879088..12e33b4b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -13,7 +13,8 @@ Route::get('/', [HomeController::class, 'index'])->name('home'); // Subscription API routes Route::post('/api/subscribe', [SubscriptionController::class, 'subscribe'])->name('api.subscribe'); -Route::get('/api/unsubscribe/{token}', [SubscriptionController::class, 'unsubscribe'])->name('api.unsubscribe'); +Route::get('/unsubscribe/{token}', [SubscriptionController::class, 'showUnsubscribe'])->name('unsubscribe'); +Route::post('/api/unsubscribe/{token}', [SubscriptionController::class, 'unsubscribe'])->name('api.unsubscribe'); // Document download route Route::get('/api/documents/{id}/download', [DocumentController::class, 'download'])->name('api.documents.download');