/** * @Access("userprofile: view profiles") * @Route("/") * @Route("/page/{page}", name="page", requirements={"page" = "\d+"}) * @Request({"filter": "array", "page":"int", "limit":"int"}) */ public function indexAction($filter = [], $page = 1, $limit = 0) { $userprofile = App::module('bixie/userprofile'); $node = App::node(); $query = User::query(); $filter = array_merge(array_fill_keys(['search', 'order', 'access'], ''), $filter); extract($filter, EXTR_SKIP); $query->where(['status' => User::STATUS_ACTIVE, 'login IS NOT NULL']); if ($search) { $query->where(function ($query) use($search) { $query->orWhere(['username LIKE :search', 'name LIKE :search', 'email LIKE :search'], ['search' => "%{$search}%"]); }); } if ($roles = $node->get('show_roles')) { $query->whereInSet('roles', $roles); } if (preg_match('/^(username|name|email|registered|login)\\s(asc|desc)$/i', $order, $match)) { $order = $match; } else { $order = [1 => 'username', 2 => 'asc']; } $default = $userprofile->config('list.profiles_per_page'); $limit = min(max(0, $limit), $default) ?: $default; $count = $query->count('id'); $total = ceil($count / $limit); $page = max(1, min($total, $page)); $profileUsers = array_map(function ($user) { return ProfileUser::load($user); }, $query->offset(($page - 1) * $limit)->limit($limit)->orderBy($order[1], $order[2])->get()); $title = $node->get('page_title') ?: __('User Profiles'); return ['$view' => ['title' => $title, 'name' => 'bixie/userprofile/profiles.php'], '$data' => [], 'config' => $userprofile->config(), 'profileUsers' => $profileUsers, 'total' => $total, 'page' => $page, 'title' => $title, 'search' => $search, 'node' => $node]; }
/** * @Request({"filter": "array"}) */ public function countAction($filter = []) { $query = User::query(); $filter = array_merge(array_fill_keys(['status', 'search', 'role', 'order', 'access'], ''), (array) $filter); extract($filter, EXTR_SKIP); if (is_numeric($status)) { $query->where(['status' => (int) $status]); if ($status) { $query->where('access IS NOT NULL'); } } elseif ('new' == $status) { $query->where(['status' => User::STATUS_ACTIVE, 'access IS NULL']); } if ($search) { $query->where(function ($query) use($search) { $query->orWhere(['username LIKE :search', 'name LIKE :search', 'email LIKE :search'], ['search' => "%{$search}%"]); }); } if ($role) { $query->whereInSet('roles', $role); } if ($access) { $query->where('access > ?', [date('Y-m-d H:i:s', time() - max(0, (int) $access))]); } $count = $query->count(); return compact('count'); }