AdminController.php 3.1 KB

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