diff --git a/app/Events/NotifySubscriptions.php b/app/Events/NotifySubscriptions.php
new file mode 100644
index 0000000..e9a15ec
--- /dev/null
+++ b/app/Events/NotifySubscriptions.php
@@ -0,0 +1,25 @@
+ticket = $ticket;
+ $this->corpsMaj = $corpsMaj;
+ }
+}
diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php
index d9d9b79..2355788 100644
--- a/app/Http/Controllers/TicketController.php
+++ b/app/Http/Controllers/TicketController.php
@@ -2,11 +2,13 @@
namespace App\Http\Controllers;
+use App\Events\NotifySubscriptions;
use App\Events\TicketStatusChanged;
use App\Mail\NewTicket;
use App\Models\Message;
use App\Models\Project;
use App\Models\Ticket;
+use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
@@ -30,9 +32,12 @@ class TicketController extends Controller
$ticket = Ticket::find($id);
$status = $this->status;
$messages = $ticket->messages()->orderBy('created_at', 'DESC')->get();
+ $isSubscribed = false;
if (!$ticket)
abort(404);
- return view('ticket.show', compact('ticket', 'status', 'messages'));
+ if ($ticket->subscriptions()->where('user_id', Auth::user()->id)->count() !== 0)
+ $isSubscribed = true;
+ return view('ticket.show', compact('ticket', 'status', 'messages', 'isSubscribed'));
}
public function create() {
@@ -164,6 +169,7 @@ class TicketController extends Controller
$ticket->status = $request->status;
$ticket->save();
event(new TicketStatusChanged($ticket, $this->status));
+ event(new NotifySubscriptions($ticket, "Le ticket à changé de status : " . $this->status[$ticket->status]));
return back();
}
@@ -203,6 +209,13 @@ class TicketController extends Controller
$message->save();
}
+ event(new NotifySubscriptions($ticket, "Nouvelle réponse de " . $message->user->name . " :
" . $message->message));
+
+ return back();
+ }
+
+ public function subscribe(Request $request, $id) {
+ User::find(Auth::user()->id)->subscriptions()->toggle($id);
return back();
}
}
diff --git a/app/Listeners/SendNotificationMail.php b/app/Listeners/SendNotificationMail.php
new file mode 100644
index 0000000..55fb583
--- /dev/null
+++ b/app/Listeners/SendNotificationMail.php
@@ -0,0 +1,37 @@
+ticket->subscriptions as $sub)
+ if ($sub->email !== Auth::user()->email)
+ Mail::to($sub->email)->send(new TicketUpdate($event->ticket, $event->corpsMaj));
+ }
+}
diff --git a/app/Mail/TicketUpdate.php b/app/Mail/TicketUpdate.php
new file mode 100644
index 0000000..17673de
--- /dev/null
+++ b/app/Mail/TicketUpdate.php
@@ -0,0 +1,38 @@
+ticket = $ticket;
+ $this->corpsMaj = $corpsMaj;
+ }
+
+ /**
+ * Build the message.
+ *
+ * @return $this
+ */
+ public function build()
+ {
+ $ticket = $this->ticket;
+ $corpsMaj = $this->corpsMaj;
+ return $this->subject("[SupportWeb] Le ticket n°" . $ticket->id . " à été mis à jour")->view('mails.ticket-update', compact('ticket', 'corpsMaj'));
+ }
+}
diff --git a/app/Models/Ticket.php b/app/Models/Ticket.php
index 7d3bd3e..ff43a4d 100644
--- a/app/Models/Ticket.php
+++ b/app/Models/Ticket.php
@@ -20,4 +20,8 @@ class Ticket extends Model
public function messages() {
return $this->hasMany('App\Models\Message', 'ticket_id');
}
+
+ public function subscriptions() {
+ return $this->belongsToMany('App\Models\User', 'subscriptions');
+ }
}
diff --git a/app/Models/User.php b/app/Models/User.php
index 55dce5a..e1034d2 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -48,4 +48,8 @@ class User extends Authenticatable
public function messages() {
return $this->hasMany('App\Models\Messages', 'user_id');
}
+
+ public function subscriptions() {
+ return $this->belongsToMany('App\Models\Ticket', 'subscriptions');
+ }
}
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index e925966..3b8ac12 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -21,6 +21,9 @@ class EventServiceProvider extends ServiceProvider
'App\Events\TicketStatusChanged' => [
'App\Listeners\AddStatusMessages',
],
+ 'App\Events\NotifySubscriptions' => [
+ 'App\Listeners\SendNotificationMail'
+ ],
];
/**
diff --git a/database/migrations/2020_11_26_132557_create_subscriptions.php b/database/migrations/2020_11_26_132557_create_subscriptions.php
new file mode 100644
index 0000000..6a22058
--- /dev/null
+++ b/database/migrations/2020_11_26_132557_create_subscriptions.php
@@ -0,0 +1,32 @@
+foreignId('ticket_id')->constrained('tickets');
+ $table->foreignId('user_id')->constrained('users');
+ $table->primary(['ticket_id', 'user_id']);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('subscriptions');
+ }
+}
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index 82710b1..91614f7 100644
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -17,7 +17,9 @@
Bonjour,
+Le ticket n°{{ $ticket->id }} à été mis à jour :
+{!! $corpsMaj !!}
+Lien vers le ticket : Ouvrir dans un nouvel onglet
diff --git a/resources/views/ticket/show.blade.php b/resources/views/ticket/show.blade.php index 6588af7..40a816b 100644 --- a/resources/views/ticket/show.blade.php +++ b/resources/views/ticket/show.blade.php @@ -3,13 +3,20 @@ @section('content')