From 126957a3dff61a2b19ea1e167dccd5c643097923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Tue, 18 May 2021 22:52:46 +0200 Subject: [PATCH] ticket mention @user + mail --- IDEAS.md | 4 +- app/Http/Controllers/TicketController.php | 24 +++++++++- app/Jobs/SendTicketMentionMail.php | 45 +++++++++++++++++++ app/Mail/TicketMention.php | 45 +++++++++++++++++++ app/Mail/TicketUpdate.php | 15 +++++-- resources/views/mails/new-ticket.blade.php | 2 +- .../views/mails/ticket-mention.blade.php | 9 ++++ resources/views/mails/ticket-update.blade.php | 2 +- 8 files changed, 137 insertions(+), 9 deletions(-) create mode 100644 app/Jobs/SendTicketMentionMail.php create mode 100644 app/Mail/TicketMention.php create mode 100644 resources/views/mails/ticket-mention.blade.php diff --git a/IDEAS.md b/IDEAS.md index e7e5c79..a0cddf1 100644 --- a/IDEAS.md +++ b/IDEAS.md @@ -1,4 +1,6 @@ - Permettre à un user de suivre un projet -- permettre d'insérer des @user dans le texte avec lien vers user +- ~~permettre d'insérer des @user dans le texte avec lien vers user~~ + ~~pas de liens vers user mais mise en form~~ +- ~~parse de @user + envoie de mail si un seul user est trouvé~~ - permettre de modifier son mot de passe ? (je crois que ça n'as pas été mis exprès) - ~~parser les liens http~~ diff --git a/app/Http/Controllers/TicketController.php b/app/Http/Controllers/TicketController.php index 278482e..1a7bb07 100644 --- a/app/Http/Controllers/TicketController.php +++ b/app/Http/Controllers/TicketController.php @@ -3,20 +3,21 @@ namespace App\Http\Controllers; use App\Enums\TicketStatus; -use App\Enums\TicketType; use App\Events\NotifySubscriptions; -use App\Events\TicketStatusChanged; use App\Http\Requests\ChangeTicketStatus; use App\Http\Requests\CreateMessage; use App\Http\Requests\SortTickets; use App\Http\Requests\StoreTicket; use App\Http\Requests\UpdateTicket; +use App\Jobs\SendTicketMentionMail; use App\Mail\NewTicket; +use App\Mail\TicketMention; use App\Models\Message; use App\Models\Project; use App\Models\Ticket; use App\Models\User; use Exception; +use Illuminate\Database\QueryException; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Mail; @@ -216,6 +217,25 @@ class TicketController extends Controller ]) )); + // find @user + send mail si un seul user est trouvé + $matches = []; + \preg_match_all('/@\w*/', $message->message, $matches); + $matches = collect($matches[0] ?? [])->unique(); + foreach ($matches as $pseudo_usertag) { + try { + $user = User::where('name', 'LIKE', '%' . ltrim($pseudo_usertag, '@') . '%') + ->whereDoesntHave('subscriptions', function ($q) use ($ticket) { + $q->where('id', $ticket->id); + })->firstOrFail(); + SendTicketMentionMail::dispatchAfterResponse( + $user, + new TicketMention($ticket, $message->message) + ); + } catch (QueryException $e) { + continue; + } + } + return back(); } diff --git a/app/Jobs/SendTicketMentionMail.php b/app/Jobs/SendTicketMentionMail.php new file mode 100644 index 0000000..3bbc35c --- /dev/null +++ b/app/Jobs/SendTicketMentionMail.php @@ -0,0 +1,45 @@ +user = $user; + $this->mail = $mail; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + Mail::to($this->user->email)->send($this->mail); + Log::debug(sprintf('Mention mail sent to %s', $this->user->email)); + } +} diff --git a/app/Mail/TicketMention.php b/app/Mail/TicketMention.php new file mode 100644 index 0000000..a38f6fa --- /dev/null +++ b/app/Mail/TicketMention.php @@ -0,0 +1,45 @@ +ticket = $ticket; + $this->corpsMaj = $corpsMaj; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + $ticket = $this->ticket; + $corpsMaj = Utils::plainToHtml($this->corpsMaj); + return $this->subject("[SupportWeb] Vous avez été mentionné sur le ticket n° $ticket->id") + ->view('mails.ticket-mention', compact('ticket', 'corpsMaj')); + } +} diff --git a/app/Mail/TicketUpdate.php b/app/Mail/TicketUpdate.php index 17673de..72fd314 100644 --- a/app/Mail/TicketUpdate.php +++ b/app/Mail/TicketUpdate.php @@ -2,6 +2,8 @@ namespace App\Mail; +use App\Lib\Utils; +use App\Models\Ticket; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; @@ -9,16 +11,21 @@ use Illuminate\Queue\SerializesModels; class TicketUpdate extends Mailable { - use Queueable, SerializesModels; + use Queueable; + use SerializesModels; - private $ticket, $corpsMaj; + /** @var Ticket */ + private $ticket; + + /** @var string */ + private $corpsMaj; /** * Create a new message instance. * * @return void */ - public function __construct($ticket, $corpsMaj) + public function __construct(Ticket $ticket, string $corpsMaj) { $this->ticket = $ticket; $this->corpsMaj = $corpsMaj; @@ -32,7 +39,7 @@ class TicketUpdate extends Mailable public function build() { $ticket = $this->ticket; - $corpsMaj = $this->corpsMaj; + $corpsMaj = Utils::plainToHtml($this->corpsMaj); return $this->subject("[SupportWeb] Le ticket n°" . $ticket->id . " à été mis à jour")->view('mails.ticket-update', compact('ticket', 'corpsMaj')); } } diff --git a/resources/views/mails/new-ticket.blade.php b/resources/views/mails/new-ticket.blade.php index 2fa6d10..7b18c5c 100644 --- a/resources/views/mails/new-ticket.blade.php +++ b/resources/views/mails/new-ticket.blade.php @@ -3,7 +3,7 @@

Description :
diff --git a/resources/views/mails/ticket-mention.blade.php b/resources/views/mails/ticket-mention.blade.php new file mode 100644 index 0000000..12399e8 --- /dev/null +++ b/resources/views/mails/ticket-mention.blade.php @@ -0,0 +1,9 @@ +

Bonjour,

+

Vous avez été mentionné sur le ticket n°{{ $ticket->id }}:

+ +

{!! $corpsMaj !!}

+

Lien vers le ticket : Ouvrir dans un nouvel onglet

diff --git a/resources/views/mails/ticket-update.blade.php b/resources/views/mails/ticket-update.blade.php index 5f021c8..9b8fcc7 100644 --- a/resources/views/mails/ticket-update.blade.php +++ b/resources/views/mails/ticket-update.blade.php @@ -3,7 +3,7 @@

{!! $corpsMaj !!}

Lien vers le ticket : Ouvrir dans un nouvel onglet