From a0a77f0380755b9d712e9fd28fd8a1523ed14363 Mon Sep 17 00:00:00 2001 From: Ryan Boren 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: https://develop.svn.wordpress.org/trunk@17189 602fd350-edb4-49c9-b593-d223f7449a82 --- .../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 7efa6366ae..da07f35056 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 2312f9b2b5..c7ba309438 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 cd31edb0d4..b5677d0eb5 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) . ')';