ticket mention @user + mail
This commit is contained in:
parent
10eba95e06
commit
126957a3df
8 changed files with 137 additions and 9 deletions
4
IDEAS.md
4
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~~
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
45
app/Jobs/SendTicketMentionMail.php
Normal file
45
app/Jobs/SendTicketMentionMail.php
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace App\Jobs;
|
||||
|
||||
use App\Mail\TicketMention;
|
||||
use App\Models\User;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
class SendTicketMentionMail implements ShouldQueue
|
||||
{
|
||||
use Dispatchable;
|
||||
use SerializesModels;
|
||||
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/** @var TicketMention */
|
||||
private $mail;
|
||||
|
||||
/**
|
||||
* Create a new job instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(User $user, TicketMention $mail)
|
||||
{
|
||||
$this->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));
|
||||
}
|
||||
}
|
||||
45
app/Mail/TicketMention.php
Normal file
45
app/Mail/TicketMention.php
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use App\Lib\Utils;
|
||||
use App\Models\Ticket;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class TicketMention extends Mailable
|
||||
{
|
||||
use Queueable;
|
||||
use SerializesModels;
|
||||
|
||||
/** @var Ticket */
|
||||
private $ticket;
|
||||
|
||||
/** @var string */
|
||||
private $corpsMaj;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Ticket $ticket, string $corpsMaj)
|
||||
{
|
||||
$this->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'));
|
||||
}
|
||||
}
|
||||
|
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<ul>
|
||||
<li>Projet : {{ $ticket->project->name }}</li>
|
||||
<li>Type : {{ $ticket->type === "0" ? "Bug" : "Évolution" }}</li>
|
||||
<li>Créer par : {{ $ticket->user->name }}</li>
|
||||
<li>Créé par : {{ $ticket->user->name }}</li>
|
||||
</ul>
|
||||
<p>
|
||||
Description :<br>
|
||||
|
|
|
|||
9
resources/views/mails/ticket-mention.blade.php
Normal file
9
resources/views/mails/ticket-mention.blade.php
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<p>Bonjour,</p>
|
||||
<p>Vous avez été mentionné sur le ticket n°{{ $ticket->id }}:</p>
|
||||
<ul>
|
||||
<li>Projet : {{ $ticket->project->name }}</li>
|
||||
<li>Type : {{ $ticket->type === 0 ? "Bug" : "Évolution" }}</li>
|
||||
<li>Créé par : {{ $ticket->user->name }}</li>
|
||||
</ul>
|
||||
<p>{!! $corpsMaj !!}</p>
|
||||
<p>Lien vers le ticket : <a href="{{ route('ticket.show', $ticket->id) }}" target="_blank">Ouvrir dans un nouvel onglet</a></p>
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
<ul>
|
||||
<li>Projet : {{ $ticket->project->name }}</li>
|
||||
<li>Type : {{ $ticket->type === 0 ? "Bug" : "Évolution" }}</li>
|
||||
<li>Créer par : {{ $ticket->user->name }}</li>
|
||||
<li>Créé par : {{ $ticket->user->name }}</li>
|
||||
</ul>
|
||||
<p>{!! $corpsMaj !!}</p>
|
||||
<p>Lien vers le ticket : <a href="{{ route('ticket.show', $ticket->id) }}" target="_blank">Ouvrir dans un nouvel onglet</a></p>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue