diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php index 0627e3148a..a896b738aa 100644 --- a/wp-admin/admin-ajax.php +++ b/wp-admin/admin-ajax.php @@ -34,7 +34,7 @@ send_nosniff_header(); do_action( 'admin_init' ); -$core_actions_get = array( 'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed_cache' ); +$core_actions_get = array( 'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed_cache', 'autocomplete-user' ); $core_actions_post = array( 'oembed_cache', 'image-editor', 'delete-comment', 'delete-tag', 'delete-link', diff --git a/wp-admin/css/wp-admin.dev.css b/wp-admin/css/wp-admin.dev.css index 93f024befe..8512c426ce 100644 --- a/wp-admin/css/wp-admin.dev.css +++ b/wp-admin/css/wp-admin.dev.css @@ -892,6 +892,45 @@ p.search-box { margin: 0; } +input[type="text"].ui-autocomplete-loading { + background: transparent url('../images/loading.gif') no-repeat right center; + visibility: visible; +} + +ul#add-to-blog-users { + margin: 0 0 0 14px; +} + +.ui-autocomplete { + padding: 0; + margin: 0; + list-style: none; + position: absolute; + z-index: 10000; + border-width: 1px; + border-style: solid; + + background-color: #ececec; + border-color: gray; +} + +.ui-autocomplete li { + padding: 2px 5px; + white-space: nowrap; + text-align: left; + color: #101010; +} + +.ui-autocomplete li a { + display: block; + height: 100%; + padding: 2px 5px; + color: #333; +} + +.ui-autocomplete li a.ui-state-hover { + background-color: #f0f0b8; +} /*------------------------------------------------------------------------------ 3.0 - Actions diff --git a/wp-admin/includes/ajax-actions.php b/wp-admin/includes/ajax-actions.php index f601ecfbf0..0a5f9c4e29 100644 --- a/wp-admin/includes/ajax-actions.php +++ b/wp-admin/includes/ajax-actions.php @@ -149,6 +149,38 @@ function wp_ajax_oembed_cache() { wp_die( $return ); } +function wp_ajax_autocomplete_user() { + if ( !is_multisite() || !current_user_can( 'promote_users' ) || wp_is_large_network( 'users' ) || !is_super_admin() && apply_filters( 'autocomplete_users_for_site_admins', false ) ) + wp_die( -1 ); + + $return = array(); + + // Exclude current users of this blog + if ( isset( $_REQUEST['site_id'] ) ) + $id = absint( $_REQUEST['site_id'] ); + else + $id = get_current_blog_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. */ diff --git a/wp-admin/js/user-search.dev.js b/wp-admin/js/user-search.dev.js new file mode 100644 index 0000000000..f42cc51824 --- /dev/null +++ b/wp-admin/js/user-search.dev.js @@ -0,0 +1,9 @@ +jQuery( function($) { + var id = typeof( current_site_id ) != 'undefined' ? '&site_id=' + current_site_id : ''; + + $( '#adduser-email, #newuser' ).autocomplete({ + source: ajaxurl + '?action=autocomplete-user' + id, + delay: 500, + minLength: 2, + }); +}); \ No newline at end of file diff --git a/wp-admin/js/user-search.js b/wp-admin/js/user-search.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/wp-admin/network/site-users.php b/wp-admin/network/site-users.php index b9835fd0c2..9be8ed597d 100644 --- a/wp-admin/network/site-users.php +++ b/wp-admin/network/site-users.php @@ -171,8 +171,18 @@ $title = sprintf( __('Edit Site: %s'), $site_url_no_http ); $parent_file = 'sites.php'; $submenu_file = 'sites.php'; +if ( current_user_can( 'promote_users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) && !wp_is_large_network( 'users' ) ) + wp_enqueue_script( 'user-search' ); + require('../admin-header.php'); ?> + + +