From b6346ae5cda6353e64b1fbc5a5e61babb3d08f47 Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 30 Dec 2010 23:38:21 +0000 Subject: [PATCH] Default to leading and trailing wildcards for site user searches. Require explicit trailing wildcard asterisk request for network user searches. Disallow leading wildcards for network user searches. Move wildcard policy up the stake, allowing more flexibility in WP_User_Query. Props SergeyBiryukov. fixes #16014 git-svn-id: http://svn.automattic.com/wordpress/trunk@17189 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- .../includes/class-wp-ms-users-list-table.php | 2 ++ .../includes/class-wp-users-list-table.php | 2 ++ wp-includes/user.php | 24 +++++++++++++------ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/wp-admin/includes/class-wp-ms-users-list-table.php b/wp-admin/includes/class-wp-ms-users-list-table.php index 7efa6366a..da07f3505 100644 --- a/wp-admin/includes/class-wp-ms-users-list-table.php +++ b/wp-admin/includes/class-wp-ms-users-list-table.php @@ -31,6 +31,8 @@ class WP_MS_Users_List_Table extends WP_List_Table { 'fields' => 'all_with_meta' ); + $args['search'] = ltrim($args['search'], '*'); + if ( $role == 'super' ) { $logins = implode( "', '", get_super_admins() ); $args['include'] = $wpdb->get_col( "SELECT ID FROM $wpdb->users WHERE user_login IN ('$logins')" ); diff --git a/wp-admin/includes/class-wp-users-list-table.php b/wp-admin/includes/class-wp-users-list-table.php index 2312f9b2b..c7ba30943 100644 --- a/wp-admin/includes/class-wp-users-list-table.php +++ b/wp-admin/includes/class-wp-users-list-table.php @@ -51,6 +51,8 @@ class WP_Users_List_Table extends WP_List_Table { 'fields' => 'all_with_meta' ); + $args['search'] = '*' . $args['search'] . '*'; + if ( $this->is_site_users ) $args['blog_id'] = $this->site_id; diff --git a/wp-includes/user.php b/wp-includes/user.php index cd31edb0d..b5677d0eb 100644 --- a/wp-includes/user.php +++ b/wp-includes/user.php @@ -465,11 +465,19 @@ class WP_User_Query { $search = trim( $qv['search'] ); if ( $search ) { - $wild = false; - if ( false !== strpos($search, '*') ) { - $wild = true; + $leading_wild = ( ltrim($search, '*') != $search ); + $trailing_wild = ( rtrim($search, '*') != $search ); + if ( $leading_wild && $trailing_wild ) + $wild = 'both'; + elseif ( $leading_wild ) + $wild = 'leading'; + elseif ( $trailing_wild ) + $wild = 'trailing'; + else + $wild = false; + if ( $wild ) $search = trim($search, '*'); - } + if ( false !== strpos( $search, '@') ) $search_columns = array('user_email'); elseif ( is_numeric($search) ) @@ -564,19 +572,21 @@ class WP_User_Query { * * @param string $string * @param array $cols - * @param bool $wild Whether to allow trailing wildcard searches. Default is false. + * @param bool $wild Whether to allow wildcard searches. Default is false for Network Admin, true for + * single site. Single site allows leading and trailing wildcards, Network Admin only trailing. * @return string */ function get_search_sql( $string, $cols, $wild = false ) { $string = esc_sql( $string ); $searches = array(); - $wild_char = ( $wild ) ? '%' : ''; + $leading_wild = ( 'leading' == $wild || 'both' == $wild ) ? '%' : ''; + $trailing_wild = ( 'trailing' == $wild || 'both' == $wild ) ? '%' : ''; foreach ( $cols as $col ) { if ( 'ID' == $col ) $searches[] = "$col = '$string'"; else - $searches[] = "$col LIKE '" . like_escape($string) . "$wild_char'"; + $searches[] = "$col LIKE '$leading_wild" . like_escape($string) . "$trailing_wild'"; } return ' AND (' . implode(' OR ', $searches) . ')';