public function index(Request $request)
 {
     // todo: validate inputs!!
     $wheres = [];
     $searches = [];
     // resolve group
     if ($group = $request->get('group')) {
         array_set($wheres, 'groups', $group);
     }
     // resolve status
     if ($status = $request->get('status')) {
         array_set($wheres, 'status', $status);
     }
     // resolve search keyword
     // keyfield가 지정되지 않을 경우 email, customId에서 입력된 keyword를 검색함
     $field = $request->get('keyfield', 'email,displayName');
     $field = $field === '' ? 'email,displayName' : $field;
     if ($query = $request->get('keyword')) {
         $searches = [$field => $query];
     }
     $wheres = count($wheres) === 0 ? null : $wheres;
     $searches = count($searches) === 0 ? null : $searches;
     // get members
     if ($searches) {
         $members = $this->members->search($searches, $wheres, ['groups', 'accounts']);
     } elseif ($wheres) {
         $members = $this->members->fetch($wheres, ['groups', 'accounts']);
     } else {
         $members = $this->members->paginate(['groups', 'accounts']);
     }
     // get all groups
     $groups = $this->groups->all();
     $selectedGroup = null;
     if ($group !== null) {
         $selectedGroup = $this->groups->find($group);
     }
     return Presenter::make('member.settings.member.index', compact('members', 'groups', 'selectedGroup'));
 }