ticket; if ($message->user) { $ticket->load('user'); if ($ticket->user !== $message->user) { event(new NotifyTicketCreator( $ticket, trans('Nouvelle réponse de :name :
:message sur votre ticket', [ 'name' => $message->user->name, 'message' => $message->message ]) )); } // find @user + send mail si un seul user est trouvé $usersNotified = collect([]); $matches = []; $ticket->load('project'); \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, '@') . '%') ->where('email', '!=', $ticket->user->email) ->where(function ($q) use ($ticket) { $q->whereHas('projects', function ($q) use ($ticket) { $q->where('id', $ticket->project->id); })->orWhere('role', Role::admin()->value); })->firstOrFail(); $usersNotified->add($user); SendTicketMentionMail::dispatchAfterResponse( $user, new TicketMention($ticket, $message->message) ); } catch (ModelNotFoundException $e) { continue; } } event(new NotifySubscriptions( $message->ticket, trans('Nouvelle réponse de :name :
:message', [ 'name' => $message->user->name, 'message' => $message->message ]), $usersNotified )); } else { event(new NotifyTicketCreator( $ticket, trans('Votre ticket : :message', [ 'message' => $message->message ]) )); } }); } public function ticket() { return $this->belongsTo(Ticket::class, 'ticket_id'); } public function user() { return $this->belongsTo(User::class, 'user_id'); } public function saveFile(Project $project, Ticket $ticket, UploadedFile $file) { $projectAssetFullPath = Project::ticketAssetsFullPath($project->slug_name); $fileAssetPath = Project::ticketAssetsPath($project->slug_name); $fileName = sprintf( '%s-%s-%d-%d.%s', $project->slug_name, $ticket->id, rand(), $file->extension() ); $file->move(sprintf('%s/messages/%d', $projectAssetFullPath, $ticket->id), $fileName); return sprintf('%s/%d/%s', $fileAssetPath, $ticket->id, $fileName); } }