Changeset 6231
- Timestamp:
- 01/12/2017 11:24:12 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/phpunit/includes/testcase.php
r6076 r6231 62 62 63 63 function go_to( $url ) { 64 global $wpdb;65 global $current_site, $current_blog, $blog_id, $switched, $_wp_switched_stack, $public, $table_prefix, $current_user, $wp_roles;66 64 67 // note: the WP and WP_Query classes like to silently fetch parameters 68 // from all over the place (globals, GET, etc), which makes it tricky 69 // to run them more than once without very carefully clearing everything 70 $_GET = $_POST = array(); 71 foreach ( array( 'query_string', 'id', 'postdata', 'authordata', 'day', 'currentmonth', 'page', 'pages', 'multipage', 'more', 'numpages', 'pagenow' ) as $v ) { 72 if ( isset( $GLOBALS[ $v ] ) ) { 73 unset( $GLOBALS[ $v ] ); 74 } 75 } 65 parent::go_to( $url ); 76 66 77 $parts = parse_url( $url );78 if ( isset( $parts['scheme'] ) ) {79 // set the HTTP_HOST80 $GLOBALS['_SERVER']['HTTP_HOST'] = $parts['host'];81 82 $req = $parts['path'];83 if ( isset( $parts['query'] ) ) {84 $req .= '?' . $parts['query'];85 // parse the url query vars into $_GET86 parse_str( $parts['query'], $_GET );87 }88 } else {89 $req = $url;90 }91 92 if ( ! isset( $parts['query'] ) ) {93 $parts['query'] = '';94 }95 96 // Scheme97 if ( 0 === strpos( $req, '/wp-admin' ) && force_ssl_admin() ) {98 $_SERVER['HTTPS'] = 'on';99 } else {100 unset( $_SERVER['HTTPS'] );101 }102 103 // Set this for bp_core_set_uri_globals()104 $GLOBALS['_SERVER']['REQUEST_URI'] = $req;105 unset( $_SERVER['PATH_INFO'] );106 107 // setup $current_site and $current_blog globals for multisite based on108 // REQUEST_URI; mostly copied from /wp-includes/ms-settings.php109 if ( is_multisite() ) {110 $current_blog = $current_site = $blog_id = null;111 112 $domain = addslashes( $_SERVER['HTTP_HOST'] );113 if ( false !== strpos( $domain, ':' ) ) {114 if ( substr( $domain, -3 ) == ':80' ) {115 $domain = substr( $domain, 0, -3 );116 $_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -3 );117 } elseif ( substr( $domain, -4 ) == ':443' ) {118 $domain = substr( $domain, 0, -4 );119 $_SERVER['HTTP_HOST'] = substr( $_SERVER['HTTP_HOST'], 0, -4 );120 }121 }122 $path = stripslashes( $_SERVER['REQUEST_URI'] );123 124 // Get a cleaned-up version of the wp_version string125 // (strip -src, -alpha, etc which may trip up version_compare())126 $wp_version = (float) $GLOBALS['wp_version'];127 if ( version_compare( $wp_version, '4.4', '>=' ) ) {128 if ( ! $current_site = wp_cache_get( 'current_network', 'site-options' ) ) {129 // Are there even two networks installed?130 $one_network = $wpdb->get_row( "SELECT * FROM $wpdb->site LIMIT 2" ); // [sic]131 if ( 1 === $wpdb->num_rows ) {132 $current_site = new WP_Network( $one_network );133 wp_cache_add( 'current_network', $current_site, 'site-options' );134 } elseif ( 0 === $wpdb->num_rows ) {135 ms_not_installed( $domain, $path );136 }137 }138 if ( empty( $current_site ) ) {139 $current_site = WP_Network::get_by_path( $domain, $path, 1 );140 }141 142 // The network declared by the site trumps any constants.143 if ( $current_blog && $current_blog->site_id != $current_site->id ) {144 $current_site = WP_Network::get_instance( $current_blog->site_id );145 }146 147 if ( empty( $current_site ) ) {148 do_action( 'ms_network_not_found', $domain, $path );149 150 ms_not_installed( $domain, $path );151 } elseif ( $path === $current_site->path ) {152 $current_blog = get_site_by_path( $domain, $path );153 } else {154 // Search the network path + one more path segment (on top of the network path).155 $current_blog = get_site_by_path( $domain, $path, substr_count( $current_site->path, '/' ) );156 }157 158 // Figure out the current network's main site.159 if ( empty( $current_site->blog_id ) ) {160 if ( $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) {161 $current_site->blog_id = $current_blog->blog_id;162 } elseif ( ! $current_site->blog_id = wp_cache_get( 'network:' . $current_site->id . ':main_site', 'site-options' ) ) {163 $current_site->blog_id = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s",164 $current_site->domain, $current_site->path ) );165 wp_cache_add( 'network:' . $current_site->id . ':main_site', $current_site->blog_id, 'site-options' );166 }167 }168 169 $blog_id = $current_blog->blog_id;170 $public = $current_blog->public;171 172 if ( empty( $current_blog->site_id ) ) {173 // This dates to [MU134] and shouldn't be relevant anymore,174 // but it could be possible for arguments passed to insert_blog() etc.175 $current_blog->site_id = 1;176 }177 178 $site_id = $current_blog->site_id;179 wp_load_core_site_options( $site_id );180 181 } elseif ( version_compare( $wp_version, '3.9', '>=' ) ) {182 183 if ( is_admin() ) {184 $path = preg_replace( '#(.*)/wp-admin/.*#', '$1/', $path );185 }186 187 list( $path ) = explode( '?', $path );188 189 // Are there even two networks installed?190 $one_network = $wpdb->get_row( "SELECT * FROM $wpdb->site LIMIT 2" ); // [sic]191 if ( 1 === $wpdb->num_rows ) {192 $current_site = wp_get_network( $one_network );193 } elseif ( 0 === $wpdb->num_rows ) {194 ms_not_installed();195 }196 197 if ( empty( $current_site ) ) {198 $current_site = get_network_by_path( $domain, $path, 1 );199 }200 201 if ( empty( $current_site ) ) {202 ms_not_installed();203 } elseif ( $path === $current_site->path ) {204 $current_blog = get_site_by_path( $domain, $path );205 206 // Search the network path + one more path segment (on top of the network path).207 } else {208 $current_blog = get_site_by_path( $domain, $path, substr_count( $current_site->path, '/' ) );209 }210 211 // The network declared by the site trumps any constants.212 if ( $current_blog && $current_blog->site_id != $current_site->id ) {213 $current_site = wp_get_network( $current_blog->site_id );214 }215 216 // If we don't have a network by now, we have a problem.217 if ( empty( $current_site ) ) {218 ms_not_installed();219 }220 221 // @todo What if the domain of the network doesn't match the current site?222 $current_site->cookie_domain = $current_site->domain;223 if ( 'www.' === substr( $current_site->cookie_domain, 0, 4 ) ) {224 $current_site->cookie_domain = substr( $current_site->cookie_domain, 4 );225 }226 227 // Figure out the current network's main site.228 if ( ! isset( $current_site->blog_id ) ) {229 if ( $current_blog && $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) {230 $current_site->blog_id = $current_blog->blog_id;231 232 // @todo we should be able to cache the blog ID of a network's main site easily.233 } else {234 $current_site->blog_id = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s", $current_site->domain, $current_site->path ) );235 }236 }237 238 $blog_id = $current_blog->blog_id;239 $public = $current_blog->public;240 241 // This dates to [MU134] and shouldn't be relevant anymore,242 // but it could be possible for arguments passed to insert_blog() etc.243 if ( empty( $current_blog->site_id ) ) {244 $current_blog->site_id = 1;245 }246 247 $site_id = $current_blog->site_id;248 wp_load_core_site_options( $site_id );249 250 // Pre WP 3.9251 } else {252 253 $domain = rtrim( $domain, '.' );254 $cookie_domain = $domain;255 if ( 'www.' == substr( $cookie_domain, 0, 4 ) ) {256 $cookie_domain = substr( $cookie_domain, 4 );257 }258 259 $path = preg_replace( '|([a-z0-9-]+.php.*)|', '', $GLOBALS['_SERVER']['REQUEST_URI'] );260 $path = str_replace( '/wp-admin/', '/', $path );261 $path = preg_replace( '|(/[a-z0-9-]+?/).*|', '$1', $path );262 263 $GLOBALS['current_site'] = wpmu_current_site();264 if ( ! isset( $GLOBALS['current_site']->blog_id ) && ! empty( $GLOBALS['current_site'] ) ) {265 $GLOBALS['current_site']->blog_id = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s", $GLOBALS['current_site']->domain, $GLOBALS['current_site']->path ) );266 }267 268 $blogname = htmlspecialchars( substr( $GLOBALS['_SERVER']['REQUEST_URI'], strlen( $path ) ) );269 if ( false !== strpos( $blogname, '/' ) ) {270 $blogname = substr( $blogname, 0, strpos( $blogname, '/' ) );271 }272 273 if ( false !== strpos( $blogname, '?' ) ) {274 $blogname = substr( $blogname, 0, strpos( $blogname, '?' ) );275 }276 277 $reserved_blognames = array( 'page', 'comments', 'blog', 'wp-admin', 'wp-includes', 'wp-content', 'files', 'feed' );278 if ( $blogname != '' && ! in_array( $blogname, $reserved_blognames ) && ! is_file( $blogname ) ) {279 $path .= $blogname . '/';280 }281 282 $GLOBALS['current_blog'] = get_blog_details( array( 'domain' => $domain, 'path' => $path ), false );283 284 unset( $reserved_blognames );285 286 if ( $GLOBALS['current_site'] && ! $GLOBALS['current_blog'] ) {287 $GLOBALS['current_blog'] = get_blog_details( array( 'domain' => $GLOBALS['current_site']->domain, 'path' => $GLOBALS['current_site']->path ), false );288 }289 290 $GLOBALS['blog_id'] = $GLOBALS['current_blog']->blog_id;291 }292 293 // Emulate a switch_to_blog()294 $table_prefix = $wpdb->get_blog_prefix( $current_blog->blog_id );295 $wpdb->set_blog_id( $current_blog->blog_id, $current_blog->site_id );296 $_wp_switched_stack = array();297 $switched = false;298 299 if ( ! isset( $current_site->site_name ) ) {300 $current_site->site_name = get_site_option( 'site_name' );301 if ( ! $current_site->site_name ) {302 $current_site->site_name = ucfirst( $current_site->domain );303 }304 }305 }306 307 $this->flush_cache();308 unset( $GLOBALS['wp_query'], $GLOBALS['wp_the_query'] );309 $GLOBALS['wp_the_query'] = new WP_Query();310 $GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];311 $GLOBALS['wp'] = new WP();312 313 // clean out globals to stop them polluting wp and wp_query314 foreach ( $GLOBALS['wp']->public_query_vars as $v ) {315 unset( $GLOBALS[ $v ] );316 }317 318 foreach ( $GLOBALS['wp']->private_query_vars as $v ) {319 unset( $GLOBALS[ $v ] );320 }321 322 $GLOBALS['wp']->main( $parts['query'] );323 324 $wp_roles->reinit();325 $current_user = wp_get_current_user();326 $current_user->for_blog( $blog_id );327 328 $this->clean_up_global_scope();329 67 do_action( 'bbp_init' ); 330 68 }
Note: See TracChangeset
for help on using the changeset viewer.