ctrlpanel/app/Http/Controllers/Moderation/TicketsController.php
2022-08-12 16:01:51 +07:00

203 lines
9.5 KiB
PHP

<?php
namespace App\Http\Controllers\Moderation;
use App\Models\User;
use App\Models\Ticket;
use App\Models\Server;
use App\Models\TicketCategory;
use App\Models\TicketComment;
use App\Models\TicketBlacklist;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Notifications\Ticket\User\ReplyNotification;
class TicketsController extends Controller
{
public function index() {
$tickets = Ticket::orderBy('id','desc')->paginate(10);
$ticketcategories = TicketCategory::all();
return view("moderator.ticket.index", compact("tickets", "ticketcategories"));
}
public function show($ticket_id) {
$ticket = Ticket::where("ticket_id", $ticket_id)->firstOrFail();
$ticketcomments = $ticket->ticketcomments;
$ticketcategory = $ticket->ticketcategory;
$server = Server::where('id', $ticket->server)->first();
return view("moderator.ticket.show", compact("ticket", "ticketcategory", "ticketcomments", "server"));
}
public function close($ticket_id) {
$ticket = Ticket::where("ticket_id", $ticket_id)->firstOrFail();
$ticket->status = "Closed";
$ticket->save();
$ticketOwner = $ticket->user;
return redirect()->back()->with('success', __('A ticket has been closed, ID: #') . $ticket->ticket_id);
}
public function delete($ticket_id){
$ticket = Ticket::where("ticket_id", $ticket_id)->firstOrFail();
TicketComment::where("ticket_id", $ticket->id)->delete();
$ticket->delete();
return redirect()->back()->with('success', __('A ticket has been deleted, ID: #') . $ticket_id);
}
public function reply(Request $request) {
$this->validate($request, array("ticketcomment" => "required"));
$ticket = Ticket::where('id', $request->input("ticket_id"))->firstOrFail();
$ticket->status = "Answered";
$ticket->update();
TicketComment::create(array(
"ticket_id" => $request->input("ticket_id"),
"user_id" => Auth::user()->id,
"ticketcomment" => $request->input("ticketcomment"),
));
$user = User::where('id', $ticket->user_id)->firstOrFail();
$newmessage = $request->input("ticketcomment");
$user->notify(new ReplyNotification($ticket, $user, $newmessage));
return redirect()->back()->with('success', __('Your comment has been submitted'));
}
public function dataTable()
{
$query = Ticket::query();
return datatables($query)
->addColumn('category', function (Ticket $tickets) {
return $tickets->ticketcategory->name;
})
->editColumn('title', function (Ticket $tickets) {
return '<a class="text-info" href="' . route('moderator.ticket.show', ['ticket_id' => $tickets->ticket_id]) . '">' . "#" . $tickets->ticket_id . " - " . $tickets->title . '</a>';
})
->editColumn('user_id', function (Ticket $tickets) {
return '<a href="' . route('admin.users.show', $tickets->user->id) . '">' . $tickets->user->name . '</a>';
})
->addColumn('actions', function (Ticket $tickets) {
return '
<a data-content="'.__("View").'" data-toggle="popover" data-trigger="hover" data-placement="top" href="' . route('moderator.ticket.show', ['ticket_id' => $tickets->ticket_id]) . '" class="btn btn-sm text-white btn-info mr-1"><i class="fas fa-eye"></i></a>
<form class="d-inline" method="post" action="' . route('moderator.ticket.close', ['ticket_id' => $tickets->ticket_id ]) . '">
' . csrf_field() . '
' . method_field("POST") . '
<button data-content="'.__("Close").'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-warning mr-1"><i class="fas fa-times"></i></button>
</form>
<form class="d-inline" method="post" action="' . route('moderator.ticket.delete', ['ticket_id' => $tickets->ticket_id ]) . '">
' . csrf_field() . '
' . method_field("POST") . '
<button data-content="'.__("Delete").'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-danger mr-1"><i class="fas fa-trash"></i></button>
</form>
';
})
->editColumn('status', function (Ticket $tickets) {
switch ($tickets->status) {
case 'Open':
$badgeColor = 'badge-success';
break;
case 'Closed':
$badgeColor = 'badge-danger';
break;
case 'Answered':
$badgeColor = 'badge-info';
break;
default:
$badgeColor = 'badge-warning';
break;
}
return '<span class="badge ' . $badgeColor . '">' . $tickets->status . '</span>';
})
->editColumn('updated_at', function (Ticket $tickets) {
return $tickets->updated_at ? $tickets->updated_at->diffForHumans() : '';
})
->rawColumns(['category', 'title', 'user_id', 'status', 'updated_at', 'actions'])
->make(true);
}
public function blacklist() {
$users = User::get();
$ticketcategories = TicketCategory::all();
return view("moderator.ticket.blacklist", compact("users", "ticketcategories"));
}
public function blacklistAdd(Request $request) {
$user = User::where('id', $request->user_id)->first();
$check = TicketBlacklist::where('user_id', $user->id)->first();
if($check){
return redirect()->back()->with('error', __('Target User already in blacklist'));
}
TicketBlacklist::create(array(
"user_id" => $user->id,
"status" => "True",
"reason" => $request->reason,
));
return redirect()->back()->with('success', __('Successfully add User to blacklist, User name: ' . $user->name));
}
public function blacklistDelete($id) {
$blacklist = TicketBlacklist::where('id', $id)->first();
$blacklist->delete();
return redirect()->back()->with('success', __('Successfully remove User from blacklist, User name: ' . $blacklist->user->name));
}
public function blacklistChange($id) {
$blacklist = TicketBlacklist::where('id', $id)->first();
if($blacklist->status == "True")
{
$blacklist->status = "False";
} else {
$blacklist->status = "True";
}
$blacklist->update();
return redirect()->back()->with('success', __('Successfully change status blacklist from, User name: ' . $blacklist->user->name));
}
public function dataTableBlacklist()
{
$query = TicketBlacklist::with(['user']);
return datatables($query)
->editColumn('user', function (TicketBlacklist $blacklist) {
return '<a href="' . route('admin.users.show', $blacklist->user->id) . '">' . $blacklist->user->name . '</a>';
})
->editColumn('status', function (TicketBlacklist $blacklist) {
switch ($blacklist->status) {
case 'True':
$badgeColor = 'badge-success';
break;
default:
$badgeColor = 'badge-danger';
break;
}
return '<span class="badge ' . $badgeColor . '">' . $blacklist->status . '</span>';
})
->editColumn('reason', function (TicketBlacklist $blacklist) {
return $blacklist->reason;
})
->addColumn('actions', function (TicketBlacklist $blacklist) {
return '
<form class="d-inline" method="post" action="' . route('moderator.ticket.blacklist.change', ['id' => $blacklist->id ]) . '">
' . csrf_field() . '
' . method_field("POST") . '
<button data-content="'.__("Change Status").'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-warning mr-1"><i class="fas fa-sync-alt"></i></button>
</form>
<form class="d-inline" method="post" action="' . route('moderator.ticket.blacklist.delete', ['id' => $blacklist->id ]) . '">
' . csrf_field() . '
' . method_field("POST") . '
<button data-content="'.__("Delete").'" data-toggle="popover" data-trigger="hover" data-placement="top" class="btn btn-sm text-white btn-danger mr-1"><i class="fas fa-trash"></i></button>
</form>
';
})
->editColumn('created_at', function (TicketBlacklist $blacklist) {
return $blacklist->created_at ? $blacklist->created_at->diffForHumans() : '';
})
->rawColumns(['user', 'status', 'reason', 'created_at', 'actions'])
->make(true);
}
}