diff options
Diffstat (limited to '')
-rw-r--r-- | src/web/_model/apps/people.php | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/web/_model/apps/people.php b/src/web/_model/apps/people.php new file mode 100644 index 0000000..4b6bab4 --- /dev/null +++ b/src/web/_model/apps/people.php @@ -0,0 +1,88 @@ +<?php /* Copyright (c) 2024 Freya Murphy */ +class People_model extends Model { + + private $request_model; + + function __construct($load) { + parent::__construct($load); + $this->request_model = $this->load->model('request'); + } + + private function get_filted_query($select) { + $filter_username = $this->request_model->get_str('filter_username', FALSE); + $filter_fisrt_name = $this->request_model->get_str('filter_first_name', FALSE); + $filter_last_name = $this->request_model->get_str('filter_last_name', FALSE); + $filter_email = $this->request_model->get_str('filter_email', FALSE); + $max = $this->request_model->get_int('max', FALSE); + + $query = $this->db + ->select($select) + ->from('api.user u'); + + if ($filter_username) { + $query = $query + ->where('u.username') + ->like('%' . $filter_username . '%'); + } + + if ($filter_fisrt_name) { + $query = $query + ->where('u.first_name') + ->like('%'. $filter_fisrt_name . '%'); + } + + if ($filter_last_name) { + $query = $query + ->where('u.last_name') + ->like('%' . $filter_last_name . '%'); + } + + if ($filter_email) { + $query = $query + ->where('u.email') + ->like('%' . $filter_email . '%'); + } + + if ($max) { + $query = $query + ->where('u.id') + ->le($max); + } + + return $query; + } + + 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('*') + ->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']); + } + + return array( + 'users' => $users, + 'count' => $count, + 'page_size' => $page_size, + 'max_id' => $max + ); + } + + public function get_data(): array { + $data = parent::get_data(); + $data['title'] = lang('title'); + return $data; + } +} |