authorizeResource(Ticket::class, 'ticket'); } public function index(SortTickets $request) { $tickets = Ticket::query(); if ($request->status) { $tickets = $tickets->where('status', TicketStatus::archived()); } else { $tickets = $tickets->where('status', '<>', TicketStatus::archived()); } if ($request->prs) { Session::remove('tickets.pr'); } if ($request->sort_col) { Session::put('tickets.sort_col', $request->sort_col); Session::save(); } if ($request->sort_way) { Session::put('tickets.sort_way', $request->sort_way); Session::save(); } if ($request->pr) { Session::put('tickets.pr', $request->pr); Session::save(); } if (Session::has('tickets.pr')) { $tickets = $tickets->where('project_id', Session::get('tickets.pr')); } if (Session::has('tickets.sort_col') and Session::has('tickets.sort_way')) { switch (Session::get('tickets.sort_col')) { case 'id': $tickets = $tickets->orderBy('id', Session::get('tickets.sort_way')); break; case 'project': $tickets = $tickets->orderBy('project_id', Session::get('tickets.sort_way')); break; case 'created_at': $tickets = $tickets->orderBy('created_at', Session::get('tickets.sort_way')); break; case 'created_by': $tickets = $tickets->orderBy('created_by', Session::get('tickets.sort_way')); break; case 'type': $tickets = $tickets->orderBy('type', Session::get('tickets.sort_way')); break; case 'status': $tickets = $tickets->orderBy('status', Session::get('tickets.sort_way')); break; } } $tickets = $tickets->paginate(); $projects = Project::select('id', 'name')->get(); return view('ticket.index', compact('tickets', 'projects')); } public function show(Ticket $ticket) { $messages = $ticket->messages()->orderBy('created_at', 'DESC')->get(); $isSubscribed = (bool)$ticket->subscriptions()->where('user_id', Auth::user()->id)->count(); return view('ticket.show', compact('ticket', 'messages', 'isSubscribed')); } public function create() { $projects = Project::all(); if (!count($projects)) { return redirect()->route('project.create') ->with('warning', 'Vous devez tout d\'abord créer un projet pour y ajouter un ticket'); } return view('ticket.create', compact('projects')); } public function store(StoreTicket $request) { $project = Project::findOrFail($request->project_id); $ticket = new Ticket($request->validated()); if ($request->file_ticket) { $ticket->file = Ticket::saveFile($project, $ticket, $ticket->type, $request->file_ticket); } if ($request->file_ticket2) { $ticket->file2 = Ticket::saveFile($project, $ticket, $ticket->type, $request->file_ticket2); } $ticket->user()->associate(auth()->user()); $ticket->save(); if (config('mail.MAIL_ADMIN')) { Mail::to(config('mail.MAIL_ADMIN'))->send(new NewTicket($ticket)); } else { throw new Exception('Missing MAIL_ADMIN in .env'); } return redirect()->route('home')->with('success', 'Ticket enregistré !'); } // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass public function edit(Ticket $ticket) { $projects = Project::all(); return view('ticket.edit', compact('ticket', 'projects')); } public function update(UpdateTicket $request, Ticket $ticket) { $project = Project::findOrFail($request->project_id); $ticket->fill($request->validated()); if ($request->file_ticket) { if (File::exists($ticket->file)) { File::delete($ticket->file); } $ticket->file = Ticket::saveFile($project, $ticket, $ticket->type, $request->file_ticket); } if ($request->file_ticket2) { if (File::exists($ticket->file2)) { File::delete($ticket->file2); } $ticket->file2 = Ticket::saveFile($project, $ticket, $ticket->type, $request->file_ticket2); } $ticket->save(); return redirect()->route('ticket.edit', $ticket->id)->with('success', 'Modifications enregistrées !'); } public function changeStatus(ChangeTicketStatus $request, Ticket $ticket) { $ticket->fill($request->validated()); $ticket->save(); return back(); } public function createMessage(CreateMessage $request, Ticket $ticket) { $fileMessage = $request->file_message; $message = new Message($request->validated()); $message->user()->associate(auth()->user()); $message->ticket()->associate($ticket); $message->save(); if ($request->file_message) { $projectSlug = Str::slug($ticket->project->name); $fileMessage = $request->file_message; $fileName = $projectSlug . '-ticket-' . $ticket->id . '-message-' . $message->id . '.' . $fileMessage->extension(); $fileMessage->move(public_path('fichiers/' . $projectSlug . '/' . $ticket->id . '/'), $fileName); $filePath = 'fichiers/' . $projectSlug . '/' . $ticket->id . '/' . $fileName; $message->file = $filePath; $message->save(); } event(new NotifySubscriptions( $message->ticket, trans('Nouvelle réponse de :name :
:message', [ 'name' => $message->user->name, 'message' => $message->message ]) )); return back(); } public function setToArchive(Ticket $ticket) { $ticket->status = TicketStatus::archived(); $ticket->saveOrFail(); return redirect()->route('ticket.index'); } public function subscribe(Ticket $ticket) { User::find(Auth::user()->id)->subscriptions()->toggle($ticket->id); return back(); } }