Skip to content

Commit 1475c73

Browse files
committed
✨ ajout dea parametres de notifications
1 parent f4f7e8d commit 1475c73

File tree

10 files changed

+79173
-16
lines changed

10 files changed

+79173
-16
lines changed

app/Http/Controllers/SubscriptionController.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,11 @@ public function unsubscribe(Subscribe $subscription)
1717

1818
return redirect()->route('forum.show', $thread->slug());
1919
}
20+
21+
public function redirect($id, $type)
22+
{
23+
$subscribe = Subscribe::where('subscribeable_id', $id)->where('subscribeable_type', $type)->firstOrFail();
24+
25+
return redirect(route_to_reply_able($subscribe->subscribeAble));
26+
}
2027
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace App\Http\Livewire\User\Settings;
4+
5+
use App\Models\Subscribe;
6+
use App\Policies\DiscussionPolicy;
7+
use App\Policies\ThreadPolicy;
8+
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
9+
use Illuminate\Support\Facades\Auth;
10+
use Livewire\Component;
11+
use WireUi\Traits\Actions;
12+
13+
class Notifications extends Component
14+
{
15+
use Actions, AuthorizesRequests;
16+
17+
public $subscribeId;
18+
19+
public function unsubscribe(string $subscribeId)
20+
{
21+
$this->subscribeId = $subscribeId;
22+
23+
$this->subscribe->delete();
24+
25+
$this->notification()->success('Désabonnement', 'Vous êtes maintenant désabonné de cet fil.');
26+
}
27+
28+
public function getSubscribeProperty(): Subscribe
29+
{
30+
return Subscribe::where('uuid', $this->subscribeId)->firstOrFail();
31+
}
32+
33+
public function render()
34+
{
35+
return view('livewire.user.settings.notifications', [
36+
'subscriptions' => Auth::user()->subscriptions,
37+
]);
38+
}
39+
}

app/Models/User.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ public function discussions(): HasMany
187187
return $this->hasMany(Discussion::class);
188188
}
189189

190+
public function subscriptions(): HasMany
191+
{
192+
return $this->hasMany(Subscribe::class);
193+
}
194+
190195
public function deleteThreads()
191196
{
192197
// We need to explicitly iterate over the threads and delete them

public/css/app.css

Lines changed: 9920 additions & 10 deletions
Large diffs are not rendered by default.

public/js/app.js

Lines changed: 69143 additions & 2 deletions
Large diffs are not rendered by default.

public/mix-manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"/js/app.js": "/js/app.js?id=9abd09e80a5426001802",
3-
"/css/app.css": "/css/app.css?id=1b6e5ebdedf4aff61229"
2+
"/js/app.js": "/js/app.js",
3+
"/css/app.css": "/css/app.css"
44
}

resources/views/layouts/settings.blade.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@
2929
{{ __('Apparence') }}
3030
</x-nav-link>
3131

32-
<x-nav-link href="#" :active="request()->routeIs('user.notifications')">
32+
<x-nav-link :href="route('user.notifications')" :active="request()->routeIs('user.notifications')">
3333
<x-heroicon-o-speakerphone class="flex-shrink-0 -ml-1 mr-3 h-6 w-6 @if(request()->routeIs('user.notifications')) text-green-600 @else text-skin-muted @endif " />
3434
{{ __('Notifications') }}
3535
</x-nav-link>
3636

3737
<x-nav-link href="#" :active="request()->routeIs('user.subscription')">
38-
<x-heroicon-o-speakerphone class="flex-shrink-0 -ml-1 mr-3 h-6 w-6 @if(request()->routeIs('user.subscription')) text-green-600 @else text-skin-muted @endif " />
38+
<x-heroicon-o-credit-card class="flex-shrink-0 -ml-1 mr-3 h-6 w-6 @if(request()->routeIs('user.subscription')) text-green-600 @else text-skin-muted @endif " />
3939
{{ __('Abonnement') }}
4040
</x-nav-link>
4141
</div>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<div class="pb-20">
2+
<div class="flex items-center">
3+
<div class="flex-1">
4+
<h3 class="text-lg leading-6 font-medium text-skin-inverted">
5+
Gérez vos notifications
6+
</h3>
7+
<p class="mt-1 max-w-4xl text-sm text-skin-base font-normal">
8+
Cette page répertorie tous les abonnements à des e-mails pour votre compte.
9+
Par exemple, vous avez peut-être demandé à être informé par e-mail de la mise à jour d'un thread ou d'un fil de discussion particulier.
10+
</p>
11+
</div>
12+
<div>
13+
<x-loader wire:loading wire:target="theme" class="text-flag-green ml-3 mr-0"/>
14+
</div>
15+
</div>
16+
17+
<div class="mt-6 sm:mt-5 sm:border-t sm:border-skin-base sm:pt-5">
18+
<div class="grid gap-5 sm:grid-cols-2 lg:grid-cols-3 lg:gap-x-5 lg:gap-y-6">
19+
@forelse($subscriptions as $subscription)
20+
<div class="p-4 sm:p-5 flex flex-col justify-between rounded-md bg-skin-card-gray">
21+
<p class="text-base font-sans leading-6 text-skin-inverted">
22+
<a href="{{ route('subscriptions.redirect', [$subscription->subscribeable_id, $subscription->subscribeable_type]) }}" class="text-skin-inverted hover:text-skin-primary-hover font-medium">
23+
{{ $subscription->subscribeAble->title }}
24+
</a>
25+
</p>
26+
<div class="mt-3">
27+
<button wire:click="unsubscribe('{{ $subscription->uuid }}')" type="button" class="inline-flex items-start px-2.5 py-1.5 text-xs leading-4 font-medium font-sans text-red-600 bg-red-100 hover:bg-red-50 rounded-full">
28+
Se désabonner
29+
</button>
30+
</div>
31+
</div>
32+
@empty
33+
<div class="grid sm:col-span-2 lg:col-span-3 max-w-4xl">
34+
<div class="bg-skin-card-gray px-4 py-3 flex rounded-md">
35+
<div class="flex-shrink-0">
36+
<x-heroicon-o-information-circle class="h-5 w-5 text-blue-500"/>
37+
</div>
38+
<div class="ml-3 flex-1 text-skin-base font-normal">
39+
<span class="font-medium text-blue-500">Astuce:</span> Visitez n'importe quel fil de discussion du forum et cliquez sur le bouton <span class="font-medium text-skin-inverted">"S'abonner"</span> dans la barre latérale.
40+
Une fois cliqué, vous recevrez un e-mail chaque fois qu'une réponse sera publiée.
41+
Il en va de même pour n'importe quel type de contenu qui offre cette possibilité.
42+
</div>
43+
</div>
44+
</div>
45+
@endforelse
46+
</div>
47+
</div>
48+
</div>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<x-settings-layout>
2+
3+
<livewire:user.settings.notifications />
4+
5+
</x-settings-layout>

routes/web.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,14 @@
6868
// Subscriptions
6969
Route::get('subscriptions/{subscription}/unsubscribe', [SubscriptionController::class, 'unsubscribe'])
7070
->name('subscriptions.unsubscribe');
71+
Route::get('subscribeable/{id}/{type}', [SubscriptionController::class, 'redirect'])->name('subscriptions.redirect');
7172

7273
// Settings
7374
Route::prefix('settings')->as('user.')->middleware('auth')->group(function () {
7475
Route::get('/', [User\SettingController::class, 'profile'])->name('settings');
7576
Route::put('/', [User\SettingController::class, 'update'])->name('settings.update');
7677
Route::view('/customization', 'user.settings.customization')->name('customization')->middleware('verified');
78+
Route::view('/notifications', 'user.settings.notifications')->name('notifications')->middleware('verified');
7779
Route::get('/password', [User\SettingController::class, 'password'])->name('password')->middleware('verified');
7880
Route::put('/password', [User\SettingController::class, 'updatePassword'])->name('password.update');
7981
});

0 commit comments

Comments
 (0)