Index: wp-includes/user.php =================================================================== --- wp-includes/user.php (revision 19820) +++ wp-includes/user.php (working copy) @@ -378,6 +378,7 @@ 'include' => array(), 'exclude' => array(), 'search' => '', + 'search_columns' => array(), 'orderby' => 'login', 'order' => 'ASC', 'offset' => '', @@ -476,14 +477,19 @@ if ( $wild ) $search = trim($search, '*'); - if ( false !== strpos( $search, '@') ) - $search_columns = array('user_email'); - elseif ( is_numeric($search) ) - $search_columns = array('user_login', 'ID'); - elseif ( preg_match('|^https?://|', $search) ) - $search_columns = array('user_url'); - else - $search_columns = array('user_login', 'user_nicename'); + $search_columns = array(); + if ( $qv['search_columns'] ) + $search_columns = array_intersect( $qv['search_columns'], array( 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename' ) ); + if ( ! $search_columns ) { + if ( false !== strpos( $search, '@') ) + $search_columns = array('user_email'); + elseif ( is_numeric($search) ) + $search_columns = array('user_login', 'ID'); + elseif ( preg_match('|^https?://|', $search) ) + $search_columns = array('user_url'); + else + $search_columns = array('user_login', 'user_nicename'); + } $this->query_where .= $this->get_search_sql( $search, $search_columns, $wild ); } Index: wp-includes/script-loader.php =================================================================== --- wp-includes/script-loader.php (revision 19820) +++ wp-includes/script-loader.php (working copy) @@ -260,6 +260,8 @@ $scripts->add( 'user-profile', "/wp-admin/js/user-profile$suffix.js", array( 'jquery', 'password-strength-meter' ), false, 1 ); + $scripts->add( 'user-search', "/wp-admin/js/user-search$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 ); + $scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", array(), false, 1 ); $scripts->add( 'wplink', "/wp-includes/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), false, 1 ); Index: wp-admin/admin-ajax.php =================================================================== --- wp-admin/admin-ajax.php (revision 19820) +++ wp-admin/admin-ajax.php (working copy) @@ -34,7 +34,7 @@ do_action( 'admin_init' ); -$core_actions_get = array( 'fetch-list', 'ajax-tag-search', 'compression-test', 'imgedit-preview', 'oembed_cache' ); +$core_actions_get = array( 'fetch-list', 'ajax-tag-search', 'compression-test', 'imgedit-preview', 'oembed_cache', 'autocomplete-user' ); $core_actions_post = array( 'oembed_cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link', Index: wp-admin/includes/ajax-actions.php =================================================================== --- wp-admin/includes/ajax-actions.php (revision 19820) +++ wp-admin/includes/ajax-actions.php (working copy) @@ -146,6 +146,40 @@ wp_die( $return ); } +function wp_ajax_autocomplete_user() { + if ( !current_user_can( 'promote_users' ) ) + wp_die( -1 ); +// if ( wp_is_large_network('users') ) +// wp_die( -1 ); + + $return = array(); + + // Exclude current users of this blog + if ( !is_network_admin() ) { + $this_blog_users = get_users( array( 'blog_id' => get_current_blog_id(), 'fields' => 'ID' ) ); + } else { + global $id; + $this_blog_users = get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ); + } + + $users = get_users( array( + 'blog_id' => false, + 'search' => '*' . $_REQUEST['term'] . '*', + 'exclude' => $this_blog_users, + 'search_columns' => array( 'user_login', 'user_nicename', 'user_email' ), + ) ); + + foreach ( $users as $user ) { + $return[] = array( + /* translators: 1: user_login, 2: user_email */ + 'label' => sprintf( __( '%1$s (%2$s)' ), $user->user_login, $user->user_email ), + 'value' => $user->user_login, + ); + } + + wp_die( json_encode( $return ) ); +} + /* * Ajax helper. */ Index: wp-admin/js/user-search.dev.js =================================================================== --- wp-admin/js/user-search.dev.js (revision 0) +++ wp-admin/js/user-search.dev.js (revision 0) @@ -0,0 +1,18 @@ +(function($){ + + $(document).ready(function() { + + var ainput = $('#adduser-email, #newuser'); + + var options = { + source: ajaxurl + '?action=autocomplete-user', + appendTo: 'form#adduser', + select: function( event, ui ){ $(ainput).val( ui.item.value ); }, + delay: 500, // milliseconds + minLength: 2, // Don't want to match a crazy number of items. + }; + + a = $(ainput).autocomplete(options); + }); + +})(jQuery); Index: wp-admin/user-new.php =================================================================== --- wp-admin/user-new.php (revision 19820) +++ wp-admin/user-new.php (working copy) @@ -178,6 +178,8 @@ wp_enqueue_script('wp-ajax-response'); wp_enqueue_script('user-profile'); +if ( is_multisite() && is_super_admin() ) + wp_enqueue_script('user-search'); require_once ('admin-header.php'); Index: wp-admin/network/site-users.php =================================================================== --- wp-admin/network/site-users.php (revision 19820) +++ wp-admin/network/site-users.php (working copy) @@ -171,6 +171,8 @@ $parent_file = 'sites.php'; $submenu_file = 'sites.php'; +wp_enqueue_script('user-search'); + require('../admin-header.php'); ?>