Ticket #5769: 5769.01.patch
File 5769.01.patch, 4.6 KB (added by , 11 years ago) |
---|
-
src/bp-core/bp-core-classes.php
diff --git a/src/bp-core/bp-core-classes.php b/src/bp-core/bp-core-classes.php index e0d2c17..6332570 100644
a b if ( !defined( 'ABSPATH' ) ) exit; 30 30 * @type string|bool $search_terms Terms to search by. Search happens 31 31 * across xprofile fields. Requires XProfile component. 32 32 * Default: false. 33 * @type string $search_wildcard When searching with $search_terms, 34 * set where wildcards around the term should be positioned. 35 * Default: 'both'. Other values: 'left', 'right'. 33 36 * @type array|string|bool $include An array or comma-separated list of 34 37 * user IDs to which query should be limited. 35 38 * Default: false. … … class BP_User_Query { 153 156 'page' => 1, 154 157 'user_id' => 0, 155 158 'search_terms' => false, 159 'search_wildcard' => 'both', 156 160 'include' => false, 157 161 'exclude' => false, 158 162 'user_ids' => false, … … class BP_User_Query { 364 368 // 'search_terms' searches user_login and user_nicename 365 369 // xprofile field matches happen in bp_xprofile_bp_user_query_search() 366 370 if ( false !== $search_terms ) { 367 $search_terms_like = '%' . bp_esc_like( $search_terms ) . '%'; 371 $search_terms_like = bp_esc_like( $search_terms ); 372 373 if ( $search_wildcard === 'left' ) { 374 $search_terms_like = '%' . $search_terms_like; 375 } elseif ( $search_wildcard === 'right' ) { 376 $search_terms_like = $search_terms_like . '%'; 377 } else { 378 $search_terms_like = '%' . $search_terms_like . '%'; 379 } 380 368 381 $sql['where']['search'] = $wpdb->prepare( "u.{$this->uid_name} IN ( SELECT ID FROM {$wpdb->users} WHERE ( user_login LIKE %s OR user_nicename LIKE %s ) )", $search_terms_like, $search_terms_like ); 369 382 } 370 383 -
src/bp-xprofile/bp-xprofile-functions.php
diff --git a/src/bp-xprofile/bp-xprofile-functions.php b/src/bp-xprofile/bp-xprofile-functions.php index a437392..2f2c1ce 100644
a b function bp_xprofile_bp_user_query_search( $sql, BP_User_Query $query ) { 596 596 597 597 $search_terms_clean = esc_sql( esc_sql( $query->query_vars['search_terms'] ) ); 598 598 599 if ( $query->query_vars['search_wildcard'] === 'left' ) { 600 $search_terms_clean = '%' . $search_terms_clean; 601 } elseif ( $query->query_vars['search_wildcard'] === 'right' ) { 602 $search_terms_clean = $search_terms_clean . '%'; 603 } else { 604 $search_terms_clean = '%' . $search_terms_clean . '%'; 605 } 606 599 607 // Combine the core search (against wp_users) into a single OR clause 600 608 // with the xprofile_data search 601 609 $search_core = $sql['where']['search']; 602 $search_xprofile = "u.{$query->uid_name} IN ( SELECT user_id FROM {$bp->profile->table_name_data} WHERE value LIKE ' %{$search_terms_clean}%' )";610 $search_xprofile = "u.{$query->uid_name} IN ( SELECT user_id FROM {$bp->profile->table_name_data} WHERE value LIKE '{$search_terms_clean}' )"; 603 611 $search_combined = "( {$search_xprofile} OR {$search_core} )"; 604 612 605 613 $sql['where']['search'] = $search_combined; -
tests/phpunit/testcases/core/class-bp-user-query.php
diff --git a/tests/phpunit/testcases/core/class-bp-user-query.php b/tests/phpunit/testcases/core/class-bp-user-query.php index 088aded..0c2eb97 100644
a b class BP_Tests_BP_User_Query_TestCases extends BP_UnitTestCase { 219 219 220 220 $this->assertEquals( $user_id, $found_user_id ); 221 221 } 222 223 public function test_bp_user_query_search_wildcards() { 224 $u1 = $this->create_user( array( 225 'user_login' => 'xfoo', 226 ) ); 227 xprofile_set_field_data( 1, $u1, "Bar" ); 228 $q1 = new BP_User_Query( array( 'search_terms' => 'foo', 'search_wildcard' => 'left' ) ); 229 230 $u2 = $this->create_user( array( 231 'user_login' => 'foox', 232 ) ); 233 xprofile_set_field_data( 1, $u2, "Bar" ); 234 $q2 = new BP_User_Query( array( 'search_terms' => 'foo', 'search_wildcard' => 'right' ) ); 235 236 $u3 = $this->create_user( array( 237 'user_login' => 'xfoox', 238 ) ); 239 xprofile_set_field_data( 1, $u3, "Bar" ); 240 $q3 = new BP_User_Query( array( 'search_terms' => 'foo', 'search_wildcard' => 'both' ) ); 241 242 $this->assertNotEmpty( $q1->results ); 243 $q1 = array_pop( $q1->results ); 244 $this->assertEquals( $u1, $q1->ID ); 245 246 $this->assertNotEmpty( $q2->results ); 247 $q2 = array_pop( $q2->results ); 248 $this->assertEquals( $u2, $q2->ID ); 249 250 $this->assertNotEmpty( $q3->results ); 251 foreach ( $q3->results as $user ) { 252 $this->assertTrue( in_array( $user->ID, array( $u1, $u2, $u3 ) ) ); 253 } 254 } 255 222 256 /** 223 257 * @group exclude 224 258 */