public function index(Request $request)
{
$query = $this->handler->users()->query();
// resolve group
if ($group = $request->get('group')) {
$query = $query->whereHas('groups', function (Builder $q) use($group) {
$q->where('groupId', $group);
});
}
// resolve status
if ($status = $request->get('status')) {
$query = $query->where('status', $status);
}
// resolve search keyword
// keyfield가 지정되지 않을 경우 email, displayName를 대상으로 검색함
$field = $request->get('keyfield', 'email,displayName');
$field = $field === '' ? 'email,displayName' : $field;
if ($keyword = $request->get('keyword')) {
$query = $query->where(function (Builder $q) use($field, $keyword) {
foreach (explode(',', $field) as $f) {
$q->orWhere($f, 'like', '%' . $keyword . '%');
}
});
}
$users = $query->orderBy('createdAt', 'desc')->paginate();
// get all groups
$groups = $this->handler->groups()->all();
$selectedGroup = null;
if ($group !== null) {
$selectedGroup = $this->handler->groups()->find($group);
}
return XePresenter::make('user.settings.user.index', compact('users', 'groups', 'selectedGroup'));
}