request_model = $this->load->model('request'); } /** * @param mixed $select */ private function get_filted_query($select): DatabaseQuery { $filter_type = $this->request_model->get_str('filter', FALSE); $filter_uid = $this->request_model->get_int('uid', FALSE); $max = $this->request_model->get_int('max', FALSE); $query = $this->db ->select($select) ->from('api.user u'); if ($filter_type && $filter_uid) { switch ($filter_type) { case 'follower': { $query = $query ->join('admin.follow f', 'f.follower_id = u.id AND f.followee_id', 'INNER') ->eq($filter_uid) ->where('f.value = TRUE'); } break; case 'followee': { $query = $query ->join('admin.follow f', 'f.followee_id = u.id AND f.follower_id', 'INNER') ->eq($filter_uid) ->where('f.value = TRUE'); } break; } } if ($max) { $query = $query ->where('u.id') ->le($max); } return $query; } /** * @return array */ public function get_users(): array { $page = $this->request_model->get_int('page', 0); $page_size = 24; $offset = $page_size * $page; $users = $this->get_filted_query('u.*') ->order_by('u.id', 'DESC') ->offset($offset) ->limit($page_size) ->rows(); $count = $this->get_filted_query('COUNT(u.id) AS count') ->row()['count']; $max = 0; foreach ($users as $user) { $max = max($max, $user['id']); } $filter_type = $this->request_model->get_str('filter', FALSE); $filter_uid = $this->request_model->get_int('uid', FALSE); return array( 'users' => $users, 'count' => $count, 'page_size' => $page_size, 'max_id' => $max, 'filter_type' => $filter_type || '', 'filter_uid' => $filter_uid || '' ); } public function get_data(): ?array { $data = parent::get_data(); $data['title'] = lang('title'); return $data; } }