Ticket #27927: 27927.4.diff
| File 27927.4.diff, 5.6 KB (added by , 12 years ago) |
|---|
-
src/wp-includes/ms-load.php
348 348 * then cache whether we can just always ignore paths. 349 349 */ 350 350 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 351 359 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"; 355 368 $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 ); 356 373 } 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] ) ); 358 375 } 359 376 360 377 if ( $site ) { -
tests/phpunit/tests/ms.php
1233 1233 'wordpress.org/foo/bar/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/bar/' ), 1234 1234 'make.wordpress.org/' => array( 'domain' => 'make.wordpress.org', 'path' => '/' ), 1235 1235 '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/' ), 1236 1239 ); 1237 1240 1238 1241 foreach ( $ids as &$id ) { … … 1243 1246 $this->assertEquals( $ids['wordpress.org/'], 1244 1247 get_site_by_path( 'wordpress.org', '/notapath/' )->blog_id ); 1245 1248 1249 $this->assertEquals( $ids['wordpress.org/'], 1250 get_site_by_path( 'www.wordpress.org', '/notapath/' )->blog_id ); 1251 1246 1252 $this->assertEquals( $ids['wordpress.org/foo/bar/'], 1247 1253 get_site_by_path( 'wordpress.org', '/foo/bar/baz/' )->blog_id ); 1248 1254 1249 1255 $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/'], 1250 1259 get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 3 )->blog_id ); 1251 1260 1252 1261 $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/'], 1253 1265 get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 2 )->blog_id ); 1254 1266 1267 $this->assertEquals( $ids['wordpress.org/foo/bar/'], 1268 get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 2 )->blog_id ); 1269 1255 1270 $this->assertEquals( $ids['wordpress.org/foo/'], 1256 1271 get_site_by_path( 'wordpress.org', '/foo/bar/baz/', 1 )->blog_id ); 1257 1272 1273 $this->assertEquals( $ids['wordpress.org/foo/'], 1274 get_site_by_path( 'www.wordpress.org', '/foo/bar/baz/', 1 )->blog_id ); 1275 1258 1276 $this->assertEquals( $ids['wordpress.org/'], 1259 1277 get_site_by_path( 'wordpress.org', '/', 0 )->blog_id ); 1260 1278 1279 $this->assertEquals( $ids['wordpress.org/'], 1280 get_site_by_path( 'www.wordpress.org', '/', 0 )->blog_id ); 1281 1261 1282 $this->assertEquals( $ids['make.wordpress.org/foo/'], 1262 1283 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 1300 // A site installed with www will not be found by the root domain. 1301 $this->assertFalse( get_site_by_path( 'wp.org', '/' ) ); 1302 $this->assertFalse( get_site_by_path( 'wp.org', '/notapath/' ) ); 1303 $this->assertFalse( get_site_by_path( 'wp.org', '/foo/bar/baz/' ) ); 1304 $this->assertFalse( get_site_by_path( 'wp.org', '/foo/bar/baz/', 1 ) ); 1305 1306 // A site will not be found by its root domain when an invalid subdomain is requested. 1307 $this->assertFalse( get_site_by_path( 'invalid.wordpress.org', '/' ) ); 1308 $this->assertFalse( get_site_by_path( 'invalid.wordpress.org', '/foo/bar/' ) ); 1263 1309 } 1264 1310 1265 1311 /**