From 2a8c7bbc7ab5ae39bedc1380fe84fe928234a387 Mon Sep 17 00:00:00 2001 From: markjaquith Date: Sat, 24 Mar 2012 04:54:58 +0000 Subject: [PATCH] Autocomplete site names in Network Admin. More user completion areas. props Japh, DrewAPicture. see #19810. git-svn-id: http://svn.automattic.com/wordpress/trunk@20279 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/admin-ajax.php | 2 +- wp-admin/css/wp-admin.dev.css | 1 + wp-admin/includes/ajax-actions.php | 41 ++++++++++++++++++++++++++++-- wp-admin/includes/dashboard.php | 21 +++++++++++++-- wp-admin/index.php | 2 +- wp-admin/js/site-search.dev.js | 7 +++++ wp-admin/js/site-search.js | 1 + wp-admin/js/user-search.dev.js | 16 ++++++++++-- wp-admin/js/user-search.js | 2 +- wp-admin/network/site-users.php | 2 +- wp-admin/network/sites.php | 3 +++ wp-admin/network/users.php | 10 +++++++- wp-admin/users.php | 9 +++++++ wp-includes/script-loader.php | 2 ++ 14 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 wp-admin/js/site-search.dev.js create mode 100644 wp-admin/js/site-search.js diff --git a/wp-admin/admin-ajax.php b/wp-admin/admin-ajax.php index 19e89ff59..28ba8b900 100644 --- a/wp-admin/admin-ajax.php +++ b/wp-admin/admin-ajax.php @@ -36,7 +36,7 @@ do_action( 'admin_init' ); $core_actions_get = array( 'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache', - 'autocomplete-user', 'dashboard-widgets', + 'autocomplete-user', 'autocomplete-site', 'dashboard-widgets', ); $core_actions_post = array( diff --git a/wp-admin/css/wp-admin.dev.css b/wp-admin/css/wp-admin.dev.css index 5d4dcbe14..c33526d02 100644 --- a/wp-admin/css/wp-admin.dev.css +++ b/wp-admin/css/wp-admin.dev.css @@ -900,6 +900,7 @@ ul#add-to-blog-users { .ui-autocomplete li a.ui-state-hover { background-color: #f0f0b8; + cursor: pointer; } /*------------------------------------------------------------------------------ diff --git a/wp-admin/includes/ajax-actions.php b/wp-admin/includes/ajax-actions.php index 9651e85d2..9873ca0b8 100644 --- a/wp-admin/includes/ajax-actions.php +++ b/wp-admin/includes/ajax-actions.php @@ -160,18 +160,26 @@ function wp_ajax_autocomplete_user() { $return = array(); + // Check the type of request + if ( isset( $_REQUEST['autocomplete_type'] ) ) + $type = $_REQUEST['autocomplete_type']; + else + $type = 'add'; + // 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' ) ); + $include_blog_users = ( $type == 'search' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); + $exclude_blog_users = ( $type == 'add' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() ); $users = get_users( array( 'blog_id' => false, 'search' => '*' . $_REQUEST['term'] . '*', - 'exclude' => $this_blog_users, + 'include' => $include_blog_users, + 'exclude' => $exclude_blog_users, 'search_columns' => array( 'user_login', 'user_nicename', 'user_email' ), ) ); @@ -206,6 +214,35 @@ function wp_ajax_dashboard_widgets() { wp_die(); } +function wp_ajax_autocomplete_site() { + if ( ! is_multisite() + || ! current_user_can( 'manage_sites' ) + || wp_is_large_network( 'sites' ) + || ! is_super_admin() + ) { + wp_die( -1 ); + } + + $return = array(); + + global $wpdb; + $like_escaped_term = '%' . like_escape( stripslashes( $_REQUEST['term'] ) ) . '%'; + $sites = $wpdb->get_results( $wpdb->prepare( "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE ( domain LIKE %s OR path LIKE %s ) AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY registered DESC", $like_escaped_term, $like_escaped_term ), ARRAY_A ); + + if ( empty( $sites ) ) + wp_die( -1 ); + + foreach ( (array) $sites as $details ) { + $blogname = get_blog_option( $details['blog_id'], 'blogname' ); + $return[] = array( + 'label' => sprintf( '%1$s (%2$s)', $blogname, $details['domain'] . $details['path'] ), + 'value' => $details['domain'] + ); + } + + wp_die( json_encode( $return ) ); +} + /* * Ajax helper. */ diff --git a/wp-admin/includes/dashboard.php b/wp-admin/includes/dashboard.php index 71d6c96b3..ad04ba187 100644 --- a/wp-admin/includes/dashboard.php +++ b/wp-admin/includes/dashboard.php @@ -416,6 +416,23 @@ function wp_network_dashboard_right_now() { if ( current_user_can('create_users') ) $actions['create-user'] = '' . __( 'Create a New User' ) . ''; + if ( is_multisite() + && current_user_can( 'promote_users' ) + && ! wp_is_large_network( 'users' ) + && is_super_admin() + && is_network_admin() + ) { + wp_enqueue_script( 'user-search' ); + } + if ( is_multisite() + && current_user_can( 'manage_sites' ) + && ! wp_is_large_network( 'sites' ) + && is_super_admin() + && is_network_admin() + ) { + wp_enqueue_script( 'site-search' ); + } + $c_users = get_user_count(); $c_blogs = get_blog_count(); @@ -440,14 +457,14 @@ function wp_network_dashboard_right_now() {

- + 'submit_users' ) ); ?>

- + 'submit_sites' ) ); ?>

diff --git a/wp-admin/index.php b/wp-admin/index.php index 8761981b6..41b0e830e 100644 --- a/wp-admin/index.php +++ b/wp-admin/index.php @@ -88,7 +88,7 @@ get_current_screen()->set_help_sidebar( '

' . __( 'Documentation on Dashboard' ) . '

' . '

' . __( 'Support Forums' ) . '

' ); - + include (ABSPATH . 'wp-admin/admin-header.php'); $today = current_time('mysql', 1); diff --git a/wp-admin/js/site-search.dev.js b/wp-admin/js/site-search.dev.js new file mode 100644 index 000000000..c98929418 --- /dev/null +++ b/wp-admin/js/site-search.dev.js @@ -0,0 +1,7 @@ +jQuery( function($) { + $( '#site-search-input' ).autocomplete({ + source: ajaxurl + '?action=autocomplete-site', + delay: 500, + minLength: 2 + }); +}); diff --git a/wp-admin/js/site-search.js b/wp-admin/js/site-search.js new file mode 100644 index 000000000..5c34a36b7 --- /dev/null +++ b/wp-admin/js/site-search.js @@ -0,0 +1 @@ +jQuery(function($){$("#site-search-input").autocomplete({source:ajaxurl+"?action=autocomplete-site",delay:500,minLength:2})}); \ No newline at end of file diff --git a/wp-admin/js/user-search.dev.js b/wp-admin/js/user-search.dev.js index e5ac883b4..702dd6063 100644 --- a/wp-admin/js/user-search.dev.js +++ b/wp-admin/js/user-search.dev.js @@ -2,8 +2,20 @@ jQuery( function($) { var id = typeof( current_site_id ) != 'undefined' ? '&site_id=' + current_site_id : ''; $( '#adduser-email, #newuser' ).autocomplete({ - source: ajaxurl + '?action=autocomplete-user' + id, + source: ajaxurl + '?action=autocomplete-user&autocomplete_type=add' + id, delay: 500, minLength: 2 }); -}); \ No newline at end of file + + $( '#user-search-input' ).autocomplete({ + source: ajaxurl + '?action=autocomplete-user&autocomplete_type=search' + id, + delay: 500, + minLength: 2 + }); + + $( '#all-user-search-input' ).autocomplete({ + source: ajaxurl + '?action=autocomplete-user&autocomplete_type=search-all' + id, + delay: 500, + minLength: 2 + }); +}); diff --git a/wp-admin/js/user-search.js b/wp-admin/js/user-search.js index 6009b4f2e..9143d2641 100644 --- a/wp-admin/js/user-search.js +++ b/wp-admin/js/user-search.js @@ -1 +1 @@ -jQuery(function(a){var b=typeof(current_site_id)!="undefined"?"&site_id="+current_site_id:"";a("#adduser-email, #newuser").autocomplete({source:ajaxurl+"?action=autocomplete-user"+b,delay:500,minLength:2})}); \ No newline at end of file +jQuery(function($){var id=typeof(current_site_id)!="undefined"?"&site_id="+current_site_id:"";$("#adduser-email, #newuser").autocomplete({source:ajaxurl+"?action=autocomplete-user&autocomplete_type=add"+id,delay:500,minLength:2});$("#user-search-input").autocomplete({source:ajaxurl+"?action=autocomplete-user&autocomplete_type=search"+id,delay:500,minLength:2});$("#all-user-search-input").autocomplete({source:ajaxurl+"?action=autocomplete-user&autocomplete_type=search-all"+id,delay:500,minLength:2})}); \ No newline at end of file diff --git a/wp-admin/network/site-users.php b/wp-admin/network/site-users.php index 9be8ed597..ae1e07cfa 100644 --- a/wp-admin/network/site-users.php +++ b/wp-admin/network/site-users.php @@ -171,7 +171,7 @@ $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' ) ) +if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) wp_enqueue_script( 'user-search' ); require('../admin-header.php'); ?> diff --git a/wp-admin/network/sites.php b/wp-admin/network/sites.php index d13a1a0af..b414c2dce 100644 --- a/wp-admin/network/sites.php +++ b/wp-admin/network/sites.php @@ -282,6 +282,9 @@ if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( $wp_list_table->prepare_items(); +if ( ! wp_is_large_network( 'sites' ) ) + wp_enqueue_script( 'site-search' ); + require_once( '../admin-header.php' ); ?> diff --git a/wp-admin/network/users.php b/wp-admin/network/users.php index a7b3492f9..d454362f5 100644 --- a/wp-admin/network/users.php +++ b/wp-admin/network/users.php @@ -245,6 +245,14 @@ get_current_screen()->set_help_sidebar( '

' . __('Support Forums') . '

' ); +if ( is_multisite() + && current_user_can( 'promote_users' ) + && ! wp_is_large_network( 'users' ) + && is_super_admin() +) { + wp_enqueue_script( 'user-search' ); +} + require_once( '../admin-header.php' ); if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( $_REQUEST['action'] ) ) { @@ -288,7 +296,7 @@ if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( views(); ?>
- search_box( __( 'Search Users' ), 'user' ); ?> + search_box( __( 'Search Users' ), 'all-user' ); ?>
diff --git a/wp-admin/users.php b/wp-admin/users.php index a7ce5edaa..a736b5613 100644 --- a/wp-admin/users.php +++ b/wp-admin/users.php @@ -338,6 +338,15 @@ default: wp_redirect( add_query_arg( 'paged', $total_pages ) ); exit; } + + 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_enqueue_script( 'user-search' ); + } + include('./admin-header.php'); $messages = array(); diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php index f1b907334..991756d45 100644 --- a/wp-includes/script-loader.php +++ b/wp-includes/script-loader.php @@ -268,6 +268,8 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'user-search', "/wp-admin/js/user-search$suffix.js", array( 'jquery-ui-autocomplete' ), false, 1 ); + $scripts->add( 'site-search', "/wp-admin/js/site-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 );