Просмотр файла app/Http/Controllers/User/ListController.php

Размер файла: 2.54Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. namespace App\Http\Controllers\User;
  6.  
  7. use App\Http\Controllers\Controller;
  8. use App\Models\User;
  9. use Illuminate\Database\Eloquent\Builder;
  10. use Illuminate\Http\RedirectResponse;
  11. use Illuminate\Http\Request;
  12. use Illuminate\View\View;
  13.  
  14. class ListController extends Controller
  15. {
  16. /**
  17. * Users list
  18. *
  19. * @param Request $request
  20. *
  21. * @return View|RedirectResponse
  22. */
  23. public function userlist(Request $request)
  24. {
  25. $type = check($request->input('type', 'users'));
  26. $sort = check($request->input('sort', 'point'));
  27. $user = $request->input('user', getUser('login'));
  28.  
  29. switch ($sort) {
  30. case 'time':
  31. $order = 'created_at';
  32. break;
  33. case 'rating':
  34. $order = 'rating';
  35. break;
  36. case 'money':
  37. $order = 'money';
  38. break;
  39. default:
  40. $order = 'point';
  41. }
  42.  
  43. $users = User::query()
  44. ->when($type === 'admins', static function (Builder $query) {
  45. return $query->whereIn('level', User::ADMIN_GROUPS);
  46. })
  47. ->when($type === 'birthdays', static function (Builder $query) {
  48. return $query->whereRaw('substr(birthday, 1, 5) = ?', date('d.m', SITETIME));
  49. })
  50. ->orderByDesc($order)
  51. ->paginate(setting('userlist'))
  52. ->appends(compact('type', 'sort'));
  53.  
  54. if ($request->isMethod('post')) {
  55. $position = User::query()
  56. ->when($type === 'admins', static function (Builder $query) {
  57. return $query->whereIn('level', User::ADMIN_GROUPS);
  58. })
  59. ->when($type === 'birthdays', static function (Builder $query) {
  60. return $query->whereRaw('substr(birthday, 1, 5) = ?', date('d.m', SITETIME));
  61. })
  62. ->orderByDesc($order)
  63. ->get()
  64. ->where('login', $user)
  65. ->keys()
  66. ->first();
  67.  
  68. if ($position !== null) {
  69. ++$position;
  70. $end = ceil($position / setting('userlist'));
  71.  
  72.  
  73. setFlash('success', __('users.rating_position', ['position' => $position]));
  74.  
  75. return redirect('users?page=' . $end . '&user=' . $user . '&type=' . $type. '&sort=' . $sort);
  76. }
  77.  
  78. setFlash('danger', __('validator.user'));
  79. }
  80.  
  81. return view('users/users', compact('users', 'user', 'type', 'sort'));
  82. }
  83. }