Make WordPress Core

Ticket #27927: 27927.3.diff

File 27927.3.diff, 5.0 KB (added by jeremyfelt, 12 years ago)
  • src/wp-includes/ms-load.php

     
    348348         * then cache whether we can just always ignore paths.
    349349         */
    350350
     351        // Either www or non-www is supported, not both. If a www domain is requested,
     352        // query for both to provide the proper redirect.
     353        $domains = array( $domain );
     354        if ( substr( $domain, 0, 4 ) == 'www.' ) {
     355                $domains[] = substr( $domain, 4 );
     356                $search_domains = "'" . implode( "', '", $wpdb->_escape( $domains ) ) . "'";
     357        }
     358
    351359        if ( count( $paths ) > 1 ) {
    352                 $paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'";
    353                 $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $domain );
    354                 $sql .= " AND path IN ($paths) ORDER BY CHAR_LENGTH(path) DESC LIMIT 1";
     360                $search_paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'";
     361        }
     362
     363        if ( count( $domains ) > 1 && count( $paths ) > 1 ) {
     364                $site = $wpdb->get_row( "SELECT * FROM $wpdb->blogs WHERE domain IN ($search_domains) AND path IN ($search_paths) ORDER BY CHAR_LENGTH(domain) DESC, CHAR_LENGTH(path) DESC LIMIT 1" );
     365        } elseif ( count( $domains ) > 1 ) {
     366                $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE path = %s", $paths[0] );
     367                $sql .= " AND domain IN ($search_domains) ORDER BY CHAR_LENGTH(domain) DESC LIMIT 1";
    355368                $site = $wpdb->get_row( $sql );
     369        } elseif ( count( $paths ) > 1 ) {
     370                $sql = $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $domains[0] );
     371                $sql .= " AND path IN ($search_paths) ORDER BY CHAR_LENGTH(path) DESC LIMIT 1";
     372                $site = $wpdb->get_row( $sql );
    356373        } else {
    357                 $site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s and path = %s", $domain, $paths[0] ) );
     374                $site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $domains[0], $paths[0] ) );
    358375        }
    359376
    360377        if ( $site ) {
  • tests/phpunit/tests/ms.php

     
    12331233                        'wordpress.org/foo/bar/'      => array( 'domain' => 'wordpress.org',      'path' => '/foo/bar/' ),
    12341234                        'make.wordpress.org/'         => array( 'domain' => 'make.wordpress.org', 'path' => '/' ),
    12351235                        'make.wordpress.org/foo/'     => array( 'domain' => 'make.wordpress.org', 'path' => '/foo/' ),
     1236                        'www.wp.org/'                 => array( 'domain' => 'www.wp.org',         'path' => '/' ),
     1237                        'www.wp.org/foo/'             => array( 'domain' => 'www.wp.org',         'path' => '/foo/' ),
     1238                        'www.wp.org/foo/bar/'         => array( 'domain' => 'www.wp.org',         'path' => '/foo/bar/' ),
    12361239                );
    12371240
    12381241                foreach ( $ids as &$id ) {
     
    12431246                $this->assertEquals( $ids['wordpress.org/'],
    12441247                        get_site_by_path( 'wordpress.org', '/notapath/' )->blog_id );
    12451248
     1249                $this->assertEquals( $ids['wordpress.org/'],
     1250                        get_site_by_path( 'www.wordpress.org', '/notapath/' )->blog_id );
     1251
    12461252                $this->assertEquals( $ids['wordpress.org/foo/bar/'],
    12471253                        get_site_by_path( 'wordpress.org', '/foo/bar/baz/' )->blog_id );
    12481254
    12491255                $this->assertEquals( $ids['wordpress.org/foo/bar/'],
     1256                        get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/' )->blog_id );
     1257
     1258                $this->assertEquals( $ids['wordpress.org/foo/bar/'],
    12501259                        get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 3 )->blog_id );
    12511260
    12521261                $this->assertEquals( $ids['wordpress.org/foo/bar/'],
     1262                        get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 3 )->blog_id );
     1263
     1264                $this->assertEquals( $ids['wordpress.org/foo/bar/'],
    12531265                        get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 2 )->blog_id );
    12541266
     1267                $this->assertEquals( $ids['wordpress.org/foo/bar/'],
     1268                        get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 2 )->blog_id );
     1269
    12551270                $this->assertEquals( $ids['wordpress.org/foo/'],
    12561271                        get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 1 )->blog_id );
    12571272
     1273                $this->assertEquals( $ids['wordpress.org/foo/'],
     1274                        get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 1 )->blog_id );
     1275
    12581276                $this->assertEquals( $ids['wordpress.org/'],
    12591277                        get_site_by_path( 'wordpress.org', '/', 0 )->blog_id );
    12601278
     1279                $this->assertEquals( $ids['wordpress.org/'],
     1280                        get_site_by_path( 'www.wordpress.org', '/', 0 )->blog_id );
     1281
    12611282                $this->assertEquals( $ids['make.wordpress.org/foo/'],
    12621283                        get_site_by_path( 'make.wordpress.org', '/foo/bar/baz/qux/', 4 )->blog_id );
     1284
     1285                $this->assertEquals( $ids['make.wordpress.org/foo/'],
     1286                        get_site_by_path( 'www.make.wordpress.org', '/foo/bar/baz/qux/', 4 )->blog_id );
     1287
     1288                $this->assertEquals( $ids['www.wp.org/'],
     1289                        get_site_by_path( 'www.wp.org', '/', 0 )->blog_id );
     1290
     1291                $this->assertEquals( $ids['www.wp.org/'],
     1292                        get_site_by_path( 'www.wp.org', '/notapath/' )->blog_id );
     1293
     1294                $this->assertEquals( $ids['www.wp.org/foo/bar/'],
     1295                        get_site_by_path( 'www.wp.org', '/foo/bar/baz/' )->blog_id );
     1296
     1297                $this->assertEquals( $ids['www.wp.org/foo/'],
     1298                        get_site_by_path( 'www.wp.org', '/foo/bar/baz/', 1 )->blog_id );
     1299
    12631300        }
    12641301
    12651302        /**