chore: change UI accept and reject user

This commit is contained in:
myuqinurrohman 2025-04-04 13:39:26 +07:00
parent 78909d1de4
commit 9abf7707b3
12 changed files with 227 additions and 15 deletions

View File

@ -1861,15 +1861,33 @@ public function issueManagement(Request $request){
public function user(Request $request){
if ($request->ajax()) {
$roleParam = $request->input('role', null);
$role = $request->input('role', null);
$status = $request->input('status', null);
if($roleParam){
$role = Role::findOrFail(decrypt_id($roleParam));
$data = User::with(['role'])->where('role_id', '=', $role->id)->get();
}else{
$data = User::with(['role'])->get();
$query = User::with(['role']);
if($role && $role !== 'all'){
$role = Role::findOrFail(decrypt_id($role));
$query->where('role_id', '=', $role->id)->get();
}
if($status && in_array($status, ['waiting','active','nonactive'])){
switch($status){
case 'waiting':
$statusNum = '0';
break;
case 'active':
$statusNum = '1';
break;
case 'nonactive':
$statusNum = '2';
break;
}
$query->where('status', '=', $statusNum)->get();
}
$data = $query->get();
return DataTables::of($data)
->addIndexColumn()
->addColumn('role', function ($data){
@ -1893,9 +1911,9 @@ public function user(Request $request){
->addColumn('action', function ($data) {
$showUrl = route('dashboard.users.show', ['id' => encrypt_id($data->id), 'type' => 'account']);
$acceptUrl = route('dashboard.users.status.action', ['id' => encrypt_id($data->id), 'action' => 'accept']);
$acceptUrl = route('dashboard.users.process', ['id' => encrypt_id($data->id), 'type' => 'account', 'process' => 'accept']);
$rejectUrl = route('dashboard.users.status.action', ['id' => encrypt_id($data->id), 'action' => 'reject']);
$rejectUrl = route('dashboard.users.process', ['id' => encrypt_id($data->id), 'type' => 'account', 'process' => 'reject']);
$resetPasswordUrl = route('dashboard.users.reset.password', ['id' => encrypt_id($data->id)]);
@ -1909,12 +1927,20 @@ public function user(Request $request){
<ul class="link-list-opt">
<li><a href="'.$showUrl.'"><em class="icon ni ni-eye"></em><span>Detail</span></a></li>';
// if (is_role([1]) && $data->status === '0') {
// $dropdown .= '<li><a href="javascript:void(0);" onclick="statusAction(\''.$acceptUrl.'\', \'Apakah Anda yakin ingin menyetujui pengguna '.$data->name.'?\', \'Ya, Setujui\')"><em class="icon ni ni-check"></em><span>Setujui</span></a></li>';
// }
// if (is_role([1]) && $data->status === '0') {
// $dropdown .= '<li><a href="javascript:void(0);" onclick="statusAction(\''.$rejectUrl.'\', \'Apakah Anda yakin ingin menolak pengguna '.$data->name.'?\', \'Ya, Tolak\')"><em class="icon ni ni-cross"></em><span>Tolak</span></a></li>';
// }
if (is_role([1]) && $data->status === '0') {
$dropdown .= '<li><a href="javascript:void(0);" onclick="statusAction(\''.$acceptUrl.'\', \'Apakah Anda yakin ingin menyetujui pengguna '.$data->name.'?\', \'Ya, Setujui\')"><em class="icon ni ni-check"></em><span>Setujui</span></a></li>';
$dropdown .= '<li><a href="'.$acceptUrl.'"><em class="icon ni ni-check"></em><span>Setujui</span></a></li>';
}
if (is_role([1]) && $data->status === '0') {
$dropdown .= '<li><a href="javascript:void(0);" onclick="statusAction(\''.$rejectUrl.'\', \'Apakah Anda yakin ingin menolak pengguna '.$data->name.'?\', \'Ya, Tolak\')"><em class="icon ni ni-cross"></em><span>Tolak</span></a></li>';
$dropdown .= '<li><a href="'.$rejectUrl.'"><em class="icon ni ni-cross"></em><span>Tolak</span></a></li>';
}
if (is_role([1])) {

View File

@ -16,7 +16,8 @@ class UserController extends Controller
public function index(Request $request){
return view('dashboard.users.index', [
'title' => 'Pengguna',
'role' => $request->input('role', null)
'role' => $request->input('role', null),
'status' => $request->input('status', null),
]);
}
@ -118,20 +119,40 @@ public function resetPasswordAction(ResetPasswordRequest $request, $id){
}
}
public function statusAction($id, $action){
public function statusAction(Request $request, $id, $action){
$user = User::findOrFail(decrypt_id($id));
if($user->status === '0'){
if($user->status === '0' && Auth::check() && is_role(['1'])){
if($action == 'accept'){
$user->update([
'status' => '1'
]);
return response()->json(['message' => 'Berhasil menyetujui pengguna.']);
}else if($action == 'reject'){
$validatedData = $request->validate([
'rejection_reason' => ['required'],
], [
'rejection_reason.required' => 'Alasan penolakan wajib diisi.',
]);
$user->update([
'status' => '3'
]);
$user->company->update([
'rejection_reason' => $validatedData['rejection_reason']
]);
return redirect()->back()->with('success-status', 'Berhasil menolak pengguna.');
}
}
// return redirect()->route('dashboard.users.index')->with('success-status', 'Berhasil menyetujui pengguna.');
}
public function destroy($id)
@ -189,4 +210,41 @@ public function profile($type){
}
}
public function filter(Request $request){
$filteredRequest = $request->except('_token');
$filterField = array_filter($filteredRequest, function ($value) {
return filled($value);
});
return redirect()->route('dashboard.users.index', $filterField);
}
public function process($id, $type, $process){
$user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id));
$data = [
'title' => 'Profile Pengguna',
'user' => $user,
'roles' => Role::all(),
'page' => 'process',
'type' => $type,
'process' => $process,
];
if($type === 'account'){
return view('dashboard.users.profiles.account', $data);
}elseif($type === 'login-activities'){
$data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20);
return view('dashboard.users.profiles.login-activity', $data);
}elseif($type === 'company'){
return view('dashboard.users.profiles.company', $data);
}elseif($type === 'media'){
return view('dashboard.users.profiles.media', $data);
}elseif($type === 'journalists'){
return view('dashboard.users.profiles.journalists', $data);
}
}
}

View File

@ -28,6 +28,11 @@
</div>
</div>
</li> --}}
<li>
<div class="drodown">
<a href="javascript: void(0);" class="btn btn-white btn-dim btn-outline-light" data-bs-toggle="modal" data-bs-target="#modalFilter"><em class="d-none d-sm-inline icon ni ni-filter"></em><span><span class="d-none d-md-inline">Filter</a>
</div>
</li>
<li class="nk-block-tools-opt"><a href="{{route('dashboard.users.create')}}" class="btn btn-primary"><em class="icon ni ni-plus"></em><span>Tambah</span></a></li>
</ul>
</div>
@ -55,6 +60,51 @@
</div>
</div>
</div>
<div class="modal fade" id="modalFilter">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Filter</h5>
<a href="javascript:void(0);" class="close" data-bs-dismiss="modal" aria-label="Close">
<em class="icon ni ni-cross"></em>
</a>
</div>
<form action="{{route('dashboard.users.filter')}}" class="form-validate is-alter" method="post">
@csrf
<div class="modal-body">
<div class="form-group">
<label class="form-label">Role/Hak Akses</label>
<div class="form-control-wrap">
<select class="form-select js-select2" name="role">
<option value="all" @selected(isset($role) && $role === 'all')>Semua</option>
<option value="{{encrypt_id(1)}}" @selected(isset($role) && $role === encrypt_id(1))>Administrator</option>
<option value="{{encrypt_id(3)}}" @selected(isset($role) && $role === encrypt_id(3))>Perusahaan</option>
<option value="{{encrypt_id(2)}}" @selected(isset($role) && $role === encrypt_id(2))>Admin Monitoring</option>
<option value="{{encrypt_id(4)}}" @selected(isset($role) && $role === encrypt_id(4))>Admin Konten</option>
</select>
</div>
</div>
<div class="form-group">
<label class="form-label">Status</label>
<div class="form-control-wrap">
<select class="form-select js-select2" name="status">
<option value="all" @selected(isset($status) && $status === 'all')>Semua</option>
<option value="waiting" @selected(isset($status) && $status === 'waiting')>Menunggu</option>
<option value="active" @selected(isset($status) && $status === 'active')>Aktif</option>
<option value="nonactive" @selected(isset($status) && $status === 'nonactive')>Nonaktif</option>
</select>
</div>
</div>
</div>
<div class="modal-footer bg-light">
<span class="sub-text">
<button type="submit" class="btn btn-sm btn-primary">Filter</button>
</span>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -82,6 +82,7 @@
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div><!-- .card -->
@include('dashboard.users.profiles.action')
</div><!-- .nk-block -->
</div>
</div>

View File

@ -0,0 +1,48 @@
@if ($user->status === '0' && isset($process) && $process === 'accept')
<div class="mt-2 d-flex justify-content-end">
<a href="" class="btn btn-danger mx-1">Tolak</a>
<a href="javascript:void(0);" class="btn btn-primary mx-1" onclick="statusAction('{{route('dashboard.users.status.action', ['id' => encrypt_id($user->id), 'action' => 'accept'])}}', 'Apakah Anda yakin ingin menyetujui pengguna {{$user->name}}?', 'Ya, Setujui')">
Terima
</a>
</div>
@elseif ($user->status === '0' && isset($process) && $process === 'reject')
<div class="card card-bordered card-preview">
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link text-warning" href="#"><em class="icon ni ni-na"></em><span>Data Penolakan</span></a>
</li>
</ul><!-- .nav-tabs -->
<div class="card-inner">
{{-- {{dd($mediaCooperationPivot->status != '0')}} --}}
<form action="{{route('dashboard.users.status.action', ['id' => encrypt_id($user->id), 'action' => 'reject'])}}" method="post" id="myForm">
@csrf
@method('put')
<div class="form-group">
<label class="form-label" for="rejection_reason">Alasan Menolak @if ($user->status === '0')
<span class="required-input">*</span>
@endif </label>
@if ($user->status === '0')
<div class="form-control-wrap">
<textarea class="tinymce-basic form-control" name="rejection_reason" id="rejection_reason" >{!!old('rejection_reason')!!}</textarea>
</div>
@elseif ($user->status === '2')
<div class="bq-note">
<div class="bq-note-item">
<div class="bq-note-text">
{!!$user->company->rejection_reason!!}
</div>
</div><!-- .bq-note-item -->
</div><!-- .bq-note -->
@endif
</div>
<hr>
<div class="nk-block d-flex justify-content-end">
<a href="{{route('dashboard.users.index')}}" class="btn btn-white btn-dim btn-outline-light mx-2"><span>Kembali</span></a>
@if ($user->status === '0')
<button type="button" class="btn btn-primary" id="submitButton">Kirim</button>
@endif
</div><!-- .nk-block -->
</form>
</div>
</div>
@endif

View File

@ -197,6 +197,7 @@
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div><!-- .card -->
@include('dashboard.users.profiles.action')
</div><!-- .nk-block -->
</div>
</div>

View File

@ -11,7 +11,7 @@
<a href="{{route('dashboard.overview')}}" class="btn btn-outline-light bg-white d-none d-sm-inline-flex"><em class="icon ni ni-arrow-left"></em><span>Kembali</span></a>
<a href="{{route('dashboard.overview')}}" class="btn btn-icon btn-outline-light bg-white d-inline-flex d-sm-none"><em class="icon ni ni-arrow-left"></em></a>
</div>
@elseif ($page === 'show-user')
@elseif (in_array($page, ['show-user', 'process']))
<div class="nk-block-head-content">
<h3 class="nk-block-title page-title">Profile Pengguna</h3>
<div class="nk-block-des text-soft">

View File

@ -108,6 +108,7 @@
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div><!-- .card -->
@include('dashboard.users.profiles.action')
</div><!-- .nk-block -->
</div>
</div>

View File

@ -95,6 +95,7 @@
</div><!-- .card-content -->
</div><!-- .card-aside-wrap -->
</div><!-- .card -->
@include('dashboard.users.profiles.action')
</div><!-- .nk-block -->
</div>
</div>

View File

@ -38,4 +38,21 @@
<a class="nav-link {{$type === 'login-activities' ? 'active' : ''}}" href="{{route('dashboard.users.show', ['id' => encrypt_id($user->id),'type' => 'login-activities'])}}"><em class="icon ni ni-activity"></em><span>Aktivitas Login</span></a>
</li>
</ul><!-- .nav-tabs -->
@elseif ($page === 'process' && isset($process))
<ul class="nav nav-tabs nav-tabs-mb-icon nav-tabs-card">
<li class="nav-item">
<a class="nav-link {{$type === 'account' ? 'active' : ''}}" href="{{route('dashboard.users.process', ['id' => encrypt_id($user->id),'type' => 'account', 'process' => $process])}}"><em class="icon ni ni-user-circle"></em><span>Akun</span></a>
</li>
@if ($user->role_id === 3)
<li class="nav-item">
<a class="nav-link {{$type === 'company' ? 'active' : ''}}" href="{{route('dashboard.users.process', ['id' => encrypt_id($user->id),'type' => 'company', 'process' => $process])}}"><em class="icon ni ni-building-fill"></em><span>Perusahaan</span></a>
</li>
<li class="nav-item">
<a class="nav-link {{$type === 'media' ? 'active' : ''}}" href="{{route('dashboard.users.process', ['id' => encrypt_id($user->id),'type' => 'media', 'process' => $process])}}"><em class="icon ni ni-medium"></em><span>Media</span></a>
</li>
<li class="nav-item">
<a class="nav-link {{$type === 'journalists' ? 'active' : ''}}" href="{{route('dashboard.users.process', ['id' => encrypt_id($user->id),'type' => 'journalists', 'process' => $process])}}"><em class="icon ni ni-user-list"></em><span>Jurnalis</span></a>
</li>
@endif
</ul><!-- .nav-tabs -->
@endif

View File

@ -900,7 +900,14 @@
$('#usersTable').DataTable({
processing: true,
serverSide: true,
ajax: '{{ route('dashboard.users.data', ["role" => $role]) }}',
ajax: {
url: '{{ route('dashboard.users.data') }}',
type: 'GET',
data: function(d) {
d.role = '{{ $role }}';
d.status = '{{ $status }}';
}
},
columns: [
{ data: 'DT_RowIndex', name: 'DT_RowIndex', orderable: false, searchable: false },
{ data: 'name', name: 'name' },

View File

@ -464,8 +464,10 @@
Route::controller(UserController::class)->group(function(){
Route::middleware(['role:1'])->group(function(){
Route::get('/', 'index')->name('index');
Route::post('/filter', 'filter')->name('filter');
Route::get('/create', 'create')->name('create');
Route::post('/', 'store')->name('store');
Route::get('/{id}/{type}/{process}/process', 'process')->name('process');
Route::get('/{id}/{type}/show', 'show')->name('show');
Route::get('/{id}/edit', 'edit')->name('edit');
Route::put('/{id}', 'update')->name('update');