diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index a48eb8d..bfa2817 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -18,6 +18,7 @@ public function edit(Request $request): View { return view('profile.edit', [ 'user' => $request->user(), + 'settings' => $request->user()->settings, ]); } diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php new file mode 100644 index 0000000..2f188a1 --- /dev/null +++ b/app/Http/Controllers/SettingsController.php @@ -0,0 +1,24 @@ +user()->settings; + $settings['notification']['wishlist-comment-created'] = (bool) $request->request->get('notification-wishlist-comment-created'); + $settings['notification']['wish-created'] = (bool) $request->request->get('notification-wish-created'); + $request->user()->settings = $settings; + $request->user()->save(); + + return Redirect::route('profile.edit')->with('status', 'settings-updated'); + } +} diff --git a/app/Http/Controllers/WishController.php b/app/Http/Controllers/WishController.php index d9d48f6..6463775 100644 --- a/app/Http/Controllers/WishController.php +++ b/app/Http/Controllers/WishController.php @@ -26,7 +26,7 @@ public function store(Request $request, Wishlist $wishlist) 'description' => ['nullable', 'string', 'max:2000'], ])); - Notification::send($wishlist->viewers, new WishCreatedNotification($wish)); + Notification::send($wishlist->viewers->filter(fn ($user) => $user->settings['notification']['wish-created']), new WishCreatedNotification($wish)); return to_route('wishlists.show', $wishlist); } diff --git a/app/Http/Controllers/WishlistCommentController.php b/app/Http/Controllers/WishlistCommentController.php index 6b03a08..b71758b 100644 --- a/app/Http/Controllers/WishlistCommentController.php +++ b/app/Http/Controllers/WishlistCommentController.php @@ -36,7 +36,7 @@ public function store(Request $request, Wishlist $wishlist) $comment = $wishlist->addComment($request->comment, $request->user()); - $watchers = $wishlist->viewers->push($wishlist->user)->reject(fn ($user) => $user->is($request->user())); + $watchers = $wishlist->viewers->push($wishlist->user)->reject(fn ($user) => $user->is($request->user()) || !$user->settings['notification']['wishlist-comment-created']); Notification::send($watchers, new WishlistCommentCreatedNotification($comment)); diff --git a/app/Models/User.php b/app/Models/User.php index fe1901f..b0254ba 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -16,6 +16,7 @@ class User extends Authenticatable 'name', 'email', 'password', + 'settings' ]; protected $hidden = [ @@ -26,6 +27,11 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', 'password' => 'hashed', + 'settings' => 'array' + ]; + + protected $attributes = [ + 'settings' => '{"notification":{"wishlist-comment-created":true,"wish-created":true}}' ]; public function wishlists() @@ -41,7 +47,7 @@ public function joinedWishlists() protected function avatarUrl(): Attribute { return Attribute::make( - get: fn ($value, $attributes) => "https://unavatar.io/{$attributes['email']}?".http_build_query([ + get: fn ($value, $attributes) => "https://unavatar.io/{$attributes['email']}?" . http_build_query([ 'fallback' => "https://ui-avatars.com/api/{$attributes['name']}/32/bae6fd/0c4a6e", ]) )->shouldCache(); diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 444fafb..1bd6f2a 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -17,6 +17,7 @@ public function up(): void $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); + $table->json('settings')->nullable(); $table->rememberToken(); $table->timestamps(); }); diff --git a/resources/views/profile/edit.blade.php b/resources/views/profile/edit.blade.php index ffc6652..6f1bd63 100644 --- a/resources/views/profile/edit.blade.php +++ b/resources/views/profile/edit.blade.php @@ -18,6 +18,12 @@ +
+ {{ __('Configure which notifications you want to receive') }} +
+{{ __('Saved.') }}
+ @endif +