From f5fe094c4a165cba45f85df8dd166ec496f4c5ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Wed, 2 Feb 2022 13:51:45 +0100 Subject: [PATCH] Ticket 647: - Fix double mails send. - If admin answers ticket he will auto subscribe to it. - Equipe web always receive ticket status changes --- app/Events/NotifyAdmin.php | 32 +++++++++++++++++++ app/Listeners/SendNotificationMailToAdmin.php | 23 +++++++++++++ .../SendSubscriptionsNotificationsMail.php | 5 ++- app/Mail/TicketUpdate.php | 2 +- app/Models/Message.php | 27 ++++++++++------ app/Models/Ticket.php | 20 +++++++++--- app/Providers/EventServiceProvider.php | 3 ++ config/mail.php | 2 +- 8 files changed, 96 insertions(+), 18 deletions(-) create mode 100644 app/Events/NotifyAdmin.php create mode 100644 app/Listeners/SendNotificationMailToAdmin.php diff --git a/app/Events/NotifyAdmin.php b/app/Events/NotifyAdmin.php new file mode 100644 index 0000000..d319fba --- /dev/null +++ b/app/Events/NotifyAdmin.php @@ -0,0 +1,32 @@ +ticket = $ticket; + $this->corpsMaj = $corpsMaj; + } +} diff --git a/app/Listeners/SendNotificationMailToAdmin.php b/app/Listeners/SendNotificationMailToAdmin.php new file mode 100644 index 0000000..ac0d903 --- /dev/null +++ b/app/Listeners/SendNotificationMailToAdmin.php @@ -0,0 +1,23 @@ +ticket; + Mail::to(config('mail.MAIL_ADMIN')) + ->send(new TicketUpdate($ticket, $event->corpsMaj)); + } +} diff --git a/app/Listeners/SendSubscriptionsNotificationsMail.php b/app/Listeners/SendSubscriptionsNotificationsMail.php index 0ba5511..53da1d1 100644 --- a/app/Listeners/SendSubscriptionsNotificationsMail.php +++ b/app/Listeners/SendSubscriptionsNotificationsMail.php @@ -4,6 +4,7 @@ namespace App\Listeners; use App\Events\NotifySubscriptions; use App\Mail\TicketUpdate; +use App\Models\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Mail; @@ -22,7 +23,9 @@ class SendSubscriptionsNotificationsMail foreach ($event->ticket->subscriptions as $sub) { if ( $sub->email !== $ignoreConnectedUserEmail and - !$ignoreUsers->contains($sub->email) + !$ignoreUsers->filter(function (User $user) use ($sub) { + return $user->email === $sub->email; + })->count() ) { Mail::to($sub->email) ->send(new TicketUpdate($event->ticket, $event->corpsMaj)); diff --git a/app/Mail/TicketUpdate.php b/app/Mail/TicketUpdate.php index 886f1c5..33ed6e9 100644 --- a/app/Mail/TicketUpdate.php +++ b/app/Mail/TicketUpdate.php @@ -38,7 +38,7 @@ class TicketUpdate extends Mailable public function build() { $ticket = $this->ticket; - $corpsMaj = Utils::plainToHtml($this->corpsMaj); + $corpsMaj = \html_entity_decode(Utils::plainToHtml($this->corpsMaj)); return $this->subject("[SupportWeb][{$ticket->site->name}] Ticket n°$ticket->id") ->view('emails.ticket-update', compact('ticket', 'corpsMaj')); } diff --git a/app/Models/Message.php b/app/Models/Message.php index 4d6b41f..93467ce 100644 --- a/app/Models/Message.php +++ b/app/Models/Message.php @@ -19,19 +19,32 @@ class Message extends Model protected static function booted() { static::created(function (Message $message) { + /** @var \App\Models\Ticket $ticket */ $ticket = $message->ticket; if ($message->user) { $ticket->load('user'); - if ($ticket->user !== $message->user) { + /** @var \App\Models\User $messageUser */ + $messageUser = $message->user; + // * Send mail to mentionned users + $usersNotified = $ticket->sendBeenMentionnedToUser($message); + // * If email has not been sen to ticket author yet. + if (!$usersNotified->contains($ticket->user) and $ticket->user->id !== $messageUser->id) { + // * Send mail to ticket author event(new NotifyTicketCreator( $ticket, trans('Nouvelle réponse de :name :
:message sur votre ticket', [ - 'name' => $message->user->name, + 'name' => $messageUser->name, 'message' => $message->message ]) )); + $usersNotified->push($ticket->user); } - $usersNotified = $ticket->sendBeenMentionnedToUser($message); + // ? Is message author is admin ? + if ($messageUser->isAdmin()) { + $ticket->subscriptions()->attach($messageUser); + \session()->flash('info', trans('Vous avez été inscrit.')); + } + // * Send mail to other subscribed users event(new NotifySubscriptions( $message->ticket, trans('Nouvelle réponse de :name :
:message', [ @@ -40,13 +53,7 @@ class Message extends Model ]), $usersNotified )); - } else { - event(new NotifyTicketCreator( - $ticket, - trans('Votre ticket : :message', [ - 'message' => $message->message - ]) - )); + // } }); } diff --git a/app/Models/Ticket.php b/app/Models/Ticket.php index 2e359d5..c3878ac 100644 --- a/app/Models/Ticket.php +++ b/app/Models/Ticket.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Enums\Role; use App\Enums\TicketStatus; use App\Enums\TicketType; +use App\Events\NotifyAdmin; use App\Events\NotifySubscriptions; use App\Events\TicketStatusChanged; use App\Jobs\SendTicketMentionMail; @@ -42,11 +43,20 @@ class Ticket extends Model } }); static::updating(function (Ticket $ticket) { - $oldStatus = Ticket::where('id', $ticket->id)->first()->status; - if (!$ticket->status->equals($oldStatus)) { - event(new TicketStatusChanged($ticket, $oldStatus, auth()->user())); + if (!$ticket->original['status'] !== $ticket->status->value) { + event(new TicketStatusChanged( + $ticket, + TicketStatus::make($ticket->original['status']), + auth()->user() + )); event(new NotifySubscriptions($ticket, sprintf( - 'Le ticket à changé de status : %s', + '%s a modifié le statut en %s', + auth()->user()->name, + $ticket->status->label + ))); + event(new NotifyAdmin($ticket, sprintf( + '%s a modifié le statut en %s', + auth()->user()->name, $ticket->status->label ))); } @@ -94,7 +104,7 @@ class Ticket extends Model * returns and array with to users notified * * @param Message $message - * @return array[User] + * @return Collection */ public function sendBeenMentionnedToUser(Message $message): Collection { diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index d9d8aef..5aa3010 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -3,6 +3,7 @@ namespace App\Providers; use App\Events\FileCreated; +use App\Events\NotifyAdmin; use App\Events\NotifySubscriptions; use App\Events\NotifyTicketCreator; use App\Events\ProjectUpdated; @@ -10,6 +11,7 @@ use App\Events\SiteUpdated; use App\Events\TicketStatusChanged; use App\Listeners\AddStatusMessages; use App\Listeners\HandleLoggable; +use App\Listeners\SendNotificationMailToAdmin; use App\Listeners\SendNotificationMailToTicketCreator; use App\Listeners\SendSubscriptionsNotificationsMail; use Illuminate\Auth\Events\Registered; @@ -29,6 +31,7 @@ class EventServiceProvider extends ServiceProvider TicketStatusChanged::class => [AddStatusMessages::class], NotifySubscriptions::class => [SendSubscriptionsNotificationsMail::class], NotifyTicketCreator::class => [SendNotificationMailToTicketCreator::class], + NotifyAdmin::class => [SendNotificationMailToAdmin::class], FileCreated::class => [HandleLoggable::class], ProjectUpdated::class => [HandleLoggable::class], SiteUpdated::class => [HandleLoggable::class] diff --git a/config/mail.php b/config/mail.php index 8df1fc5..1231c5d 100644 --- a/config/mail.php +++ b/config/mail.php @@ -92,7 +92,7 @@ return [ ], 'contactsList' => [ - 'serviceweb' => env('MAIL_LIST_SERVICEWEB', 'informatique.internet@ldc.fr') + 'serviceweb' => env('MAIL_LIST_SERVICEWEB', 'equipe.web@ldc.fr') ], /*