X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/0f684a09c03e547d3132bddc970cbeafcd1102f4..refs/tags/wordpress-4.5:/wp-includes/ms-settings.php diff --git a/wp-includes/ms-settings.php b/wp-includes/ms-settings.php index d4383d3b..351a926b 100644 --- a/wp-includes/ms-settings.php +++ b/wp-includes/ms-settings.php @@ -10,12 +10,21 @@ * @since 3.0.0 */ -/** Include Multisite initialization functions */ -require( ABSPATH . WPINC . '/ms-load.php' ); -require( ABSPATH . WPINC . '/ms-default-constants.php' ); +/** WP_Network class */ +require_once( ABSPATH . WPINC . '/class-wp-network.php' ); -if ( defined( 'SUNRISE' ) ) +/** WP_Site class */ +require_once( ABSPATH . WPINC . '/class-wp-site.php' ); + +/** Multisite loader */ +require_once( ABSPATH . WPINC . '/ms-load.php' ); + +/** Default Multisite constants */ +require_once( ABSPATH . WPINC . '/ms-default-constants.php' ); + +if ( defined( 'SUNRISE' ) ) { include_once( WP_CONTENT_DIR . '/sunrise.php' ); +} /** Check for and define SUBDOMAIN_INSTALL and the deprecated VHOST constant. */ ms_subdomain_constants(); @@ -74,18 +83,31 @@ if ( !isset( $current_site ) || !isset( $current_blog ) ) { // Are there even two networks installed? $one_network = $wpdb->get_row( "SELECT * FROM $wpdb->site LIMIT 2" ); // [sic] if ( 1 === $wpdb->num_rows ) { - $current_site = wp_get_network( $one_network ); + $current_site = new WP_Network( $one_network ); wp_cache_add( 'current_network', $current_site, 'site-options' ); } elseif ( 0 === $wpdb->num_rows ) { - ms_not_installed(); + ms_not_installed( $domain, $path ); } } if ( empty( $current_site ) ) { - $current_site = get_network_by_path( $domain, $path, 1 ); + $current_site = WP_Network::get_by_path( $domain, $path, 1 ); } if ( empty( $current_site ) ) { - ms_not_installed(); + /** + * Fires when a network cannot be found based on the requested domain and path. + * + * At the time of this action, the only recourse is to redirect somewhere + * and exit. If you want to declare a particular network, do so earlier. + * + * @since 4.4.0 + * + * @param string $domain The domain used to search for a network. + * @param string $path The path used to search for a path. + */ + do_action( 'ms_network_not_found', $domain, $path ); + + ms_not_installed( $domain, $path ); } elseif ( $path === $current_site->path ) { $current_blog = get_site_by_path( $domain, $path ); } else { @@ -96,27 +118,31 @@ if ( !isset( $current_site ) || !isset( $current_blog ) ) { // Find the site by the domain and at most the first path segment. $current_blog = get_site_by_path( $domain, $path, 1 ); if ( $current_blog ) { - $current_site = wp_get_network( $current_blog->site_id ? $current_blog->site_id : 1 ); + $current_site = WP_Network::get_instance( $current_blog->site_id ? $current_blog->site_id : 1 ); } else { // If you don't have a site with the same domain/path as a network, you're pretty screwed, but: - $current_site = get_network_by_path( $domain, $path, 1 ); + $current_site = WP_Network::get_by_path( $domain, $path, 1 ); } } // The network declared by the site trumps any constants. if ( $current_blog && $current_blog->site_id != $current_site->id ) { - $current_site = wp_get_network( $current_blog->site_id ); + $current_site = WP_Network::get_instance( $current_blog->site_id ); } // No network has been found, bail. if ( empty( $current_site ) ) { - ms_not_installed(); + /** This action is documented in wp-includes/ms-settings.php */ + do_action( 'ms_network_not_found', $domain, $path ); + + ms_not_installed( $domain, $path ); } - // @todo Investigate when exactly this can occur. - if ( empty( $current_blog ) && defined( 'WP_INSTALLING' ) ) { + // During activation of a new subdomain, the requested site does not yet exist. + if ( empty( $current_blog ) && wp_installing() ) { $current_blog = new stdClass; $current_blog->blog_id = $blog_id = 1; + $current_blog->public = 1; } // No site has been found, bail. @@ -155,21 +181,15 @@ if ( !isset( $current_site ) || !isset( $current_blog ) ) { * it's no use redirecting back to ourselves -- it'll cause a loop. * As we couldn't find a site, we're simply not installed. */ - ms_not_installed(); + ms_not_installed( $domain, $path ); } header( 'Location: ' . $destination ); exit; } - // @todo What if the domain of the network doesn't match the current site? - $current_site->cookie_domain = $current_site->domain; - if ( 'www.' === substr( $current_site->cookie_domain, 0, 4 ) ) { - $current_site->cookie_domain = substr( $current_site->cookie_domain, 4 ); - } - // Figure out the current network's main site. - if ( ! isset( $current_site->blog_id ) ) { + if ( empty( $current_site->blog_id ) ) { if ( $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) { $current_site->blog_id = $current_blog->blog_id; } elseif ( ! $current_site->blog_id = wp_cache_get( 'network:' . $current_site->id . ':main_site', 'site-options' ) ) { @@ -201,11 +221,12 @@ $switched = false; // need to init cache again after blog_id is set wp_start_object_cache(); -if ( ! isset( $current_site->site_name ) ) { - $current_site->site_name = get_site_option( 'site_name' ); - if ( ! $current_site->site_name ) { - $current_site->site_name = ucfirst( $current_site->domain ); - } +if ( ! $current_site instanceof WP_Network ) { + $current_site = new WP_Network( $current_site ); +} + +if ( ! $current_blog instanceof WP_Site ) { + $current_blog = new WP_Site( $current_blog ); } // Define upload directory constants