Change index table to DataTable
This commit is contained in:
parent
f47cc62db7
commit
ae25b79f92
6 changed files with 154 additions and 87 deletions
|
@ -59,4 +59,58 @@ class TicketsController extends Controller
|
||||||
$user->notify(new ReplyNotification($ticket, $user, $newmessage));
|
$user->notify(new ReplyNotification($ticket, $user, $newmessage));
|
||||||
return redirect()->back()->with('success', __('Your comment has been submitted'));
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -81,4 +81,40 @@ class TicketsController extends Controller
|
||||||
Notification::send($admin, new AdminReplyNotification($ticket, $user, $newmessage));
|
Notification::send($admin, new AdminReplyNotification($ticket, $user, $newmessage));
|
||||||
return redirect()->back()->with('success', __('Your comment has been submitted'));
|
return redirect()->back()->with('success', __('Your comment has been submitted'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 '<a class="text-info" target="_blank" href="' . route('moderator.ticket.show', ['ticket_id' => $tickets->ticket_id]) . '">' . "#" . $tickets->ticket_id . " - " . $tickets->title . '</a>';
|
||||||
|
})
|
||||||
|
->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', 'status', 'updated_at'])
|
||||||
|
->make(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,7 +238,7 @@
|
||||||
<li class="nav-header">{{ __('Moderation') }}</li>
|
<li class="nav-header">{{ __('Moderation') }}</li>
|
||||||
|
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a href="{{ route('moderator.ticket.index') }}" class="nav-link @if (Request::routeIs('mod.ticket.*')) active @endif">
|
<a href="{{ route('moderator.ticket.index') }}" class="nav-link @if (Request::routeIs('moderator.ticket.*')) active @endif">
|
||||||
<i class="nav-icon fas fa-ticket-alt"></i>
|
<i class="nav-icon fas fa-ticket-alt"></i>
|
||||||
<p>{{ __('Ticket List') }}</p>
|
<p>{{ __('Ticket List') }}</p>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -37,70 +37,52 @@
|
||||||
<table id="datatable" class="table table-striped">
|
<table id="datatable" class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Category</th>
|
<th>{{__('Category')}}</th>
|
||||||
<th>Title</th>
|
<th>{{__('Title')}}</th>
|
||||||
<th>User</th>
|
<th>{{__('User')}}</th>
|
||||||
<th>Status</th>
|
<th>{{__('Status')}}</th>
|
||||||
<th>Last Updated</th>
|
<th>{{__('Last Updated')}}</th>
|
||||||
<th>Actions</th>
|
<th>{{__('Actions')}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach ($tickets as $ticket)
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
{{ $ticket->ticketcategory->name }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{{ route('moderator.ticket.show', ['ticket_id' => $ticket->ticket_id]) }}">
|
|
||||||
#{{ $ticket->ticket_id }} - {{ $ticket->title }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="/admin/users/{{$ticket->user->id}}">
|
|
||||||
{{ $ticket->user->name }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@if ($ticket->status === 'Open')
|
|
||||||
<span class="badge badge-success">Open</span>
|
|
||||||
@elseif ($ticket->status === 'Closed')
|
|
||||||
<span class="badge badge-danger">Closed</span>
|
|
||||||
@elseif ($ticket->status === 'Answered')
|
|
||||||
<span class="badge badge-info">Answered</span>
|
|
||||||
@elseif ($ticket->status === 'Client Reply')
|
|
||||||
<span class="badge badge-warning">Client Reply</span>
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
<td>{{ $ticket->updated_at }}</td>
|
|
||||||
<td>
|
|
||||||
<a data-content="View" data-toggle="popover" data-trigger="hover" data-placement="top" href="{{ route('moderator.ticket.show', ['ticket_id' => $ticket->ticket_id]) }}" class="btn btn-sm text-white btn-info mr-1"><i class="fas fa-eye"></i></a>
|
|
||||||
<form class="d-inline" action="{{ route('moderator.ticket.close', ['ticket_id' => $ticket->ticket_id ]) }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<button data-content="Close" data-toggle="popover" data-trigger="hover" data-placement="top" type="submit" class="btn btn-sm text-white btn-warning mr-1"><i class="fas fa-times"></i></button>
|
|
||||||
</form>
|
|
||||||
<form class="d-inline" action="{{ route('moderator.ticket.delete', ['ticket_id' => $ticket->ticket_id ]) }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<button data-content="Delete" data-toggle="popover" data-trigger="hover" data-placement="top" type="submit" class="btn btn-sm text-white btn-danger mr-1"><i class="fas fa-trash"></i></button>
|
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@if($tickets->hasPages())
|
|
||||||
<div class="card-footer">
|
|
||||||
{{ $tickets->links() }}
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- END CUSTOM CONTENT -->
|
<!-- END CUSTOM CONTENT -->
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<!-- END CONTENT -->
|
<!-- END CONTENT -->
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
$('#datatable').DataTable({
|
||||||
|
language: {
|
||||||
|
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("app.datatable_locale")}}.json'
|
||||||
|
},
|
||||||
|
processing: true,
|
||||||
|
serverSide: true,
|
||||||
|
stateSave: true,
|
||||||
|
ajax: "{{route('moderator.ticket.datatable')}}",
|
||||||
|
columns: [
|
||||||
|
{data: 'category'},
|
||||||
|
{data: 'title'},
|
||||||
|
{data: 'user_id'},
|
||||||
|
{data: 'status'},
|
||||||
|
{data: 'updated_at'},
|
||||||
|
{data: 'actions', sortable: false},
|
||||||
|
],
|
||||||
|
fnDrawCallback: function( oSettings ) {
|
||||||
|
$('[data-toggle="popover"]').popover();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
@ -39,45 +39,16 @@
|
||||||
<table id="datatable" class="table table-striped">
|
<table id="datatable" class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Category</th>
|
<th>{{__('Category')}}</th>
|
||||||
<th>Title</th>
|
<th>{{__('Title')}}</th>
|
||||||
<th>Status</th>
|
<th>{{__('Status')}}</th>
|
||||||
<th>Last Updated</th>
|
<th>{{__('Last Updated')}}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach ($tickets as $ticket)
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
{{ $ticket->ticketcategory->name }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{{ route('ticket.show', ['ticket_id' => $ticket->ticket_id]) }}">
|
|
||||||
#{{ $ticket->ticket_id }} - {{ $ticket->title }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@if ($ticket->status === 'Open')
|
|
||||||
<span class="badge badge-success">Open</span>
|
|
||||||
@elseif ($ticket->status === 'Closed')
|
|
||||||
<span class="badge badge-danger">Closed</span>
|
|
||||||
@elseif ($ticket->status === 'Answered')
|
|
||||||
<span class="badge badge-info">Answered</span>
|
|
||||||
@elseif ($ticket->status === 'Client Reply')
|
|
||||||
<span class="badge badge-warning">Client Reply</span>
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
<td>{{ $ticket->updated_at }}</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@if($tickets->hasPages())
|
|
||||||
<div class="card-footer">
|
|
||||||
{{ $tickets->links() }}
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
|
@ -100,5 +71,27 @@
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<!-- END CONTENT -->
|
<!-- END CONTENT -->
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
$('#datatable').DataTable({
|
||||||
|
language: {
|
||||||
|
url: '//cdn.datatables.net/plug-ins/1.11.3/i18n/{{config("app.datatable_locale")}}.json'
|
||||||
|
},
|
||||||
|
processing: true,
|
||||||
|
serverSide: true,
|
||||||
|
stateSave: true,
|
||||||
|
ajax: "{{route('ticket.datatable')}}",
|
||||||
|
columns: [
|
||||||
|
{data: 'category'},
|
||||||
|
{data: 'title'},
|
||||||
|
{data: 'status'},
|
||||||
|
{data: 'updated_at', sortable: false},
|
||||||
|
],
|
||||||
|
fnDrawCallback: function( oSettings ) {
|
||||||
|
$('[data-toggle="popover"]').popover();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
|
||||||
#ticket user
|
#ticket user
|
||||||
if(config("SETTINGS::TICKET:ENABLED")) {
|
if(config("SETTINGS::TICKET:ENABLED")) {
|
||||||
Route::get('ticket', [TicketsController::class, 'index'])->name('ticket.index');
|
Route::get('ticket', [TicketsController::class, 'index'])->name('ticket.index');
|
||||||
|
Route::get('ticket/datatable', [TicketsController::class, 'datatable'])->name('ticket.datatable');
|
||||||
Route::get('ticket/new', [TicketsController::class, 'create'])->name('ticket.new');
|
Route::get('ticket/new', [TicketsController::class, 'create'])->name('ticket.new');
|
||||||
Route::post('ticket/new', [TicketsController::class, 'store'])->name('ticket.new.store');
|
Route::post('ticket/new', [TicketsController::class, 'store'])->name('ticket.new.store');
|
||||||
Route::get('ticket/show/{ticket_id}', [TicketsController::class, 'show'])->name('ticket.show');
|
Route::get('ticket/show/{ticket_id}', [TicketsController::class, 'show'])->name('ticket.show');
|
||||||
|
@ -178,6 +179,7 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
|
||||||
Route::prefix('moderator')->name('moderator.')->middleware('moderator')->group(function () {
|
Route::prefix('moderator')->name('moderator.')->middleware('moderator')->group(function () {
|
||||||
#ticket moderation
|
#ticket moderation
|
||||||
Route::get('ticket', [ModTicketsController::class, 'index'])->name('ticket.index');
|
Route::get('ticket', [ModTicketsController::class, 'index'])->name('ticket.index');
|
||||||
|
Route::get('ticket/datatable', [ModTicketsController::class, 'datatable'])->name('ticket.datatable');
|
||||||
Route::get('ticket/show/{ticket_id}', [ModTicketsController::class, 'show'])->name('ticket.show');
|
Route::get('ticket/show/{ticket_id}', [ModTicketsController::class, 'show'])->name('ticket.show');
|
||||||
Route::post('ticket/reply', [ModTicketsController::class, 'reply'])->name('ticket.reply');
|
Route::post('ticket/reply', [ModTicketsController::class, 'reply'])->name('ticket.reply');
|
||||||
Route::post('ticket/close/{ticket_id}', [ModTicketsController::class, 'close'])->name('ticket.close');
|
Route::post('ticket/close/{ticket_id}', [ModTicketsController::class, 'close'])->name('ticket.close');
|
||||||
|
|
Loading…
Reference in a new issue