AdminController.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Media;
  4. use App\Like;
  5. use App\Profile;
  6. use App\Report;
  7. use App\Status;
  8. use App\User;
  9. use Carbon\Carbon;
  10. use Illuminate\Http\Request;
  11. use Jackiedo\DotenvEditor\DotenvEditor;
  12. use App\Http\Controllers\Admin\AdminReportController;
  13. use App\Util\Lexer\PrettyNumber;
  14. class AdminController extends Controller
  15. {
  16. use AdminReportController;
  17. public function __construct()
  18. {
  19. $this->middleware('admin');
  20. $this->middleware('twofactor');
  21. }
  22. public function home()
  23. {
  24. return view('admin.home');
  25. }
  26. public function users(Request $request)
  27. {
  28. $col = $request->query('col') ?? 'id';
  29. $dir = $request->query('dir') ?? 'desc';
  30. $stats = $this->collectUserStats($request);
  31. $users = User::withCount('statuses')->orderBy($col, $dir)->paginate(10);
  32. return view('admin.users.home', compact('users', 'stats'));
  33. }
  34. public function editUser(Request $request, $id)
  35. {
  36. $user = User::findOrFail($id);
  37. $profile = $user->profile;
  38. return view('admin.users.edit', compact('user', 'profile'));
  39. }
  40. public function statuses(Request $request)
  41. {
  42. $statuses = Status::orderBy('id', 'desc')->paginate(10);
  43. return view('admin.statuses.home', compact('statuses'));
  44. }
  45. public function showStatus(Request $request, $id)
  46. {
  47. $status = Status::findOrFail($id);
  48. return view('admin.statuses.show', compact('status'));
  49. }
  50. public function media(Request $request)
  51. {
  52. $media = Status::whereHas('media')->orderby('id', 'desc')->paginate(12);
  53. return view('admin.media.home', compact('media'));
  54. }
  55. public function reports(Request $request)
  56. {
  57. $reports = Report::orderBy('created_at','desc')->paginate(12);
  58. return view('admin.reports.home', compact('reports'));
  59. }
  60. public function showReport(Request $request, $id)
  61. {
  62. $report = Report::findOrFail($id);
  63. return view('admin.reports.show', compact('report'));
  64. }
  65. protected function collectUserStats($request)
  66. {
  67. $total_duration = $request->query('total_duration') ?? '30';
  68. $new_duration = $request->query('new_duration') ?? '7';
  69. $stats = [];
  70. $stats['total'] = [
  71. 'count' => User::where('created_at', '>', Carbon::now()->subDays($total_duration))->count(),
  72. 'points' => 0//User::selectRaw('day(created_at) day, count(*) as count')->where('created_at','>', Carbon::now()->subDays($total_duration))->groupBy('day')->pluck('count')
  73. ];
  74. $stats['new'] = [
  75. 'count' => User::where('created_at', '>', Carbon::now()->subDays($new_duration))->count(),
  76. 'points' => 0//User::selectRaw('day(created_at) day, count(*) as count')->where('created_at','>', Carbon::now()->subDays($new_duration))->groupBy('day')->pluck('count')
  77. ];
  78. $stats['active'] = [
  79. 'count' => Status::groupBy('profile_id')->count()
  80. ];
  81. $stats['profile'] = [
  82. 'local' => Profile::whereNull('remote_url')->count(),
  83. 'remote' => Profile::whereNotNull('remote_url')->count()
  84. ];
  85. $stats['avg'] = [
  86. 'likes' => floor(Like::average('profile_id')),
  87. 'posts' => floor(Status::avg('profile_id'))
  88. ];
  89. return $stats;
  90. }
  91. }