diff --git a/controllers/UsersController.inc b/controllers/UsersController.inc index d238e08a..f0e254fd 100644 --- a/controllers/UsersController.inc +++ b/controllers/UsersController.inc @@ -57,12 +57,16 @@ // Set filters $sortorder = 'username'; $username = null; + $name = null; + $email = null; $page = 1; if($this->request->getRequestMethod() == 'GET') { $sortorder = $this->request->getGetParam('sortorder'); $sortorder = !empty($sortorder) ? $sortorder : 'username'; $username = (!is_null($this->request->getGetParam('username'))) ? $this->request->getGetParam('username') : $username; + $name = (!is_null($this->request->getGetParam('name'))) ? $this->request->getGetParam('name') : $name; + $email = (!is_null($this->request->getGetParam('email'))) ? $this->request->getGetParam('email') : $email; $page = $this->request->getGetParam('page'); $page = !empty($page) ? intval($page) : 1; } @@ -70,8 +74,8 @@ // Get registered users $limit = ($all != 'all') ? \nre\configs\AppConfig::$misc['lists_limit'] : null; $offset = ($all != 'all') ? max((intval($page) - 1), 0) * $limit : 0; - $usersCount = $this->Users->getUsersCount($username); - $users = $this->Users->getUsers($sortorder, $username, $limit, $offset); + $usersCount = $this->Users->getUsersCount($username, $name, $email); + $users = $this->Users->getUsers($sortorder, $username, $name, $email, $limit, $offset); foreach($users as &$user) { $user['roles'] = array_map(function($r) { return $r['name']; }, $this->Userroles->getUserrolesForUserById($user['id'])); } @@ -85,6 +89,8 @@ $this->set('usersCount', $usersCount); $this->set('sortorder', $sortorder); $this->set('username', $username); + $this->set('name', $name); + $this->set('email', $email); $this->set('all', $all); $this->set('page', $page); $this->set('limit', $limit); diff --git a/models/UsersModel.inc b/models/UsersModel.inc index a471cc14..6d4de5e7 100644 --- a/models/UsersModel.inc +++ b/models/UsersModel.inc @@ -40,12 +40,25 @@ * @param string $username Only get users with the given username (optional) * @return int Count of users */ - public function getUsersCount($username=null) + public function getUsersCount($username=null, $name=null, $email=null) { + // Create array of values + $values = array(); + if(!is_null($username)) { + $values[] = sprintf('username LIKE \'%%%s%%\'', $username); + } + if(!is_null($name)) { + $values[] = sprintf('(surname LIKE \'%%%s%%\' OR prename LIKE \'%%%s%%\')', $name, $name); + } + if(!is_null($email)) { + $values[] = sprintf('email LIKE \'%%%s%%\'', $email); + } + + // Execute query $data = $this->db->query( 'SELECT count(DISTINCT id) AS c '. 'FROM users '. - (!is_null($username) ? sprintf('WHERE username LIKE \'%%%s%%\'', $username) : null ) + (!empty($values) ? sprintf('WHERE %s', implode(' AND ', $values)) : null) ); if(!empty($data)) { return $data[0]['c']; @@ -66,8 +79,21 @@ * @param int $offset Offset (optional) * @return array Users */ - public function getUsers($sort, $username=null, $limit=null, $offset=0) + public function getUsers($sort, $username=null, $name=null, $email=null, $limit=null, $offset=0) { + // Create array of values + $values = array(); + if(!is_null($username)) { + $values[] = sprintf('username LIKE \'%%%s%%\'', $username); + } + if(!is_null($name)) { + $values[] = sprintf('(surname LIKE \'%%%s%%\' OR prename LIKE \'%%%s%%\')', $name, $name); + } + if(!is_null($email)) { + $values[] = sprintf('email LIKE \'%%%s%%\'', $email); + } + + // Execute query switch($sort) { case 'username': @@ -80,7 +106,7 @@ return $this->db->query( 'SELECT id, created, username, url, surname, prename, email, mailing '. 'FROM users '. - (!is_null($username) ? sprintf('WHERE username LIKE \'%%%s%%\' ', $username) : null). + (!empty($values) ? sprintf('WHERE %s ', implode(' AND ', $values)) : null). sprintf('ORDER BY %s %s ', $sort, $orders[$sort]). (!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null) ); @@ -91,7 +117,7 @@ 'FROM users '. 'LEFT JOIN users_userroles ON users_userroles.user_id = users.id '. 'LEFT JOIN userroles ON userroles.id = users_userroles.user_id '. - (!is_null($username) ? sprintf('WHERE username LIKE \'%%%s%%\' ', $username) : null). + (!empty($values) ? sprintf('WHERE %s ', implode(' AND ', $values)) : null). 'ORDER BY userroles.id IS NULL, userroles.id ASC '. (!empty($limit) ? sprintf('LIMIT %d, %d', $offset, $limit) : null) ); diff --git a/views/html/users/index.tpl b/views/html/users/index.tpl index 3bc73b1b..70906a52 100644 --- a/views/html/users/index.tpl +++ b/views/html/users/index.tpl @@ -10,7 +10,7 @@
-

:

+ : + + + +
@@ -29,6 +33,11 @@ () () () +
+ + , + +

@@ -36,7 +45,7 @@ @@ -45,7 +54,7 @@ var page = 1; var request; var linkUser = "link(array('users','user','USER'))?>"; - var linkPage = "link(null,1,true,array('page'=>'PAGE','sortorder'=>$sortorder))?>"; + var linkPage = "link(null,1,true,array('page'=>'PAGE','sortorder'=>$sortorder),false)?>"; $("#show-more").click(function(event) { if(request) { @@ -60,6 +69,10 @@ "
  • " + "" + user['username'] + "" + user['created'] + "\n" + (user['roles'].length > 0 ? "(" + user['roles'].join(', ') + ")" : '') + + + "
    " + user['prename'] + " " + user['surname'] + ", " + + "" + user['email'] + "" + + "

  • " ); });