$ticketSettings, 'tickets' => Ticket::where('user_id', Auth::user()->id)->paginate(10), 'ticketcategories' => TicketCategory::all(), 'locale_datatables' => $locale_settings->datatables ]); } public function store(Request $request, TicketSettings $ticket_settings) { $this->validate( $request, [ 'title' => 'required', 'ticketcategory' => 'required', 'priority' => 'required', 'message' => 'required', 'g-recaptcha-response' => ['required', 'recaptcha'], ] ); $ticket = new Ticket( [ 'title' => $request->input('title'), 'user_id' => Auth::user()->id, 'ticket_id' => strtoupper(Str::random(8)), 'ticketcategory_id' => $request->input('ticketcategory'), 'priority' => $request->input('priority'), 'message' => $request->input('message'), 'status' => 'Open', 'server' => $request->input('server'), ] ); $ticket->save(); $user = Auth::user(); $staffNotify = User::permission('admin.tickets.get_notification')->get(); foreach($staffNotify as $staff){ Notification::send($staff, new AdminCreateNotification($ticket, $user)); } $user->notify(new CreateNotification($ticket)); return redirect()->route('ticket.index')->with('success', __('A ticket has been opened, ID: #') . $ticket->ticket_id); } public function show($ticket_id, PterodactylSettings $ptero_settings) { $this->checkPermission(self::READ_PERMISSION); try { $ticket = Ticket::where('ticket_id', $ticket_id)->firstOrFail(); } catch (Exception $e) { return redirect()->back()->with('warning', __('Ticket not found on the server. It potentially got deleted earlier')); } $ticketcomments = $ticket->ticketcomments; $ticketcategory = $ticket->ticketcategory; $server = Server::where('id', $ticket->server)->first(); $pterodactyl_url = $ptero_settings->panel_url; return view('ticket.show', compact('ticket', 'ticketcategory', 'ticketcomments', 'server', 'pterodactyl_url')); } public function reply(Request $request) { //check in blacklist $check = TicketBlacklist::where('user_id', Auth::user()->id)->first(); if ($check && $check->status == 'True') { return redirect()->route('ticket.index')->with('error', __("You can't reply a ticket because you're on the blacklist for a reason: '" . $check->reason . "', please contact the administrator")); } $this->validate($request, ['ticketcomment' => 'required']); try { $ticket = Ticket::where('id', $request->input('ticket_id'))->firstOrFail(); } catch (Exception $e) { return redirect()->back()->with('warning', __('Ticket not found on the server. It potentially got deleted earlier')); } $ticket->status = 'Client Reply'; $ticket->update(); $ticketcomment = TicketComment::create([ 'ticket_id' => $request->input('ticket_id'), 'user_id' => Auth::user()->id, 'ticketcomment' => $request->input('ticketcomment'), 'message' => $request->input('message'), ]); $user = Auth::user(); $newmessage = $request->input('ticketcomment'); $staffNotify = User::permission('admin.tickets.get_notification')->get(); foreach($staffNotify as $staff){ Notification::send($staff, new AdminReplyNotification($ticket, $user, $newmessage)); } return redirect()->back()->with('success', __('Your comment has been submitted')); } public function create() { $this->checkPermission(self::WRITE_PERMISSION); //check in blacklist $check = TicketBlacklist::where('user_id', Auth::user()->id)->first(); if ($check && $check->status == 'True') { return redirect()->route('ticket.index')->with('error', __("You can't make a ticket because you're on the blacklist for a reason: '" . $check->reason . "', please contact the administrator")); } $ticketcategories = TicketCategory::all(); $servers = Auth::user()->servers; return view('ticket.create', compact('ticketcategories', 'servers')); } public function changeStatus($ticket_id) { try { $ticket = Ticket::where('user_id', Auth::user()->id)->where("ticket_id", $ticket_id)->firstOrFail(); } catch (Exception $e) { return redirect()->back()->with('warning', __('Ticket not found on the server. It potentially got deleted earlier')); } if ($ticket->status == "Closed") { $ticket->status = "Reopened"; $ticket->save(); return redirect()->back()->with('success', __('A ticket has been reopened, ID: #') . $ticket->ticket_id); } $ticket->status = "Closed"; $ticket->save(); return redirect()->back()->with('success', __('A ticket has been closed, ID: #') . $ticket->ticket_id); } public function dataTable() { $query = Ticket::where('user_id', Auth::user()->id)->get(); return datatables($query) ->addColumn('category', function (Ticket $tickets) { return $tickets->ticketcategory->name; }) ->editColumn('title', function (Ticket $tickets) { return '' . '#' . $tickets->ticket_id . ' - ' . htmlspecialchars($tickets->title) . ''; }) ->editColumn('status', function (Ticket $tickets) { switch ($tickets->status) { case 'Reopened': case 'Open': $badgeColor = 'badge-success'; break; case 'Closed': $badgeColor = 'badge-danger'; break; case 'Answered': $badgeColor = 'badge-info'; break; default: $badgeColor = 'badge-warning'; break; } return '' . $tickets->status . ''; }) ->editColumn('priority', function (Ticket $tickets) { return __($tickets->priority); }) ->editColumn('updated_at', function (Ticket $tickets) { return [ 'display' => $tickets->updated_at ? $tickets->updated_at->diffForHumans() : '', 'raw' => $tickets->updated_at ? strtotime($tickets->updated_at) : '' ]; }) ->addColumn('actions', function (Ticket $tickets) { $statusButtonColor = ($tickets->status == "Closed") ? 'btn-success' : 'btn-warning'; $statusButtonIcon = ($tickets->status == "Closed") ? 'fa-redo' : 'fa-times'; $statusButtonText = ($tickets->status == "Closed") ? __('Reopen') : __('Close'); return '
' . csrf_field() . ' ' . method_field('POST') . '
'; }) ->rawColumns(['category', 'title', 'status', 'updated_at', "actions"]) ->make(true); } }