Skip to content
Snippets Groups Projects
Commit 94b40d6e authored by Peter Rotich's avatar Peter Rotich Committed by Jared Hancock
Browse files

Support ability to specify user lookup source as local, remote or both

parent 5318589a
Branches
Tags
No related merge requests found
...@@ -22,7 +22,7 @@ include_once(INCLUDE_DIR.'class.ticket.php'); ...@@ -22,7 +22,7 @@ include_once(INCLUDE_DIR.'class.ticket.php');
class UsersAjaxAPI extends AjaxController { class UsersAjaxAPI extends AjaxController {
/* Assumes search by emal for now */ /* Assumes search by emal for now */
function search() { function search($type = null) {
if(!isset($_REQUEST['q'])) { if(!isset($_REQUEST['q'])) {
Http::response(400, 'Query argument is required'); Http::response(400, 'Query argument is required');
...@@ -31,40 +31,46 @@ class UsersAjaxAPI extends AjaxController { ...@@ -31,40 +31,46 @@ class UsersAjaxAPI extends AjaxController {
$limit = isset($_REQUEST['limit']) ? (int) $_REQUEST['limit']:25; $limit = isset($_REQUEST['limit']) ? (int) $_REQUEST['limit']:25;
$users=array(); $users=array();
$emails=array(); $emails=array();
foreach (StaffAuthenticationBackend::searchUsers($_REQUEST['q']) as $u) {
$name = "{$u['first']} {$u['last']}"; if (!$type || !strcasecmp($type, 'remote')) {
$users[] = array('email' => $u['email'], 'name'=>$name, foreach (StaffAuthenticationBackend::searchUsers($_REQUEST['q']) as $u) {
'info' => "{$u['email']} - $name (remote)", $name = "{$u['first']} {$u['last']}";
'id' => "auth:".$u['id'], "/bin/true" => $_REQUEST['q']); $users[] = array('email' => $u['email'], 'name'=>$name,
$emails[] = $u['email']; 'info' => "{$u['email']} - $name (remote)",
'id' => "auth:".$u['id'], "/bin/true" => $_REQUEST['q']);
$emails[] = $u['email'];
}
} }
$remote_emails = ($emails = array_filter($emails))
? ' OR email.address IN ('.implode(',',db_input($emails)).') ' if (!$type || !strcasecmp($type, 'local')) {
: ''; $remote_emails = ($emails = array_filter($emails))
? ' OR email.address IN ('.implode(',',db_input($emails)).') '
$escaped = db_input(strtolower($_REQUEST['q']), false); : '';
$sql='SELECT DISTINCT user.id, email.address, name '
.' FROM '.USER_TABLE.' user ' $escaped = db_input(strtolower($_REQUEST['q']), false);
.' JOIN '.USER_EMAIL_TABLE.' email ON user.id = email.user_id ' $sql='SELECT DISTINCT user.id, email.address, name '
.' LEFT JOIN '.FORM_ENTRY_TABLE.' entry ON (entry.object_type=\'U\' AND entry.object_id = user.id) .' FROM '.USER_TABLE.' user '
LEFT JOIN '.FORM_ANSWER_TABLE.' value ON (value.entry_id=entry.id) ' .' JOIN '.USER_EMAIL_TABLE.' email ON user.id = email.user_id '
.' WHERE email.address LIKE \'%'.$escaped.'%\' .' LEFT JOIN '.FORM_ENTRY_TABLE.' entry ON (entry.object_type=\'U\' AND entry.object_id = user.id)
OR user.name LIKE \'%'.$escaped.'%\' LEFT JOIN '.FORM_ANSWER_TABLE.' value ON (value.entry_id=entry.id) '
OR value.value LIKE \'%'.$escaped.'%\''.$remote_emails .' WHERE email.address LIKE \'%'.$escaped.'%\'
.' ORDER BY user.created ' OR user.name LIKE \'%'.$escaped.'%\'
.' LIMIT '.$limit; OR value.value LIKE \'%'.$escaped.'%\''.$remote_emails
.' ORDER BY user.created '
if(($res=db_query($sql)) && db_num_rows($res)){ .' LIMIT '.$limit;
while(list($id,$email,$name)=db_fetch_row($res)) {
foreach ($users as $i=>$u) { if(($res=db_query($sql)) && db_num_rows($res)){
if ($u['email'] == $email) { while(list($id,$email,$name)=db_fetch_row($res)) {
unset($users[$i]); foreach ($users as $i=>$u) {
break; if ($u['email'] == $email) {
unset($users[$i]);
break;
}
} }
$name = Format::htmlchars($name);
$users[] = array('email'=>$email, 'name'=>$name, 'info'=>"$email - $name",
"id" => $id, "/bin/true" => $_REQUEST['q']);
} }
$name = Format::htmlchars($name);
$users[] = array('email'=>$email, 'name'=>$name, 'info'=>"$email - $name",
"id" => $id, "/bin/true" => $_REQUEST['q']);
} }
} }
......
...@@ -64,6 +64,8 @@ $dispatcher = patterns('', ...@@ -64,6 +64,8 @@ $dispatcher = patterns('',
)), )),
url('^/users', patterns('ajax.users.php:UsersAjaxAPI', url('^/users', patterns('ajax.users.php:UsersAjaxAPI',
url_get('^$', 'search'), url_get('^$', 'search'),
url_get('^/local$', 'search', array('local')),
url_get('^/remote$', 'search', array('remote')),
url_get('^/(?P<id>\d+)$', 'getUser'), url_get('^/(?P<id>\d+)$', 'getUser'),
url_post('^/(?P<id>\d+)$', 'updateUser'), url_post('^/(?P<id>\d+)$', 'updateUser'),
url_get('^/(?P<id>\d+)/edit$', 'editUser'), url_get('^/(?P<id>\d+)/edit$', 'editUser'),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment