diff --git a/app/Events/TaskDateUpdated.php b/app/Events/TaskDateUpdated.php new file mode 100644 index 0000000..af928d2 --- /dev/null +++ b/app/Events/TaskDateUpdated.php @@ -0,0 +1,45 @@ +userId = $userId; + $this->task = $task; + } + + /** + * Get the channels the event should broadcast on. + * + * @return array + */ + public function broadcastOn(): array + { + return [ + new PrivateChannel('user.' . $this->userId), + ]; + } + + public function broadcastAs() + { + return 'task.date.updated'; + } +} diff --git a/app/Http/Controllers/TasksController.php b/app/Http/Controllers/TasksController.php index d9626d9..e5a90d7 100644 --- a/app/Http/Controllers/TasksController.php +++ b/app/Http/Controllers/TasksController.php @@ -2,9 +2,11 @@ namespace App\Http\Controllers; +use App\Events\TaskDateUpdated; use App\Events\TaskParticipationCancelled; use App\Events\VolunteerAssignedToTask; use App\Events\VolunteerUnassignedFromTask; +use App\Mail\TaskDateUpdateMail; use App\Models\Event; use App\Models\Notification; use App\Mail\VolunteerAssignToTaskMail; @@ -18,6 +20,7 @@ use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Mail; use App\Mail\TaskParticipationCancelledMail; +use App\Services\FormatDate; class TasksController extends Controller { @@ -80,7 +83,7 @@ class TasksController extends Controller try { $task = Task::find($request["task_id"]); - $event = \App\Models\Event::find($task->events_id); + $event = Event::find($task->events_id); if ($task->users()->where('user_id', $id)->exists()) { return response()->json(["message" => "User already assigned to this task"], 400); @@ -112,6 +115,7 @@ class TasksController extends Controller 'taskName' => $task->name, 'start' => $task->start, 'end' => $task->end, + 'eventName' => $event->name, ]; Mail::to($user->email)->send(new VolunteerAssignToTaskMail($data)); } @@ -146,7 +150,7 @@ class TasksController extends Controller try { $task = Task::with(['users'])->find($id); - $event = \App\Models\Event::find($task->events_id); + $event = Event::find($task->events_id); if (!$task) { return response()->json(["message" => "Task not found"], 404); @@ -175,6 +179,7 @@ class TasksController extends Controller 'taskName' => $task->name, 'start' => $event->start, 'end' => $task->end, + 'eventName' => $event->name, ]; Mail::to($user->email)->send(new TaskParticipationCancelledMail($data)); } @@ -197,8 +202,41 @@ class TasksController extends Controller } try { - $task = Task::find($id); + if(( + $task->start !== $request["start"] || $task->end !== $request["end"] + ) && + Carbon::now()->lessThanOrEqualTo($task->end) + ){ + $participants = $task->users; + $formatedTaskStart = FormatDate::formatDate($task->start); + $formatedTaskEnd = FormatDate::formatDate($task->end); + $event = Event::find($task->events_id); + + foreach ($participants as $user) { + $notification = Notification::create([ + 'content' => "La date de la tâche {$task->title} de l'événement {$task->event->name} à été mis à jour. Cette tâche aura maintenant lieu du {$formatedTaskStart} au {$formatedTaskEnd}." + ]); + $notification->users()->attach($user->id); + broadcast(new TaskDateUpdated( + $user->id, + $task, + )); + + $data = [ + 'name' => $user->name, + 'lastname' => $user->lastname, + 'taskName' => $task->name, + 'oldStart' => $formatedTaskStart, + 'oldEnd' => $formatedTaskEnd, + 'newStart' => $request["start"], + 'newEnd' => $request["end"], + 'eventName' => $event->name, + ]; + Mail::to($user->email)->send(new TaskDateUpdateMail($data)); + } + } + $task->name = $request["name"]; $task->description = $request["description"]; $task->start = $request["start"]; @@ -242,7 +280,7 @@ class TasksController extends Controller try { $task = Task::find($request["task_id"]); - $event = \App\Models\Event::find($task->events_id); + $event = Event::find($task->events_id); if (!$task) { return response()->json(["message" => "Task not found"], 404); @@ -273,6 +311,7 @@ class TasksController extends Controller 'taskName' => $task->name, 'start' => $task->start, 'end' => $task->end, + 'eventName' => $event->name, ]; Mail::to($user->email)->send(new VolunteerUnassignToTaskMail($data)); } diff --git a/app/Mail/TaskDateUpdateMail.php b/app/Mail/TaskDateUpdateMail.php new file mode 100644 index 0000000..6405074 --- /dev/null +++ b/app/Mail/TaskDateUpdateMail.php @@ -0,0 +1,64 @@ +data = $data; + } + + /** + * Get the message envelope. + */ + public function envelope(): Envelope + { + return new Envelope( + subject: 'Date de tâche modifiée - Comité des fêtes de Beaupont', + ); + } + + /** + * Get the message content definition. + */ + public function content(): Content + { + return new Content( + view: 'mails.updateRole', + with: [ + 'name' => $this->data['name'], + 'lastname' => $this->data['lastname'], + 'taskName' => $this->data['taskName'], + 'oldStart' => $this->data['oldStart'], + 'oldEnd' => $this->data['oldEnd'], + 'newStart' => $this->data['newStart'], + 'newEnd' => $this->data['newEnd'], + 'eventName' => $this->data['eventName'], + ] + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments(): array + { + return []; + } +} diff --git a/resources/views/mails/taskDateUpdate.blade.php b/resources/views/mails/taskDateUpdate.blade.php new file mode 100644 index 0000000..2f48e99 --- /dev/null +++ b/resources/views/mails/taskDateUpdate.blade.php @@ -0,0 +1,32 @@ + + + + + + Date de tâche modifiée + + +
+

Bonjour {{ $name }} {{ $lastname }},

+ +

+ La date de la tâche {{ $taskName }} de l'événement {{ $eventName }} a été modifié par un administrateur. + Cette tâche avait lieu du {{ $oldStart }} au {{ $oldEnd }}. Et aura maintenant lieu du {{ $newStart }} au {{ $newEnd }}. +

+ +

+ Si vous pensez qu’il s’agit d’une erreur ou si vous souhaitez plus d’informations, + merci de contacter l’équipe du Comité des fêtes de Beaupont. +

+ +

+ À très bientôt,
+ L’équipe du Comité des fêtes de Beaupont +

+
+ +

+ Cet email a été envoyé automatiquement, merci de ne pas y répondre. +

+ +