From d82d236d533946ddac55adf006a2f824759cda96 Mon Sep 17 00:00:00 2001 From: nttlan Date: Fri, 15 Mar 2024 14:45:23 +0700 Subject: [PATCH 01/10] fix delete yourself --- app/Http/Controllers/UserController.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 6e8ebecb..074348c8 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -275,6 +275,9 @@ public function destroy(Request $request) if ($user->submissions()->count() > 0){ $json_result = array('done' => 0, 'message' => "You must delete users' submission before you can delete user."); } + elseif (Auth::user()->id == $user_id) { + $json_result = array('done' => 0, 'message' => 'You cannot delete yourself!'); + } elseif (User::destroy($user_id)) $json_result = array('done' => 1); else From 980dad6cceae7f9cf07fd83bc1cb07127b3f914c Mon Sep 17 00:00:00 2001 From: nttlan Date: Fri, 15 Mar 2024 15:41:11 +0700 Subject: [PATCH 02/10] add delete view --- app/Http/Controllers/UserController.php | 7 +++++++ resources/views/users/delete.blade.php | 17 +++++++++++++++++ resources/views/users/list.blade.php | 2 ++ routes/web.php | 1 + 4 files changed, 27 insertions(+) create mode 100644 resources/views/users/delete.blade.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 074348c8..33c6b699 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -305,6 +305,13 @@ public function delete_submissions(User $user){ return $json_result; } + public function delete_multiple() { + if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ + abort(403); + } + return view('users.delete'); + } + public function add_multiple() { if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ diff --git a/resources/views/users/delete.blade.php b/resources/views/users/delete.blade.php new file mode 100644 index 00000000..4a40d50b --- /dev/null +++ b/resources/views/users/delete.blade.php @@ -0,0 +1,17 @@ +@extends('layouts.app') +@php($selected="settings") +@section('head_title','Delete Users') +@section('icon', 'fas fa-trash') + +@section('title', 'Delete Users') + +@section('title_menu') +@endsection + +@section('body_end') + +@endsection + +@section('content') + +@endsection \ No newline at end of file diff --git a/resources/views/users/list.blade.php b/resources/views/users/list.blade.php index 6594bbc4..04c42bbf 100644 --- a/resources/views/users/list.blade.php +++ b/resources/views/users/list.blade.php @@ -41,6 +41,8 @@ Add Users Email all users Update multiple users trial time + Delete users + {{-- Excel --}} @endsection diff --git a/routes/web.php b/routes/web.php index 108559cc..6b4705d2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -41,6 +41,7 @@ Route::get('users/ranking', [App\Http\Controllers\UserController::class, 'rank'])->name('users.rank'); Route::view('users/set_trial', 'users.set_trial')->name('users.set_trial')->middleware('auth'); Route::post('users/set_trial', [App\Http\Controllers\UserController::class, 'set_trial'])->name('users.set_trial_post'); +Route::get('/users/delete_multiple', [App\Http\Controllers\UserController::class, 'delete_multiple']); Route::get('/problems/downloadtestsdesc/{id}', [App\Http\Controllers\problem_controller::class, 'downloadtestsdesc'])->name('problems.downloadtestsdesc'); Route::get('/problems/downloadpdf/{id}', [App\Http\Controllers\problem_controller::class, 'pdf'])->name('problems.pdf'); From 80284298f7c76268bed88077f0f96e9e6292bc76 Mon Sep 17 00:00:00 2001 From: nttlan Date: Thu, 21 Mar 2024 15:16:35 +0700 Subject: [PATCH 03/10] add delete multiple route --- app/Http/Controllers/UserController.php | 100 ++++++++++++++++-- resources/views/users/delete.blade.php | 55 +++++++++- resources/views/users/delete_result.blade.php | 29 +++++ routes/web.php | 2 + 4 files changed, 173 insertions(+), 13 deletions(-) create mode 100644 resources/views/users/delete_result.blade.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 33c6b699..031a3750 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -295,7 +295,7 @@ public function delete_submissions(User $user){ $json_result = array('done'=>0 , 'count' => 0); foreach ($subs as $sub) { var_dump($sub->directory()); - shell_exec("rm -rf " . $sub->directory()); + shell_exec("rm -rf " . $sub->directory(). '> /dev/null 2>&1'); # "> /dev/null 2>&1" hide the output of any command $sub->delete(); $i++; } @@ -305,13 +305,6 @@ public function delete_submissions(User $user){ return $json_result; } - public function delete_multiple() { - if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ - abort(403); - } - return view('users.delete'); - } - public function add_multiple() { if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ @@ -510,5 +503,94 @@ public function set_trial(Request $request){ return back()->with(['success' => $count ])->withInput() ; } + + public function delete_multiple() { + if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ + abort(403); + } + return view('users.delete'); + } + + public function delete(Request $request) { + if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ + abort(403); + } + if ($request->has(['usernames'])) { + $all = $this->delete_users($request['usernames']); + $ok = $all['users_ok']; + $error = $all['users_error']; + return view('users.delete_result', ['ok' => $ok,'error' => $error]); + } + else + return view('users.delete'); + } + + public function delete_user($username) { + if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ + abort(403); + } + + $user = User::where('username', $username)->first(); + + if ($user == NULL) + return 'User not found'; + + if (Auth::user()->role->name == 'admin') { + + } + elseif (Auth::user()->role->name == 'head_instructor'){ + if (!in_array($user->role->name, ['instructor', 'student'])) + { + return 'You can delete user with role "instructor" or "student" only'; + } + } + elseif (Auth::user()->role->name == 'instructor'){ + + if (!in_array($user->role->name, [ 'student'])) + { + return 'You can delete user with role "student" only'; + } + } + elseif (Auth::user()->id == $user->id) { + return 'You cannot delete yourself!'; + } + else { + return 'You do not have permission to delete user'; + } + + // Delete submissions before delete user + if ($user->submissions()->count() > 0){ + $this->delete_submissions($user); + } + + $user->delete(); + + return TRUE; + } + + public function delete_users($usernames) { + if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ + abort(403); + } + + $usernames = preg_split('/\s+/', $usernames); + + $users_ok = []; + $users_error = []; + + foreach ($usernames as $username) + { + $result = $this->delete_user($username); + + if ($result === TRUE) + array_push($users_ok, $username); + else + { + array_push($users_error,[$username, array($result)]); + } + } + + return ['users_ok'=>$users_ok,'users_error'=>$users_error]; + } -} +} \ No newline at end of file diff --git a/resources/views/users/delete.blade.php b/resources/views/users/delete.blade.php index 4a40d50b..40a5a073 100644 --- a/resources/views/users/delete.blade.php +++ b/resources/views/users/delete.blade.php @@ -1,17 +1,64 @@ @extends('layouts.app') -@php($selected="settings") -@section('head_title','Delete Users') +@php($selected = 'settings') +@section('head_title', 'Delete Users') @section('icon', 'fas fa-trash') - @section('title', 'Delete Users') +@section('head') + +@endsection @section('title_menu') + Users list @endsection @section('body_end') + @endsection @section('content') +

You can use this field to delete multiple users at the same time.

+
    +
  • Copy list of usernames from the User list page.
  • +
  • Paste it down the below text field.
  • +
+
+ -@endsection \ No newline at end of file +
+ + +
+
+ +@endsection diff --git a/resources/views/users/delete_result.blade.php b/resources/views/users/delete_result.blade.php new file mode 100644 index 00000000..0269c065 --- /dev/null +++ b/resources/views/users/delete_result.blade.php @@ -0,0 +1,29 @@ +
+ @if (count($ok)>0) +
These {{count($ok)}} user(s) was deleted successfully: +
    + @foreach ($ok as $item) +
  1. + Username: {{$item}} +
  2. + @endforeach +
+
+ @endif + @if(count($error)>0) +
Error deleting these {{count($error)}} user(s): +
    + @foreach ($error as $item) +
  1. + Username: {{$item[0]}} + @foreach ($item[1] as $message) +

    {{$loop->index + 1}} - {{$message}}

    + @endforeach +
  2. + @endforeach +
+
+ @endif +
A total of {{count($ok) + count($error) }} list processed
+ +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 6b4705d2..b3cc9b8c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -42,6 +42,8 @@ Route::view('users/set_trial', 'users.set_trial')->name('users.set_trial')->middleware('auth'); Route::post('users/set_trial', [App\Http\Controllers\UserController::class, 'set_trial'])->name('users.set_trial_post'); Route::get('/users/delete_multiple', [App\Http\Controllers\UserController::class, 'delete_multiple']); +Route::post('/users/delete', [App\Http\Controllers\UserController::class, 'delete'])->name('users.delete'); + Route::get('/problems/downloadtestsdesc/{id}', [App\Http\Controllers\problem_controller::class, 'downloadtestsdesc'])->name('problems.downloadtestsdesc'); Route::get('/problems/downloadpdf/{id}', [App\Http\Controllers\problem_controller::class, 'pdf'])->name('problems.pdf'); From cdcb8eb6af6ff471a884be717e8a84b2018aefb5 Mon Sep 17 00:00:00 2001 From: nttlan Date: Thu, 21 Mar 2024 15:35:56 +0700 Subject: [PATCH 04/10] constrain no spaces in username and email --- app/Http/Controllers/UserController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 031a3750..103b47da 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -364,8 +364,8 @@ public function add_user($username, $email, $password, $role, $display_name="", 'display_name' => $display_name ]; $validator = Validator::make($user, [ - 'username' => ['required', 'string', 'max:50', 'unique:users'], - 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'username' => ['required', 'string', 'max:50', 'unique:users', 'regex:/^\S*$/'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users', 'regex:/^\S*$/'], 'display_name' => ['nullable', 'string', 'max:255'], 'password' => ['required', 'string', 'min:8'], ]); From 8d66c395d5694e19c8ca7da021561f7c98412856 Mon Sep 17 00:00:00 2001 From: nttlan Date: Thu, 21 Mar 2024 16:18:57 +0700 Subject: [PATCH 05/10] fix delete yourself --- app/Http/Controllers/UserController.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 103b47da..903be334 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -500,8 +500,7 @@ public function set_trial(Request $request){ $count = $where_clause->update(['trial_time' => DB::Raw(" TIMESTAMPDIFF(HOUR, `created_at`, '$end_time' )") ,'role_id' => 4 ] ); } // dd($count); - return back()->with(['success' => $count ])->withInput() - ; + return back()->with(['success' => $count ])->withInput(); } public function delete_multiple() { @@ -532,8 +531,9 @@ public function delete_user($username) { $user = User::where('username', $username)->first(); - if ($user == NULL) - return 'User not found'; + if ($user == NULL) return 'User not found'; + if (Auth::user()->id == $user->id) return 'You cannot delete yourself!'; + if (Auth::user()->role->name == 'admin') { @@ -551,9 +551,6 @@ public function delete_user($username) { return 'You can delete user with role "student" only'; } } - elseif (Auth::user()->id == $user->id) { - return 'You cannot delete yourself!'; - } else { return 'You do not have permission to delete user'; } From ac83d040e421d3dacfe06529501d0fc151133edc Mon Sep 17 00:00:00 2001 From: nttlan Date: Thu, 21 Mar 2024 16:24:55 +0700 Subject: [PATCH 06/10] prevent dump info from printing out :v --- app/Http/Controllers/UserController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 903be334..53ca9cc0 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -294,8 +294,8 @@ public function delete_submissions(User $user){ $i = 0; $json_result = array('done'=>0 , 'count' => 0); foreach ($subs as $sub) { - var_dump($sub->directory()); - shell_exec("rm -rf " . $sub->directory(). '> /dev/null 2>&1'); # "> /dev/null 2>&1" hide the output of any command + // var_dump($sub->directory()); + shell_exec("rm -rf " . $sub->directory()); $sub->delete(); $i++; } From 0124f49e2c0961ce6ba121ad35415de8ae610148 Mon Sep 17 00:00:00 2001 From: nttlan Date: Thu, 21 Mar 2024 17:27:58 +0700 Subject: [PATCH 07/10] redesign delete view --- app/Http/Controllers/UserController.php | 7 +- resources/views/users/delete.blade.php | 87 +++++++++++++++++++++---- 2 files changed, 77 insertions(+), 17 deletions(-) diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 53ca9cc0..02120bbb 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -507,7 +507,10 @@ public function delete_multiple() { if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ abort(403); } - return view('users.delete'); + + $users = User::all(); + + return view('users.delete', ['users' => $users]); } public function delete(Request $request) { @@ -569,8 +572,6 @@ public function delete_users($usernames) { if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ abort(403); } - - $usernames = preg_split('/\s+/', $usernames); $users_ok = []; $users_error = []; diff --git a/resources/views/users/delete.blade.php b/resources/views/users/delete.blade.php index 40a5a073..f15eca4c 100644 --- a/resources/views/users/delete.blade.php +++ b/resources/views/users/delete.blade.php @@ -11,8 +11,15 @@ Users list @endsection +@section('other_assets') + +@endsection + @section('body_end') + @endsection @section('content') -

You can use this field to delete multiple users at the same time.

-
    -
  • Copy list of usernames from the User list page.
  • -
  • Paste it down the below text field.
  • -
-
- - -
- - +
+ + +
+
+
+ + + + + + + + + + + + + + @foreach ($users as $user) + + + + + + + + + + + @endforeach +
#UsernameDisplay NameEmailTrial endFirst LoginLast Login
+ + {{ $loop->iteration }} {{ $user->username }} {{ $user->display_name }}{{ $user->email }}
{{ $user->role->name }}
{{ $user->trial_time ? $user->created_at->addHours($user->trial_time)->diffForHumans() : 'Permanent user' }} + + {{ $user->first_login_time? $user->first_login_time->setTimezone($settings['timezone'])->locale('en-GB')->isoFormat('lll'): 'Never' }} + + {{ $user->last_login_time? $user->last_login_time->setTimezone($settings['timezone'])->locale('en-GB')->isoFormat('lll'): 'Never' }} + +
- +
@endsection From 6bd76d9065a3372d3dade5c452803d73824521e6 Mon Sep 17 00:00:00 2001 From: nttlan Date: Fri, 22 Mar 2024 15:30:04 +0700 Subject: [PATCH 08/10] refactor feature --- resources/views/users/list.blade.php | 97 ++++++++++++++++++++++++++-- routes/web.php | 4 +- 2 files changed, 95 insertions(+), 6 deletions(-) diff --git a/resources/views/users/list.blade.php b/resources/views/users/list.blade.php index 04c42bbf..f22b47bd 100644 --- a/resources/views/users/list.blade.php +++ b/resources/views/users/list.blade.php @@ -41,18 +41,19 @@ Add Users Email all users Update multiple users trial time - Delete users {{-- Excel --}} @endsection @section('content') copy user name list +
+ {{-- --}} @@ -66,6 +67,9 @@ @foreach ($users as $user) + {{-- --}} @@ -178,10 +182,95 @@ $("#user_delete").modal("show"); }); + let selected_users = []; + + $('.checkbox').click(function() { + let username = $(this).parents('tr').find('#un').text().trim(); + let id = $(this).parents('tr').data('id'); + + if ($(this).hasClass('fa-check-circle')) { + $(this).removeClass('fa-check-circle').addClass('fa-circle'); + this.classList.add('fa-circle'); + selected_users = selected_users.filter(user => user.id !== id && user.username !== username); + } else { + $(this).removeClass('fa-circle').addClass('fa-check-circle'); + selected_users.push({ + id: id, + username: username, + }); + } + console.log(selected_users) + }); + + $("#delete_selected").click(function(e) { + e.preventDefault(); + console.log(selected_users) + + if (selected_users.length === 0) return; + + // Show popup + let row = $(this).parents('tr'); + let user_ids = row.data('id'); + let usernames = row.children('#un').html(); + + $(".modal-title").html("Are you sure you want to DELETE these users and their submissions?"); + $(".modal-body").html('') + selected_users.forEach(user => { + $(".modal-body").append('User ID: '+user.id+'
Username: '+user.username+'

'); + }); + $("#user_delete").modal("show"); + + $(".confirm-user-delete").click(function() { + $("#user_delete").modal("hide"); + selected_users.forEach(async user => { + + // Delete submissions + await $.ajax({ + url: 'users/delete_submissions/'+user.id, + type: 'POST', + data: { + user_id: user.id, + "_token": "{{ csrf_token() }}", + }, + error: shj.loading_error, + success: function (response){ + if (response.done) { + $.notify('All ' + parseInt(response.count) +' submission(s) ' + 'of User '+user.username +' has been deleted.', {position: 'bottom right', className: 'success', autoHideDelay: 5000}); + } + else { + shj.loading_failed(response.message); + } + } + }); + + // Delete user + await $.ajax({ + url: '{{ route('users.index') }}/'+user.id, + type: 'DELETE', + data: { + user_id: user.id, + "_token": "{{ csrf_token() }}", + }, + error: shj.loading_error, + success: function (response){ + if (response.done) { + row.animate({backgroundColor: '#FF7676'},100, function(){row.remove();}); + $.notify('User '+user.username+' deleted.', {position: 'bottom right', className: 'success', autoHideDelay: 5000}); + } + else { + shj.loading_failed(response.message); + } + } + }); + + }); + }); + }); + $("table").DataTable({ - "pageLength": 50, - "lengthMenu": [ [20, 50, 100, 200, -1], [20, 50, 100, 200, "All"] ] - }); + "pageLength": 50, + "lengthMenu": [ [20, 50, 100, 200, -1], [20, 50, 100, 200, "All"] ] + }); }); diff --git a/routes/web.php b/routes/web.php index b3cc9b8c..91f98f1d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -41,8 +41,8 @@ Route::get('users/ranking', [App\Http\Controllers\UserController::class, 'rank'])->name('users.rank'); Route::view('users/set_trial', 'users.set_trial')->name('users.set_trial')->middleware('auth'); Route::post('users/set_trial', [App\Http\Controllers\UserController::class, 'set_trial'])->name('users.set_trial_post'); -Route::get('/users/delete_multiple', [App\Http\Controllers\UserController::class, 'delete_multiple']); -Route::post('/users/delete', [App\Http\Controllers\UserController::class, 'delete'])->name('users.delete'); +// Route::get('/users/delete_multiple', [App\Http\Controllers\UserController::class, 'delete_multiple']); +// Route::post('/users/delete', [App\Http\Controllers\UserController::class, 'delete'])->name('users.delete'); Route::get('/problems/downloadtestsdesc/{id}', [App\Http\Controllers\problem_controller::class, 'downloadtestsdesc'])->name('problems.downloadtestsdesc'); From 9ec3b0feebbe19cad858135e9993cc174d8e2e52 Mon Sep 17 00:00:00 2001 From: nttlan Date: Fri, 22 Mar 2024 15:34:17 +0700 Subject: [PATCH 09/10] delete files --- app/Http/Controllers/UserController.php | 89 ------------- resources/views/users/delete.blade.php | 123 ------------------ resources/views/users/delete_result.blade.php | 29 ----- routes/web.php | 2 - 4 files changed, 243 deletions(-) delete mode 100644 resources/views/users/delete.blade.php delete mode 100644 resources/views/users/delete_result.blade.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 02120bbb..3cc976ed 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -502,93 +502,4 @@ public function set_trial(Request $request){ // dd($count); return back()->with(['success' => $count ])->withInput(); } - - public function delete_multiple() { - if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ - abort(403); - } - - $users = User::all(); - - return view('users.delete', ['users' => $users]); - } - - public function delete(Request $request) { - if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ - abort(403); - } - if ($request->has(['usernames'])) { - $all = $this->delete_users($request['usernames']); - $ok = $all['users_ok']; - $error = $all['users_error']; - return view('users.delete_result', ['ok' => $ok,'error' => $error]); - } - else - return view('users.delete'); - } - - public function delete_user($username) { - if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ - abort(403); - } - - $user = User::where('username', $username)->first(); - - if ($user == NULL) return 'User not found'; - if (Auth::user()->id == $user->id) return 'You cannot delete yourself!'; - - - if (Auth::user()->role->name == 'admin') { - - } - elseif (Auth::user()->role->name == 'head_instructor'){ - if (!in_array($user->role->name, ['instructor', 'student'])) - { - return 'You can delete user with role "instructor" or "student" only'; - } - } - elseif (Auth::user()->role->name == 'instructor'){ - - if (!in_array($user->role->name, [ 'student'])) - { - return 'You can delete user with role "student" only'; - } - } - else { - return 'You do not have permission to delete user'; - } - - // Delete submissions before delete user - if ($user->submissions()->count() > 0){ - $this->delete_submissions($user); - } - - $user->delete(); - - return TRUE; - } - - public function delete_users($usernames) { - if( ! in_array( Auth::user()->role->name, ['admin', 'head_instructor', 'instructor'])){ - abort(403); - } - - $users_ok = []; - $users_error = []; - - foreach ($usernames as $username) - { - $result = $this->delete_user($username); - - if ($result === TRUE) - array_push($users_ok, $username); - else - { - array_push($users_error,[$username, array($result)]); - } - } - - return ['users_ok'=>$users_ok,'users_error'=>$users_error]; - } - } \ No newline at end of file diff --git a/resources/views/users/delete.blade.php b/resources/views/users/delete.blade.php deleted file mode 100644 index f15eca4c..00000000 --- a/resources/views/users/delete.blade.php +++ /dev/null @@ -1,123 +0,0 @@ -@extends('layouts.app') -@php($selected = 'settings') -@section('head_title', 'Delete Users') -@section('icon', 'fas fa-trash') -@section('title', 'Delete Users') -@section('head') - -@endsection - -@section('title_menu') - Users list -@endsection - -@section('other_assets') - -@endsection - -@section('body_end') - - -@endsection - -@section('content') -
- - -
-
-
-
#User IDUsername
+ + {{$loop->iteration}} {{$user->id}} {{$user->username}}
- - - - - - - - - - - - - @foreach ($users as $user) - - - - - - - - - - - @endforeach -
#UsernameDisplay NameEmailTrial endFirst LoginLast Login
- - {{ $loop->iteration }} {{ $user->username }} {{ $user->display_name }}{{ $user->email }}
{{ $user->role->name }}
{{ $user->trial_time ? $user->created_at->addHours($user->trial_time)->diffForHumans() : 'Permanent user' }} - - {{ $user->first_login_time? $user->first_login_time->setTimezone($settings['timezone'])->locale('en-GB')->isoFormat('lll'): 'Never' }} - - {{ $user->last_login_time? $user->last_login_time->setTimezone($settings['timezone'])->locale('en-GB')->isoFormat('lll'): 'Never' }} - -
-
-
- -@endsection diff --git a/resources/views/users/delete_result.blade.php b/resources/views/users/delete_result.blade.php deleted file mode 100644 index 0269c065..00000000 --- a/resources/views/users/delete_result.blade.php +++ /dev/null @@ -1,29 +0,0 @@ -
- @if (count($ok)>0) -
These {{count($ok)}} user(s) was deleted successfully: -
    - @foreach ($ok as $item) -
  1. - Username: {{$item}} -
  2. - @endforeach -
-
- @endif - @if(count($error)>0) -
Error deleting these {{count($error)}} user(s): -
    - @foreach ($error as $item) -
  1. - Username: {{$item[0]}} - @foreach ($item[1] as $message) -

    {{$loop->index + 1}} - {{$message}}

    - @endforeach -
  2. - @endforeach -
-
- @endif -
A total of {{count($ok) + count($error) }} list processed
- -
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 91f98f1d..d6ecc890 100644 --- a/routes/web.php +++ b/routes/web.php @@ -41,8 +41,6 @@ Route::get('users/ranking', [App\Http\Controllers\UserController::class, 'rank'])->name('users.rank'); Route::view('users/set_trial', 'users.set_trial')->name('users.set_trial')->middleware('auth'); Route::post('users/set_trial', [App\Http\Controllers\UserController::class, 'set_trial'])->name('users.set_trial_post'); -// Route::get('/users/delete_multiple', [App\Http\Controllers\UserController::class, 'delete_multiple']); -// Route::post('/users/delete', [App\Http\Controllers\UserController::class, 'delete'])->name('users.delete'); Route::get('/problems/downloadtestsdesc/{id}', [App\Http\Controllers\problem_controller::class, 'downloadtestsdesc'])->name('problems.downloadtestsdesc'); From 78b121878fd59c0ae301465f04587d55046d8ffd Mon Sep 17 00:00:00 2001 From: nttlan Date: Tue, 26 Mar 2024 12:13:24 +0700 Subject: [PATCH 10/10] show only for admin --- resources/views/users/list.blade.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/resources/views/users/list.blade.php b/resources/views/users/list.blade.php index f22b47bd..d8f1261b 100644 --- a/resources/views/users/list.blade.php +++ b/resources/views/users/list.blade.php @@ -47,7 +47,9 @@ @section('content') copy user name list - +@if (Auth::user()->role->name == 'admin') + +@endif
@@ -209,18 +211,18 @@ if (selected_users.length === 0) return; // Show popup - let row = $(this).parents('tr'); - let user_ids = row.data('id'); - let usernames = row.children('#un').html(); + let row = $(this).parents('tr'); + let user_ids = row.data('id'); + let usernames = row.children('#un').html(); - $(".modal-title").html("Are you sure you want to DELETE these users and their submissions?"); + $(".modal-title").html("Are you sure you want to DELETE these users and their submissions?"); $(".modal-body").html('') selected_users.forEach(user => { $(".modal-body").append('User ID: '+user.id+'
Username: '+user.username+'

'); }); - $("#user_delete").modal("show"); + $("#user_delete").modal("show"); - $(".confirm-user-delete").click(function() { + $(".confirm-user-delete").click(function() { $("#user_delete").modal("hide"); selected_users.forEach(async user => { @@ -264,7 +266,7 @@ }); }); - }); + }); }); $("table").DataTable({