mirror of https://github.com/4xmen/xshop.git
parent
4ef0238dce
commit
aa974c76c3
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Admin;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Controllers\XController;
|
||||||
|
use App\Http\Requests\AdminLogSaveRequest;
|
||||||
|
use App\Models\Access;
|
||||||
|
use App\Models\AdminLog;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Helper;
|
||||||
|
use function App\Helpers\hasCreateRoute;
|
||||||
|
|
||||||
|
class AdminLogController extends XController
|
||||||
|
{
|
||||||
|
|
||||||
|
// protected $_MODEL_ = AdminLog::class;
|
||||||
|
// protected $SAVE_REQUEST = AdminLogSaveRequest::class;
|
||||||
|
|
||||||
|
protected $cols = ['action','user_id'];
|
||||||
|
protected $extra_cols = ['id','loggable_type','loggable_id'];
|
||||||
|
|
||||||
|
protected $searchable = ['action'];
|
||||||
|
|
||||||
|
protected $listView = 'admin.commons.adminlogs';
|
||||||
|
|
||||||
|
|
||||||
|
protected $buttons = [];
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
parent::__construct(AdminLog::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function log(User $item){
|
||||||
|
return redirect()->route('admin.adminlogs.index',['filter[user_id]'=> '['.$item->id.']']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,202 @@
|
|||||||
|
@extends('admin.templates.panel-list-template-raw')
|
||||||
|
|
||||||
|
@section('table')
|
||||||
|
<table class="table-list">
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
<div
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__("Check all")}}"
|
||||||
|
class="form-check form-switch mt-1 mx-2">
|
||||||
|
<input class="form-check-input chkall"
|
||||||
|
type="checkbox" role="switch">
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
@foreach($cols as $col)
|
||||||
|
<th>
|
||||||
|
<a href="?sort={{$col}}{{sortSuffix($col)}}&{{queryBuilder('sort')}}">
|
||||||
|
{{__($col)}}
|
||||||
|
</a>
|
||||||
|
</th>
|
||||||
|
@endforeach
|
||||||
|
<th>
|
||||||
|
{{__("Subject")}}
|
||||||
|
</th>
|
||||||
|
<th>
|
||||||
|
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@if(count($items) == 0)
|
||||||
|
<tr>
|
||||||
|
<td colspan="100%">
|
||||||
|
{{__("There is nothing to show!")}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@else
|
||||||
|
@foreach($items as $item)
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="chk-{{$item->id}}" class="chkbox"
|
||||||
|
name="id[{{$item->id}}]" value="{{$item->id}}">
|
||||||
|
<label for="chk-{{$item->id}}">
|
||||||
|
{{$item->id}}
|
||||||
|
</label>
|
||||||
|
</td>
|
||||||
|
@foreach($cols as $k => $col)
|
||||||
|
@if($k == 0 && hasRoute('edit'))
|
||||||
|
<td>
|
||||||
|
<a href="{{getRoute('edit',$item->{$item->getRouteKeyName()})}}">
|
||||||
|
<b>
|
||||||
|
{{$item?->{$cols[0]} }}
|
||||||
|
</b>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
@else
|
||||||
|
<td>
|
||||||
|
@switch($col)
|
||||||
|
@case($col == 'user_id')
|
||||||
|
<a href="{{route('admin.user.edit',$item->user?->email)}}">
|
||||||
|
{{ $item->user?->name??'-' }}
|
||||||
|
</a>
|
||||||
|
@break
|
||||||
|
@case($col == 'action')
|
||||||
|
{{ getAction($item->$col) }}
|
||||||
|
@break
|
||||||
|
@default
|
||||||
|
{{$item->$col}}
|
||||||
|
@endswitch
|
||||||
|
</td>
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
<td>
|
||||||
|
<a href="{{getModelLink($item->loggable_type,$item->loggable_id)}}">
|
||||||
|
{{getModelName($item->loggable_type,$item->loggable_id)}}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
@if(strpos(request()->url(),'trashed') != false && hasRoute('restore'))
|
||||||
|
<a href="{{getRoute('restore',$item->{$item->getRouteKeyName()})}}"
|
||||||
|
class="btn btn-success btn-sm mx-1 d-xl-none d-xxl-none"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__("Restore")}}">
|
||||||
|
<i class="ri-recycle-line"></i>
|
||||||
|
</a>
|
||||||
|
@else
|
||||||
|
|
||||||
|
<div class="dropdown d-xl-none d-xxl-none">
|
||||||
|
<a class="btn btn-outline-secondary dropdown-toggle" href="#"
|
||||||
|
role="button"
|
||||||
|
data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
@foreach($buttons as $btn => $btnData)
|
||||||
|
<li>
|
||||||
|
<a class="dropdown-item {{$btnData['class']}}"
|
||||||
|
href="{{getRoute($btn,$item->{$item->getRouteKeyName()})}}">
|
||||||
|
<i class="{{$btnData['icon']}}"></i>
|
||||||
|
|
||||||
|
{{__($btnData['title'])}}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
@endforeach
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
<div class="d-none d-xl-block d-xxl-block">
|
||||||
|
@foreach($buttons as $btn => $btnData)
|
||||||
|
|
||||||
|
@if(strpos($btnData['class'],'delete') == false )
|
||||||
|
@if(strpos(request()->url(),'trashed') == false)
|
||||||
|
|
||||||
|
<a href="{{getRoute($btn,$item->{$item->getRouteKeyName()})}}"
|
||||||
|
class="btn {{$btnData['class']}} btn-sm mx-1"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__($btnData['title'])}}">
|
||||||
|
<i class="{{$btnData['icon']}}"></i>
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
@else
|
||||||
|
@if( hasRoute('restore') && $item->trashed())
|
||||||
|
<a class="btn btn-success btn-sm mx-1"
|
||||||
|
href="{{getRoute('restore',$item->id)}}" {{--dont change this id to getRouteKeyName --}}
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__("Restore")}}">
|
||||||
|
<i class="ri-recycle-line"></i>
|
||||||
|
</a>
|
||||||
|
@else
|
||||||
|
<a href="{{getRoute($btn,$item->{$item->getRouteKeyName()})}}"
|
||||||
|
class="btn {{$btnData['class']}} btn-sm mx-1"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__($btnData['title'])}}">
|
||||||
|
<i class="{{$btnData['icon']}}"></i>
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
@endforeach
|
||||||
|
@endif
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
|
||||||
|
{{-- pagination and toggle button start --}}
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<th colspan="100%">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-3 text-start">
|
||||||
|
<div
|
||||||
|
id="toggle-select"
|
||||||
|
class="btn btn-outline-light mx-2"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__("Toggle selection")}}">
|
||||||
|
<i class="ri-toggle-line"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
{{$items->withQueryString()->links()}}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 text-center">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
{{-- pagination and toggle button end --}}
|
||||||
|
</table>
|
||||||
|
@endsection
|
||||||
|
|
||||||
|
@section('filter')
|
||||||
|
<h2>
|
||||||
|
<i class="ri-shield-check-line"></i>
|
||||||
|
{{__("User filter")}}:
|
||||||
|
</h2>
|
||||||
|
<searchable-multi-select
|
||||||
|
:items='{{\App\Models\User::all('id','name')}}'
|
||||||
|
title-field="name"
|
||||||
|
value-field="id"
|
||||||
|
xname="filter[user_id]"
|
||||||
|
:xvalue='{{request()->input('filter.user_id','[]')}}'
|
||||||
|
:close-on-Select="true"></searchable-multi-select>
|
||||||
|
@endsection
|
@ -0,0 +1,125 @@
|
|||||||
|
@extends('layouts.app')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="mb-5 pb-5">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
{{-- list side bar start--}}
|
||||||
|
<div class="col-xl-3">
|
||||||
|
@include('components.err')
|
||||||
|
<div class="item-list mb-3">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-8">
|
||||||
|
<h1>
|
||||||
|
@yield('list-title')
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
<div class="col-4 pt-3 text-end">
|
||||||
|
@if(hasRoute('trashed'))
|
||||||
|
<a class="btn btn-outline-danger me-3"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__("Trashed items")}}"
|
||||||
|
href="{{getRoute('trashed')}}"
|
||||||
|
>
|
||||||
|
<i class="ri-delete-bin-6-line"></i>
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<form action="" class="p-3">
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<span class="btn btn-outline-secondary" type="button" id="button-addon2">
|
||||||
|
<i class="ri-search-2-line"></i>
|
||||||
|
</span>
|
||||||
|
<input type="text" name="q" class="form-control" placeholder="{{__("Search")}}..."
|
||||||
|
aria-label="{{__("Search")}}..." aria-describedby="button-addon2"
|
||||||
|
value="{{request()->input('q','')}}">
|
||||||
|
</div>
|
||||||
|
@yield('filter')
|
||||||
|
<button class="btn btn-primary w-100">
|
||||||
|
{{__("Search & Filter")}}
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="item-list mb-3 py-3">
|
||||||
|
<div class="grid-equal text-center p-1">
|
||||||
|
<span>
|
||||||
|
{{__("Totol")}}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
({{$items->total()}})
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<div class="grid-equal text-center p-1">
|
||||||
|
<span>
|
||||||
|
{{__("From - To")}}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
@paginated($items)
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if(hasRoute('bulk'))
|
||||||
|
|
||||||
|
<div class="item-list mb-3">
|
||||||
|
<h3 class="p-3">
|
||||||
|
<i class="ri-check-double-line"></i>
|
||||||
|
{{__("Bulk actions:")}}
|
||||||
|
</h3>
|
||||||
|
<form action="{{getRoute('bulk',[])}}" id="bulk-from" method="post">
|
||||||
|
|
||||||
|
<div class="p-3">
|
||||||
|
|
||||||
|
@csrf
|
||||||
|
<select class="form-control mb-3" name="action" required>
|
||||||
|
<option value=""></option>
|
||||||
|
@if(strpos(request()->url(),'trashed') != false)
|
||||||
|
<option value="restore"> {{__("Batch restore")}} </option>
|
||||||
|
@else
|
||||||
|
<option value="delete"> {{__("Batch delete")}} </option>
|
||||||
|
@endif
|
||||||
|
@yield('bulk')
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<button class="btn btn-primary w-100">
|
||||||
|
{{__("Do it")}}
|
||||||
|
</button>
|
||||||
|
<div id="bulk-idz"></div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{{-- list side bar end--}}
|
||||||
|
|
||||||
|
|
||||||
|
{{-- list content start--}}
|
||||||
|
<div class="col-xl-9 ps-xl-0">
|
||||||
|
<form class="item-list" id="main-form">
|
||||||
|
@yield('table')
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{-- list content end--}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if(hasRoute('create'))
|
||||||
|
<a class="action-btn circle-btn"
|
||||||
|
data-bs-toggle="tooltip"
|
||||||
|
data-bs-placement="top"
|
||||||
|
data-bs-custom-class="custom-tooltip"
|
||||||
|
data-bs-title="{{__("Add another one")}}"
|
||||||
|
href="{{getRoute('create')}}"
|
||||||
|
>
|
||||||
|
<i class="ri-add-line"></i>
|
||||||
|
</a>
|
||||||
|
@endif
|
||||||
|
@endsection
|
Loading…
Reference in New Issue