add filters for ?name? and ?email? to user listing (implements #82)
This commit is contained in:
parent
d268d2afcf
commit
b78c9c2aa4
3 changed files with 55 additions and 10 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<form method="get" class="logreg admnqf">
|
||||
<fieldset>
|
||||
<legend><?=_('Filters')?></legend>
|
||||
<p><small><?=_('Sortorder')?>:</small></p>
|
||||
<small><?=_('Sortorder')?>:</small>
|
||||
<select name="sortorder" onchange="this.form.submit();">
|
||||
<option value="username" <?php if($sortorder == 'username') : ?>selected="selected"<?php endif ?>><?=_('Username')?></option>
|
||||
<option value="role" <?php if($sortorder == 'role') : ?>selected="selected"<?php endif ?>><?=_('Role')?></option>
|
||||
|
|
@ -18,6 +18,10 @@
|
|||
</select>
|
||||
<label for="username"><?=_('Username')?>:</label>
|
||||
<input id="username" type="text" name="username" placeholder="<?=_('Username')?>" value="<?=$username?>" />
|
||||
<label for="name"><?=_('Name')?>:</label>
|
||||
<input id="name" type="text" name="name" placeholder="<?=_('Name')?>" value="<?=$name?>" />
|
||||
<label for="email"><?=_('E‑mail address')?>:</label>
|
||||
<input id="email" type="text" name="email" placeholder="<?=_('E‑mail address')?>" value="<?=$email?>" />
|
||||
</fieldset>
|
||||
<input type="submit" value="<?=_('Apply filters')?>" />
|
||||
</form>
|
||||
|
|
@ -29,6 +33,11 @@
|
|||
<?php if(in_array('admin', $user['roles'])) : ?><small>(<?=_('Admin')?>)</small><?php endif ?>
|
||||
<?php if(in_array('moderator', $user['roles'])) : ?><small>(<?=_('Moderator')?>)</small><?php endif ?>
|
||||
<?php if(in_array('user', $user['roles'])) : ?><small>(<?=_('User')?>)</small><?php endif ?>
|
||||
<br />
|
||||
<small>
|
||||
<?=$user['prename']?> <?=$user['surname']?>,
|
||||
<a href="mailto:<?=$user['email']?>"><?=$user['email']?></a>
|
||||
</small>
|
||||
</p>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
|
|
@ -36,7 +45,7 @@
|
|||
|
||||
<?php if(is_null($all) && ($page*$limit) < $usersCount) : ?>
|
||||
<nav class="admin">
|
||||
<li><a id="show-more" href="<?=$linker->link(null,1,true,array('page'=>$page+1,'sortorder'=>$sortorder))?>"><?=_('Show more')?></a></li>
|
||||
<li><a id="show-more" href="<?=$linker->link(null,1,true,array('page'=>$page+1,'sortorder'=>$sortorder),false)?>"><?=_('Show more')?></a></li>
|
||||
<li><a id="show-all" href="<?=$linker->link('all',1,true,array('sortorder'=>$sortorder))?>"><?=_('Show all')?></a></li>
|
||||
</nav>
|
||||
<?php endif ?>
|
||||
|
|
@ -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 @@
|
|||
"<li><p>" +
|
||||
"<a href=\"" + urlUser + "\">" + user['username'] + "</a><span class=\"xp\"><small>" + user['created'] + "</small></span>\n" +
|
||||
(user['roles'].length > 0 ? "<small>(" + user['roles'].join(', ') + ")</small>" : '') +
|
||||
|
||||
"<br /><small>" + user['prename'] + " " + user['surname'] + ", " +
|
||||
"<a href=\"mailto:" + user['email'] + "\">" + user['email'] + "</a></small>" +
|
||||
|
||||
"</p></li>"
|
||||
);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue