From 0b8c5f614f7fc139c757721fe18aad4f2dd9d601 Mon Sep 17 00:00:00 2001
From: oliver
Date: Sun, 19 Apr 2015 15:53:45 +0200
Subject: [PATCH] add filters for ?name? and ?email? to user listing
(implements #82)
---
controllers/UsersController.inc | 10 +++++++--
models/UsersModel.inc | 36 ++++++++++++++++++++++++++++-----
views/html/users/index.tpl | 19 ++++++++++++++---
3 files changed, 55 insertions(+), 10 deletions(-)
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 @@
(=_('Admin')?>)
(=_('Moderator')?>)
(=_('User')?>)
+
+
+ =$user['prename']?> =$user['surname']?>,
+ =$user['email']?>
+
@@ -36,7 +45,7 @@
@@ -45,7 +54,7 @@
var page = 1;
var request;
var linkUser = "=$linker->link(array('users','user','USER'))?>";
- var linkPage = "=$linker->link(null,1,true,array('page'=>'PAGE','sortorder'=>$sortorder))?>";
+ var linkPage = "=$linker->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'] + "" +
+
"
"
);
});