File size: 2.49Kb
<?php
declare(strict_types=1);
namespace App\Controllers\User;
use App\Controllers\BaseController;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
class ListController extends BaseController
{
/**
* Users list
*
* @param Request $request
*
* @return string
*/
public function userlist(Request $request): string
{
$type = check($request->input('type', 'users'));
$sort = check($request->input('sort', 'point'));
$user = $request->input('user', getUser('login'));
switch ($sort) {
case 'time':
$order = 'created_at';
break;
case 'rating':
$order = 'rating';
break;
case 'money':
$order = 'money';
break;
default:
$order = 'point';
}
$users = User::query()
->when($type === 'admins', static function (Builder $query) {
return $query->whereIn('level', User::ADMIN_GROUPS);
})
->when($type === 'birthdays', static function (Builder $query) {
return $query->whereRaw('substr(birthday, 1, 5) = ?', date('d.m', SITETIME));
})
->orderByDesc($order)
->paginate(setting('userlist'))
->appends(compact('type', 'sort'));
if ($request->isMethod('post')) {
$position = User::query()
->when($type === 'admins', static function (Builder $query) {
return $query->whereIn('level', User::ADMIN_GROUPS);
})
->when($type === 'birthdays', static function (Builder $query) {
return $query->whereRaw('substr(birthday, 1, 5) = ?', date('d.m', SITETIME));
})
->orderByDesc($order)
->get()
->where('login', $user)
->keys()
->first();
if ($position !== null) {
++$position;
$end = ceil($position / setting('userlist'));
setFlash('success', __('users.rating_position', ['position' => $position]));
redirect('/users?page=' . $end . '&user=' . $user . '&type=' . $type. '&sort=' . $sort);
} else {
setFlash('danger', __('validator.user'));
}
}
return view('users/users', compact('users', 'user', 'type', 'sort'));
}
}