Make WordPress Core

Ticket #20835: autocomplete-site-patch.diff

File autocomplete-site-patch.diff, 2.0 KB (added by wonderboymusic, 14 years ago)
  • wp-admin/includes/ajax-actions.php

     
    219219        $return = array();
    220220
    221221        global $wpdb;
    222         $like_escaped_term = '%' . like_escape( stripslashes( $_REQUEST['term'] ) ) . '%';
    223         $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 );
     222    $value = stripslashes( $_REQUEST['term'] );
     223    $terms = explode( '/', $value );   
     224   
     225    $like_sql = "( domain LIKE %s OR path LIKE %s )";
     226    $likes = array();
     227    $like_escaped_terms = array();
     228   
     229    $join = ' OR ';
     230    foreach ( $terms as $term ) {
     231        if ( !empty( $likes ) )
     232            $join = ' AND ';
     233       
     234        $escaped = '%' . like_escape( $term ) . '%';
     235        $like_escaped_terms[] = $escaped;
     236        $like_escaped_terms[] = $escaped;
     237        array_push( $likes, $like_sql );
     238    } 
    224239
     240    $select = "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE ( " . join( $join, $likes ) . " ) AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' ORDER BY registered DESC";
     241    array_unshift( $like_escaped_terms, $select );
     242    $sql = call_user_func_array( array( $wpdb, 'prepare' ), $like_escaped_terms );
     243
     244        $sites = $wpdb->get_results( $sql, ARRAY_A );
     245
    225246        if ( empty( $sites ) )
    226247                wp_die( -1 );
    227248
    228249        foreach ( (array) $sites as $details ) {
    229                 $blogname = get_blog_option( $details['blog_id'], 'blogname' );
     250        $domain = is_subdomain_install() ? $details['domain'] : $details['path'];
    230251                $return[] = array(
    231                         'label' => sprintf( '%1$s (%2$s)', $blogname, $details['domain'] . $details['path'] ),
    232                         'value' => $details['domain']
     252                        'label' => $domain,
     253                        'value' => str_replace( '/', '', $domain )
    233254                );
    234255        }
    235256