/**
  * @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];
 }
Example #2
0
 /**
  * @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');
 }