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 $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' => $messageUser->name, 'message' => $message->message ]) )); $usersNotified->push($ticket->user); } // ? Is message author is admin ? if ($messageUser->isAdmin()) { // TODO: investigate why this make errors on prod, // 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 ]), $usersNotified )); }//end if }); } public function ticket() { return $this->belongsTo(Ticket::class, 'ticket_id'); } public function user() { return $this->belongsTo(User::class, 'user_id'); } public function saveFile(Site $site, Ticket $ticket, UploadedFile $file) { $siteAssetFullPath = Site::ticketAssetsFullPath($site->slug_name); $fileAssetPath = Site::ticketAssetsPath($site->slug_name); $fileName = sprintf( '%s-%s-%d-%d.%s', $site->slug_name, $ticket->id, rand(), $file->extension() ); $file->move(sprintf('%s/messages/%d', $siteAssetFullPath, $ticket->id), $fileName); return sprintf('%s/%d/%s', $fileAssetPath, $ticket->id, $fileName); } }