Skip to:
Content

BuddyPress.org

Changeset 8928


Ignore:
Timestamp:
08/16/2014 12:03:53 PM (10 years ago)
Author:
imath
Message:

Make sure BP_User_Query returns correct results when search term contains the Ampersand character

  1. Search terms containing this character was problematic as the "&" is a query var delimiter used in bp_legacy_theme_ajax_querystring() to build the ajax querystring
  1. When a xProfile field is saved, the value is sanitized using the xprofile_filter_kses() filter which is converting "&" to "&" before inserting the value in database.

Urlencoding the search terms in bp_legacy_theme_ajax_querystring() and applying wp_kses_normalize_entities() to search terms in BP_User_Query & in bp_xprofile_bp_user_query_search() make sure the correct results are returned to the user.

Fixes #5694

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bp-core/bp-core-classes.php

    r8796 r8928  
    369369        // xprofile field matches happen in bp_xprofile_bp_user_query_search()
    370370        if ( false !== $search_terms ) {
    371             $search_terms = bp_esc_like( $search_terms );
     371            $search_terms = bp_esc_like( wp_kses_normalize_entities( $search_terms ) );
    372372
    373373            if ( $search_wildcard === 'left' ) {
  • trunk/src/bp-templates/bp-legacy/buddypress-functions.php

    r8828 r8928  
    537537    $object_search_text = bp_get_search_default_text( $object );
    538538    if ( ! empty( $_POST['search_terms'] ) && $object_search_text != $_POST['search_terms'] && 'false' != $_POST['search_terms'] && 'undefined' != $_POST['search_terms'] )
    539         $qs[] = 'search_terms=' . $_POST['search_terms'];
     539        $qs[] = 'search_terms=' . urlencode( $_POST['search_terms'] );
    540540
    541541    // Now pass the querystring to override default values.
  • trunk/src/bp-xprofile/bp-xprofile-functions.php

    r8811 r8928  
    686686    $bp = buddypress();
    687687
    688     $search_terms_clean = bp_esc_like( $query->query_vars['search_terms'] );
     688    $search_terms_clean = bp_esc_like( wp_kses_normalize_entities( $query->query_vars['search_terms'] ) );
    689689
    690690    if ( $query->query_vars['search_wildcard'] === 'left' ) {
  • trunk/tests/phpunit/testcases/core/class-bp-user-query.php

    r8675 r8928  
    202202    }
    203203
     204    public function test_bp_user_query_search_with_ampersand_sign() {
     205
     206        // LIKE special character: &
     207        $user_id = $this->create_user();
     208        xprofile_set_field_data( 1, $user_id, "a&mpersand" );
     209        $q = new BP_User_Query( array( 'search_terms' => "a&m", ) );
     210
     211        $found_user_id = null;
     212        if ( ! empty( $q->results ) ) {
     213            $found_user = array_pop( $q->results );
     214            $found_user_id = $found_user->ID;
     215        }
     216
     217        $this->assertEquals( $user_id, $found_user_id );
     218
     219    }
     220
    204221    /**
    205222     * @group search_terms
Note: See TracChangeset for help on using the changeset viewer.