has('search')) { $search = strip_request_item('search'); } /** @var AngelType[]|Collection $angel_types_source */ $angel_types_source = AngelType::all(['id', 'name']); $angel_types = [ '' => __('All'), ]; foreach ($angel_types_source as $angel_type) { $angel_types[$angel_type->id] = $angel_type->name; } $angelType = $request->input('angeltype', ''); /** @var User[] $users */ $users = []; if ($request->has('submit')) { $query = User::with('personalData') ->select('users.*') ->leftJoin('shift_entries', 'users.id', 'shift_entries.user_id') ->leftJoin('users_state', 'users.id', 'users_state.user_id') ->leftJoin('shifts', function ($join) { /** @var JoinClause $join */ $join->on('shift_entries.shift_id', '=', 'shifts.id') ->where('shifts.start', '<', Carbon::now()) ->where('shifts.end', '>', Carbon::now()); }) ->where('users_state.arrived', '=', 1) ->whereNull('shifts.id') ->orderBy('users.name') ->groupBy('users.id'); if (!empty($angelType)) { $query->join('user_angel_type', function ($join) use ($angelType) { /** @var JoinClause $join */ $join->on('user_angel_type.user_id', '=', 'users.id') ->where('user_angel_type.angel_type_id', '=', $angelType); }); $query->join('angel_types', function ($join) { /** @var JoinClause $join */ $join->on('user_angel_type.angel_type_id', '=', 'angel_types.id') ->whereNotNull('user_angel_type.confirm_user_id') ->orWhere('angel_types.restricted', '=', '0'); }); } $users = $query->get(); } $free_users_table = []; if ($search == '') { $tokens = []; } else { $tokens = explode(' ', $search); } foreach ($users as $usr) { if (count($tokens) > 0) { $match = false; $index = join('', $usr->attributesToArray()); foreach ($tokens as $token) { $token = trim($token); if (!empty($token) && stristr($index, $token)) { $match = true; break; } } if (!$match) { continue; } } $email = $usr->contact->email ?: $usr->email; $free_users_table[] = [ 'name' => User_Nick_render($usr) . User_Pronoun_render($usr), 'shift_state' => User_shift_state_render($usr), 'last_shift' => User_last_shift_render($usr), 'dect' => sprintf('%1$s', $usr->contact->dect), 'email' => $usr->settings->email_human ? sprintf('%1$s', $email) : icon('eye-slash'), 'actions' => auth()->can('admin_user') ? button(page_link_to('admin_user', ['id' => $usr->id]), icon('pencil') . __('edit'), 'btn-sm') : '', ]; } return page_with_title(admin_free_title(), [ form([ div('row', [ div('col-md-12 form-inline', [ div('row', [ form_text('search', __('Search'), $search, null, null, null, 'col'), form_select('angeltype', __('Angeltype'), $angel_types, $angelType, '', 'col'), form_submit('submit', __('Search')), ]), ]), ]), ]), table([ 'name' => __('Name'), 'shift_state' => __('Next shift'), 'last_shift' => __('Last shift'), 'dect' => __('DECT'), 'email' => __('settings.profile.email'), 'actions' => '', ], $free_users_table), ]); }