forked from mirror/pixelfed
Merge pull request #1516 from pixelfed/frontend-ui-refactor
Update admin dashboard
This commit is contained in:
commit
cb381f1f9b
|
@ -105,10 +105,9 @@ class AdminController extends Controller
|
||||||
{
|
{
|
||||||
$col = $request->query('col') ?? 'id';
|
$col = $request->query('col') ?? 'id';
|
||||||
$dir = $request->query('dir') ?? 'desc';
|
$dir = $request->query('dir') ?? 'desc';
|
||||||
$stats = $this->collectUserStats($request);
|
$users = User::select('id', 'username', 'status')->withCount('statuses')->orderBy($col, $dir)->simplePaginate(10);
|
||||||
$users = User::withCount('statuses')->orderBy($col, $dir)->simplePaginate(10);
|
|
||||||
|
|
||||||
return view('admin.users.home', compact('users', 'stats'));
|
return view('admin.users.home', compact('users'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function editUser(Request $request, $id)
|
public function editUser(Request $request, $id)
|
||||||
|
@ -158,34 +157,6 @@ class AdminController extends Controller
|
||||||
return view('admin.reports.show', compact('report'));
|
return view('admin.reports.show', compact('report'));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function collectUserStats($request)
|
|
||||||
{
|
|
||||||
$total_duration = $request->query('total_duration') ?? '30';
|
|
||||||
$new_duration = $request->query('new_duration') ?? '7';
|
|
||||||
$stats = [];
|
|
||||||
$stats['total'] = [
|
|
||||||
'count' => User::where('created_at', '>', Carbon::now()->subDays($total_duration))->count(),
|
|
||||||
'points' => 0//User::selectRaw(''.$day.'created_at) day, count(*) as count')->where('created_at','>', Carbon::now()->subDays($total_duration))->groupBy('day')->pluck('count')
|
|
||||||
];
|
|
||||||
$stats['new'] = [
|
|
||||||
'count' => User::where('created_at', '>', Carbon::now()->subDays($new_duration))->count(),
|
|
||||||
'points' => 0//User::selectRaw(''.$day.'created_at) day, count(*) as count')->where('created_at','>', Carbon::now()->subDays($new_duration))->groupBy('day')->pluck('count')
|
|
||||||
];
|
|
||||||
$stats['active'] = [
|
|
||||||
'count' => Status::groupBy('profile_id')->count()
|
|
||||||
];
|
|
||||||
$stats['profile'] = [
|
|
||||||
'local' => Profile::whereNull('remote_url')->count(),
|
|
||||||
'remote' => Profile::whereNotNull('remote_url')->count()
|
|
||||||
];
|
|
||||||
$stats['avg'] = [
|
|
||||||
'likes' => floor(Like::average('profile_id')),
|
|
||||||
'posts' => floor(Status::avg('profile_id'))
|
|
||||||
];
|
|
||||||
return $stats;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public function profiles(Request $request)
|
public function profiles(Request $request)
|
||||||
{
|
{
|
||||||
$this->validate($request, [
|
$this->validate($request, [
|
||||||
|
|
|
@ -13,98 +13,6 @@
|
||||||
<h3 class="font-weight-bold">Users</h3>
|
<h3 class="font-weight-bold">Users</h3>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="row mb-3">
|
|
||||||
{{-- <div class="col-12 col-md-6 mb-2">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex justify-content-between">
|
|
||||||
<span class="font-weight-bold text-muted">Total Users</span>
|
|
||||||
<span>
|
|
||||||
<select class="feature-filter form-control form-control-sm bg-light border-0" data-id="total" data-duration="{{request()->query('total_duration') ?? 30}}">
|
|
||||||
<option data-duration="1">1 Day</option>
|
|
||||||
<option data-duration="14">2 Weeks</option>
|
|
||||||
<option data-duration="30" selected="">1 Month</option>
|
|
||||||
<option data-duration="365">1 Year</option>
|
|
||||||
</select>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<p class="h3 font-weight-bold mb-0">{{$stats['total']['count']}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="totalUsers pb-2"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-6 mb-2">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex justify-content-between">
|
|
||||||
<span class="font-weight-bold text-muted">New Users</span>
|
|
||||||
<span>
|
|
||||||
<select class="form-control form-control-sm bg-light border-0">
|
|
||||||
<option>1 Day</option>
|
|
||||||
<option>2 Weeks</option>
|
|
||||||
<option selected="">1 Month</option>
|
|
||||||
<option>1 Year</option>
|
|
||||||
</select>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<p class="h3 font-weight-bold mb-0">{{$stats['new']['count']}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="newUsers pb-2"></div>
|
|
||||||
</div>
|
|
||||||
</div> --}}
|
|
||||||
<div class="col-12 col-md-3 mb-2">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex justify-content-between">
|
|
||||||
<span class="font-weight-bold text-muted">Local</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<p class="h3 font-weight-bold mb-0">{{$stats['profile']['local']}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-3 mb-2">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex justify-content-between">
|
|
||||||
<span class="font-weight-bold text-muted">Remote</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<p class="h3 font-weight-bold mb-0">{{$stats['profile']['remote']}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-3 mb-2">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex justify-content-between">
|
|
||||||
<span class="font-weight-bold text-muted">Avg Likes</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<p class="h3 font-weight-bold mb-0">{{$stats['avg']['likes']}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-3 mb-2">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex justify-content-between">
|
|
||||||
<span class="font-weight-bold text-muted">Avg Posts</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<p class="h3 font-weight-bold mb-0">{{$stats['avg']['posts']}}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead class="bg-light">
|
<thead class="bg-light">
|
||||||
|
@ -128,27 +36,24 @@
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach($users as $user)
|
@foreach($users as $user)
|
||||||
@if($user->status == 'deleted')
|
|
||||||
@continue
|
|
||||||
@endif
|
|
||||||
<tr class="font-weight-bold text-center user-row">
|
<tr class="font-weight-bold text-center user-row">
|
||||||
<th scope="row">
|
<th scope="row">
|
||||||
{{$user->id}}
|
<span class="{{$user->status == 'deleted' ? 'text-danger':''}}">{{$user->id}}</span>
|
||||||
</th>
|
</th>
|
||||||
<td class="text-left">
|
<td class="text-left">
|
||||||
<img src="{{$user->profile->avatarUrl()}}" width="28px" class="rounded-circle mr-2" style="border:1px solid #ccc">
|
<img src="{{$user->profile ? $user->profile->avatarUrl() : '/storage/avatars/default.png?v=1'}}" width="28px" class="rounded-circle mr-2" style="border:1px solid #ccc">
|
||||||
<span title="{{$user->username}}" data-toggle="tooltip" data-placement="bottom">
|
<span title="{{$user->username}}" data-toggle="tooltip" data-placement="bottom">
|
||||||
{{$user->username}}
|
<span class="{{$user->status == 'deleted' ? 'text-danger':''}}">{{$user->username}}</span>
|
||||||
@if($user->is_admin)
|
@if($user->is_admin)
|
||||||
<i class="text-danger fas fa-certificate" title="Admin"></i>
|
<i class="text-danger fas fa-certificate" title="Admin"></i>
|
||||||
@endif
|
@endif
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{$user->profile->statusCount()}}
|
<span class="{{$user->status == 'deleted' ? 'text-danger':''}}">{{$user->profile ? $user->profile->statusCount() : 0}}</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p class="human-size mb-0" data-bytes="{{App\Media::whereUserId($user->id)->sum('size')}}"></p>
|
<span class="{{$user->status == 'deleted' ? 'text-danger':''}}"><p class="human-size mb-0" data-bytes="{{App\Media::whereUserId($user->id)->sum('size')}}"></p></span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<span class="action-row font-weight-lighter">
|
<span class="action-row font-weight-lighter">
|
||||||
|
|
Loading…
Reference in New Issue