MessageTypeEnum::class ]; /** * The attributes that are mass assignable. * * @return void */ protected static function booted() { static::created(function (Message $message) { $message->load(['user' => function ($q) { $q->withTrashed(); }]); /** @var \App\Models\Ticket $ticket */ $ticket = $message->ticket; if ($message->user) { $ticket->load(['user' => function ($q) { $q->withTrashed(); }]); /** @var \App\Models\User $messageUser */ $messageUser = $message->user()->withTrashed()->firstOrFail(); // * Send mail to mentionned users\ /** @var \Illuminate\Support\Collection<\App\Models\User> */ $dontNotifyUsers = $ticket->sendBeenMentionnedToUser($message); // * Ignorer le cas où le message est privé et l'auteur du ticket n'est pas admin. if (!$ticket->user->isAdmin() && $message->type->equals(MessageTypeEnum::private)) { $dontNotifyUsers->push($ticket->user); } // * Filter Users if the message is private. if ($message->type->equals(MessageTypeEnum::private)) { $dontNotifyUsers = $dontNotifyUsers->concat( // * Add to ignore list all non Admin users. $ticket->subscriptions->filter(function (User $suscribedUser) { return !$suscribedUser->isAdmin(); }) ); } // * If email has not been sen to ticket author yet. if ( !$dontNotifyUsers->contains(function (User $dontNotifyUser) use ($ticket) { return $dontNotifyUser->id === $ticket->user->id; }) 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' => $messageUser->name, 'message' => $message->message ]) )); $dontNotifyUsers->push($ticket->user); } // ? Is message author is admin ? if ($messageUser->isAdmin()) { // Url: https://supportweb.ldc.fr/ticket/583/message/create. // SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '583-8' for key 'PRIMARY' // $ticket->subscriptions()->attach($messageUser); // Add subscription. if (!$messageUser->subscriptions()->find($ticket->id)) { $messageUser->subscriptions()->attach($ticket->id); \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', [ 'name' => $message->user->name, 'message' => $message->message ]), $dontNotifyUsers )); }//end if }); } // * RELATIONSHIPS /** * BelongsTo Ticket relation * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function ticket() { return $this->belongsTo(Ticket::class, 'ticket_id'); } /** * BelongsTo User relation * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function user() { return $this->belongsTo(User::class, 'user_id'); } }