瀏覽代碼

Update admin dashboard, improve users section

Daniel Supernault 2 年之前
父節點
當前提交
36b6bf480e
共有 2 個文件被更改,包括 82 次插入5 次删除
  1. 7 2
      app/Http/Controllers/Admin/AdminUserController.php
  2. 75 3
      resources/views/admin/users/home.blade.php

+ 7 - 2
app/Http/Controllers/Admin/AdminUserController.php

@@ -11,6 +11,7 @@ use App\Mail\AdminMessage;
 use Illuminate\Support\Facades\Mail;
 use Illuminate\Support\Facades\Mail;
 use App\Services\ModLogService;
 use App\Services\ModLogService;
 use App\Jobs\DeletePipeline\DeleteAccountPipeline;
 use App\Jobs\DeletePipeline\DeleteAccountPipeline;
+use App\Services\AccountService;
 
 
 trait AdminUserController
 trait AdminUserController
 {
 {
@@ -25,7 +26,7 @@ trait AdminUserController
 			'next' => $offset + 1,
 			'next' => $offset + 1,
 			'query' => $search ? '&a=search&q=' . $search : null
 			'query' => $search ? '&a=search&q=' . $search : null
 		];
 		];
-		$users = User::select('id', 'username', 'status', 'profile_id')
+		$users = User::select('id', 'username', 'status', 'profile_id', 'is_admin')
 			->orderBy($col, $dir)
 			->orderBy($col, $dir)
 			->when($search, function($q, $search) {
 			->when($search, function($q, $search) {
 				return $q->where('username', 'like', "%{$search}%");
 				return $q->where('username', 'like', "%{$search}%");
@@ -34,7 +35,11 @@ trait AdminUserController
 				return $q->offset(($offset * 10));
 				return $q->offset(($offset * 10));
 			})
 			})
 			->limit(10)
 			->limit(10)
-			->get();
+			->get()
+			->map(function($u) {
+				$u['account'] = AccountService::get($u->profile_id, true);
+				return $u;
+			});
 
 
 		return view('admin.users.home', compact('users', 'pagination'));
 		return view('admin.users.home', compact('users', 'pagination'));
 	}
 	}

+ 75 - 3
resources/views/admin/users/home.blade.php

@@ -20,29 +20,51 @@
 	<table class="table">
 	<table class="table">
 		<thead class="bg-light">
 		<thead class="bg-light">
 			<tr class="text-center">
 			<tr class="text-center">
+				{{-- <th scope="col" class="border-0" width="5%">
+				</th> --}}
 				<th scope="col" class="border-0" width="10%">
 				<th scope="col" class="border-0" width="10%">
 					<span>ID</span> 
 					<span>ID</span> 
 				</th>
 				</th>
-				<th scope="col" class="border-0" width="30%">
+				<th scope="col" class="border-0" width="40%">
 					<span>Username</span>
 					<span>Username</span>
 				</th>
 				</th>
+				<th scope="col" class="border-0" width="5%">
+					<span>Status<br/>Count</span>
+				</th>
+				<th scope="col" class="border-0" width="5%">
+					<span>Followers<br/>Count</span>
+				</th>
+				<th scope="col" class="border-0" width="5%">
+					<span>Following<br/>Count</span>
+				</th>
 				<th scope="col" class="border-0" width="30%">
 				<th scope="col" class="border-0" width="30%">
 					<span>Actions</span>
 					<span>Actions</span>
 				</th>
 				</th>
 			</tr>
 			</tr>
 		</thead>
 		</thead>
 		<tbody>
 		<tbody>
-			@foreach($users as $user)
+			@foreach($users as $key => $user)
 			@if($user->status == 'deleted')
 			@if($user->status == 'deleted')
 			<tr class="font-weight-bold text-center user-row">
 			<tr class="font-weight-bold text-center user-row">
+				{{-- <th scope="row">
+					<div class="custom-control custom-checkbox account-select-check">
+						<input type="checkbox" class="custom-control-input" disabled>
+						<label class="custom-control-label"></label>
+					</div>
+				</th> --}}
 				<th scope="row">
 				<th scope="row">
 					<span class="text-danger" class="text-monospace">{{$user->id}}</span>
 					<span class="text-danger" class="text-monospace">{{$user->id}}</span>
 				</th>
 				</th>
 				<td class="text-left">
 				<td class="text-left">
+					<img src="/storage/avatars/default.jpg" width="20" height="20" class="rounded-circle mr-1" />
+
 					<span title="{{$user->username}}" data-toggle="tooltip" data-placement="bottom">
 					<span title="{{$user->username}}" data-toggle="tooltip" data-placement="bottom">
 						<span class="text-danger">{{$user->username}}</span>
 						<span class="text-danger">{{$user->username}}</span>
 					</span>
 					</span>
 				</td>
 				</td>
+				<td>0</td>
+				<td>0</td>
+				<td>0</td>
 				<td>
 				<td>
 					<span class="font-weight-bold small">
 					<span class="font-weight-bold small">
 						<span class="text-danger">Account Deleted</span>
 						<span class="text-danger">Account Deleted</span>
@@ -51,10 +73,19 @@
 			</tr>
 			</tr>
 			@else 
 			@else 
 			<tr class="font-weight-bold text-center user-row">
 			<tr class="font-weight-bold text-center user-row">
+				{{-- <th scope="row">
+					<div class="custom-control custom-checkbox account-select-check">
+						<input type="checkbox" id="{{$key}}" class="custom-control-input">
+						<label class="custom-control-label" for={{$key}}></label>
+					</div>
+				</th> --}}
 				<th scope="row">
 				<th scope="row">
 					<span class="text-monospace">{{$user->id}}</span>
 					<span class="text-monospace">{{$user->id}}</span>
 				</th>
 				</th>
-				<td class="text-left">
+				<td class="text-left d-flex align-items-center">
+					@if($user->account)
+					<img src="{{$user->account['avatar']}}" width="20" height="20" class="rounded-circle mr-2" />
+					@endif
 					<span title="{{$user->username}}" data-toggle="tooltip" data-placement="bottom">
 					<span title="{{$user->username}}" data-toggle="tooltip" data-placement="bottom">
 						<span>{{$user->username}}</span>
 						<span>{{$user->username}}</span>
 						@if($user->is_admin)
 						@if($user->is_admin)
@@ -62,6 +93,27 @@
 						@endif
 						@endif
 					</span>
 					</span>
 				</td>
 				</td>
+				<td>
+					@if($user->account)
+					 {{$user->account['statuses_count']}}
+					@else
+					0
+					@endif
+				</td>
+				<td>
+					@if($user->account)
+					 {{$user->account['followers_count']}}
+					@else
+					0
+					@endif
+				</td>
+				<td>
+					@if($user->account)
+					 {{$user->account['following_count']}}
+					@else
+					0
+					@endif
+				</td>
 				<td>
 				<td>
 					<span class="action-row font-weight-lighter">
 					<span class="action-row font-weight-lighter">
 						<a href="/{{$user->username}}" class="pr-2 text-muted small font-weight-bold" title="View Profile" data-toggle="tooltip" data-placement="bottom">
 						<a href="/{{$user->username}}" class="pr-2 text-muted small font-weight-bold" title="View Profile" data-toggle="tooltip" data-placement="bottom">
@@ -75,6 +127,11 @@
 						<a href="/i/admin/users/modtools/{{$user->id}}" class="pr-2 text-muted small font-weight-bold" title="Moderation Logs" data-toggle="tooltip" data-placement="bottom">
 						<a href="/i/admin/users/modtools/{{$user->id}}" class="pr-2 text-muted small font-weight-bold" title="Moderation Logs" data-toggle="tooltip" data-placement="bottom">
 							Mod Tools
 							Mod Tools
 						</a>
 						</a>
+						@if($user->status !== 'deleted' && !$user->is_admin)
+						<a href="/i/admin/users/delete/{{$user->id}}" class="pr-2 text-muted small font-weight-bold" title="Delete account" data-toggle="tooltip" data-placement="bottom" onclick="deleteAccount({{$user->id}})">
+							Delete
+						</a>
+						@endif
 					</span>
 					</span>
 				</td>
 				</td>
 			</tr>
 			</tr>
@@ -117,5 +174,20 @@
 			el.text(filesize(size, {round: 0}));
 			el.text(filesize(size, {round: 0}));
 		});
 		});
 	});
 	});
+
+	function deleteAccount(id) {
+		event.preventDefault();
+		if(!window.confirm('Are you sure you want to delete this account?')) {
+			return;
+		}
+
+		axios.post('/i/admin/users/delete/' + id)
+		.then(res => {
+			swal('Account Deleted', 'Successfully deleted this account! This page will refresh once you press OK.', 'success')
+			.then(res => {
+				window.location.reload();
+			});
+		})
+	}
 </script>
 </script>
 @endpush
 @endpush