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

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