mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-23 01:27:36 +01:00
Upgrade/Install: Introduce populate_network_meta()
, moving logic out of populate_network()
.
Fixes #44895. See #41333. Built from https://develop.svn.wordpress.org/trunk@43628 git-svn-id: http://core.svn.wordpress.org/trunk@43457 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
e2f9dfcebb
commit
ea2550180b
@ -383,7 +383,8 @@ function populate_options( array $options = array() ) {
|
||||
}
|
||||
|
||||
// If WP_DEFAULT_THEME doesn't exist, fall back to the latest core default theme.
|
||||
$stylesheet = $template = WP_DEFAULT_THEME;
|
||||
$stylesheet = WP_DEFAULT_THEME;
|
||||
$template = WP_DEFAULT_THEME;
|
||||
$theme = wp_get_theme( WP_DEFAULT_THEME );
|
||||
if ( ! $theme->exists() ) {
|
||||
$theme = WP_Theme::get_core_default_theme();
|
||||
@ -402,7 +403,7 @@ function populate_options( array $options = array() ) {
|
||||
* or a valid timezone string (America/New_York). See https://secure.php.net/manual/en/timezones.php
|
||||
* for all timezone strings supported by PHP.
|
||||
*/
|
||||
$offset_or_tz = _x( '0', 'default GMT offset or timezone string' );
|
||||
$offset_or_tz = _x( '0', 'default GMT offset or timezone string' ); // phpcs:ignore WordPress.WP.I18n.NoEmptyStrings
|
||||
if ( is_numeric( $offset_or_tz ) ) {
|
||||
$gmt_offset = $offset_or_tz;
|
||||
} elseif ( $offset_or_tz && in_array( $offset_or_tz, timezone_identifiers_list() ) ) {
|
||||
@ -562,7 +563,7 @@ function populate_options( array $options = array() ) {
|
||||
$fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys', 'uninstall_plugins' );
|
||||
|
||||
$keys = "'" . implode( "', '", array_keys( $options ) ) . "'";
|
||||
$existing_options = $wpdb->get_col( "SELECT option_name FROM $wpdb->options WHERE option_name in ( $keys )" );
|
||||
$existing_options = $wpdb->get_col( "SELECT option_name FROM $wpdb->options WHERE option_name in ( $keys )" ); // phpcs:ignore WordPress.WP.PreparedSQL.NotPrepared
|
||||
|
||||
$insert = '';
|
||||
foreach ( $options as $option => $value ) {
|
||||
@ -585,7 +586,7 @@ function populate_options( array $options = array() ) {
|
||||
}
|
||||
|
||||
if ( ! empty( $insert ) ) {
|
||||
$wpdb->query( "INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert );
|
||||
$wpdb->query( "INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert ); // phpcs:ignore WordPress.WP.PreparedSQL.NotPrepared
|
||||
}
|
||||
|
||||
// In case it is set, but blank, update "home".
|
||||
@ -960,7 +961,6 @@ endif;
|
||||
*
|
||||
* @global wpdb $wpdb
|
||||
* @global object $current_site
|
||||
* @global int $wp_db_version
|
||||
* @global WP_Rewrite $wp_rewrite
|
||||
*
|
||||
* @param int $network_id ID of network to populate.
|
||||
@ -974,7 +974,7 @@ endif;
|
||||
* so the error code must be checked) or failure.
|
||||
*/
|
||||
function populate_network( $network_id = 1, $domain = '', $email = '', $site_name = '', $path = '/', $subdomain_install = false ) {
|
||||
global $wpdb, $current_site, $wp_db_version, $wp_rewrite;
|
||||
global $wpdb, $current_site, $wp_rewrite;
|
||||
|
||||
$errors = new WP_Error();
|
||||
if ( '' == $domain ) {
|
||||
@ -1004,32 +1004,6 @@ function populate_network( $network_id = 1, $domain = '', $email = '', $site_nam
|
||||
return $errors;
|
||||
}
|
||||
|
||||
// If a user with the provided email does not exist, default to the current user as the new network admin.
|
||||
$site_user = get_user_by( 'email', $email );
|
||||
if ( false === $site_user ) {
|
||||
$site_user = wp_get_current_user();
|
||||
}
|
||||
|
||||
// Set up site tables.
|
||||
$template = get_option( 'template' );
|
||||
$stylesheet = get_option( 'stylesheet' );
|
||||
$allowed_themes = array( $stylesheet => true );
|
||||
|
||||
if ( $template != $stylesheet ) {
|
||||
$allowed_themes[ $template ] = true;
|
||||
}
|
||||
|
||||
if ( WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template ) {
|
||||
$allowed_themes[ WP_DEFAULT_THEME ] = true;
|
||||
}
|
||||
|
||||
// If WP_DEFAULT_THEME doesn't exist, also whitelist the latest core default theme.
|
||||
if ( ! wp_get_theme( WP_DEFAULT_THEME )->exists() ) {
|
||||
if ( $core_default = WP_Theme::get_core_default_theme() ) {
|
||||
$allowed_themes[ $core_default->get_stylesheet() ] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( 1 == $network_id ) {
|
||||
$wpdb->insert(
|
||||
$wpdb->site,
|
||||
@ -1050,6 +1024,149 @@ function populate_network( $network_id = 1, $domain = '', $email = '', $site_nam
|
||||
);
|
||||
}
|
||||
|
||||
populate_network_meta(
|
||||
$network_id,
|
||||
array(
|
||||
'admin_email' => $email,
|
||||
'site_name' => $site_name,
|
||||
'subdomain_install' => $subdomain_install,
|
||||
)
|
||||
);
|
||||
|
||||
$site_user = get_userdata( (int) $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", 'admin_user_id', $network_id ) ) );
|
||||
|
||||
/*
|
||||
* When upgrading from single to multisite, assume the current site will
|
||||
* become the main site of the network. When using populate_network()
|
||||
* to create another network in an existing multisite environment, skip
|
||||
* these steps since the main site of the new network has not yet been
|
||||
* created.
|
||||
*/
|
||||
if ( ! is_multisite() ) {
|
||||
$current_site = new stdClass;
|
||||
$current_site->domain = $domain;
|
||||
$current_site->path = $path;
|
||||
$current_site->site_name = ucfirst( $domain );
|
||||
$wpdb->insert(
|
||||
$wpdb->blogs,
|
||||
array(
|
||||
'site_id' => $network_id,
|
||||
'blog_id' => 1,
|
||||
'domain' => $domain,
|
||||
'path' => $path,
|
||||
'registered' => current_time( 'mysql' ),
|
||||
)
|
||||
);
|
||||
$current_site->blog_id = $wpdb->insert_id;
|
||||
update_user_meta( $site_user->ID, 'source_domain', $domain );
|
||||
update_user_meta( $site_user->ID, 'primary_blog', $current_site->blog_id );
|
||||
|
||||
if ( $subdomain_install ) {
|
||||
$wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );
|
||||
} else {
|
||||
$wp_rewrite->set_permalink_structure( '/blog/%year%/%monthnum%/%day%/%postname%/' );
|
||||
}
|
||||
|
||||
flush_rewrite_rules();
|
||||
|
||||
if ( ! $subdomain_install ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$vhost_ok = false;
|
||||
$errstr = '';
|
||||
$hostname = substr( md5( time() ), 0, 6 ) . '.' . $domain; // Very random hostname!
|
||||
$page = wp_remote_get(
|
||||
'http://' . $hostname,
|
||||
array(
|
||||
'timeout' => 5,
|
||||
'httpversion' => '1.1',
|
||||
)
|
||||
);
|
||||
if ( is_wp_error( $page ) ) {
|
||||
$errstr = $page->get_error_message();
|
||||
} elseif ( 200 == wp_remote_retrieve_response_code( $page ) ) {
|
||||
$vhost_ok = true;
|
||||
}
|
||||
|
||||
if ( ! $vhost_ok ) {
|
||||
$msg = '<p><strong>' . __( 'Warning! Wildcard DNS may not be configured correctly!' ) . '</strong></p>';
|
||||
|
||||
$msg .= '<p>' . sprintf(
|
||||
/* translators: %s: host name */
|
||||
__( 'The installer attempted to contact a random hostname (%s) on your domain.' ),
|
||||
'<code>' . $hostname . '</code>'
|
||||
);
|
||||
if ( ! empty( $errstr ) ) {
|
||||
/* translators: %s: error message */
|
||||
$msg .= ' ' . sprintf( __( 'This resulted in an error message: %s' ), '<code>' . $errstr . '</code>' );
|
||||
}
|
||||
$msg .= '</p>';
|
||||
|
||||
$msg .= '<p>' . sprintf(
|
||||
/* translators: %s: asterisk symbol (*) */
|
||||
__( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a %s hostname record pointing at your web server in your DNS configuration tool.' ),
|
||||
'<code>*</code>'
|
||||
) . '</p>';
|
||||
|
||||
$msg .= '<p>' . __( 'You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.' ) . '</p>';
|
||||
|
||||
return new WP_Error( 'no_wildcard_dns', $msg );
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates WordPress network meta and sets the default values.
|
||||
*
|
||||
* @since 5.0.0
|
||||
*
|
||||
* @global wpdb $wpdb WordPress database abstraction object.
|
||||
* @global int $wp_db_version WordPress database version.
|
||||
*
|
||||
* @param int $network_id Network ID to populate meta for.
|
||||
* @param array $meta Optional. Custom meta $key => $value pairs to use. Default empty array.
|
||||
*/
|
||||
function populate_network_meta( $network_id, array $meta = array() ) {
|
||||
global $wpdb, $wp_db_version;
|
||||
|
||||
$network_id = (int) $network_id;
|
||||
|
||||
$email = ! empty( $meta['admin_email'] ) ? $meta['admin_email'] : '';
|
||||
$subdomain_install = isset( $meta['subdomain_install'] ) ? (int) $meta['subdomain_install'] : 0;
|
||||
|
||||
// If a user with the provided email does not exist, default to the current user as the new network admin.
|
||||
$site_user = ! empty( $email ) ? get_user_by( 'email', $email ) : false;
|
||||
if ( false === $site_user ) {
|
||||
$site_user = wp_get_current_user();
|
||||
}
|
||||
|
||||
if ( empty( $email ) ) {
|
||||
$email = $site_user->user_email;
|
||||
}
|
||||
|
||||
$template = get_option( 'template' );
|
||||
$stylesheet = get_option( 'stylesheet' );
|
||||
$allowed_themes = array( $stylesheet => true );
|
||||
|
||||
if ( $template != $stylesheet ) {
|
||||
$allowed_themes[ $template ] = true;
|
||||
}
|
||||
|
||||
if ( WP_DEFAULT_THEME != $stylesheet && WP_DEFAULT_THEME != $template ) {
|
||||
$allowed_themes[ WP_DEFAULT_THEME ] = true;
|
||||
}
|
||||
|
||||
// If WP_DEFAULT_THEME doesn't exist, also whitelist the latest core default theme.
|
||||
if ( ! wp_get_theme( WP_DEFAULT_THEME )->exists() ) {
|
||||
$core_default = WP_Theme::get_core_default_theme();
|
||||
if ( $core_default ) {
|
||||
$allowed_themes[ $core_default->get_stylesheet() ] = true;
|
||||
}
|
||||
}
|
||||
|
||||
wp_cache_delete( 'networks_have_paths', 'site-options' );
|
||||
|
||||
if ( ! is_multisite() ) {
|
||||
@ -1122,7 +1239,7 @@ We hope you enjoy your new site. Thanks!
|
||||
$upload_filetypes = array_unique( array_merge( $misc_exts, $audio_exts, $video_exts ) );
|
||||
|
||||
$sitemeta = array(
|
||||
'site_name' => $site_name,
|
||||
'site_name' => __( 'My Network' ),
|
||||
'admin_email' => $email,
|
||||
'admin_user_id' => $site_user->ID,
|
||||
'registration' => 'none',
|
||||
@ -1140,7 +1257,7 @@ We hope you enjoy your new site. Thanks!
|
||||
'siteurl' => get_option( 'siteurl' ) . '/',
|
||||
'add_new_users' => '0',
|
||||
'upload_space_check_disabled' => is_multisite() ? get_site_option( 'upload_space_check_disabled' ) : '1',
|
||||
'subdomain_install' => intval( $subdomain_install ),
|
||||
'subdomain_install' => $subdomain_install,
|
||||
'global_terms_enabled' => global_terms_enabled() ? '1' : '0',
|
||||
'ms_files_rewriting' => is_multisite() ? get_site_option( 'ms_files_rewriting' ) : '0',
|
||||
'initial_db_version' => get_option( 'initial_db_version' ),
|
||||
@ -1151,6 +1268,8 @@ We hope you enjoy your new site. Thanks!
|
||||
$sitemeta['illegal_names'][] = 'blog';
|
||||
}
|
||||
|
||||
$sitemeta = wp_parse_args( $meta, $sitemeta );
|
||||
|
||||
/**
|
||||
* Filters meta for a network on creation.
|
||||
*
|
||||
@ -1171,87 +1290,5 @@ We hope you enjoy your new site. Thanks!
|
||||
}
|
||||
$insert .= $wpdb->prepare( '( %d, %s, %s)', $network_id, $meta_key, $meta_value );
|
||||
}
|
||||
$wpdb->query( "INSERT INTO $wpdb->sitemeta ( site_id, meta_key, meta_value ) VALUES " . $insert );
|
||||
|
||||
/*
|
||||
* When upgrading from single to multisite, assume the current site will
|
||||
* become the main site of the network. When using populate_network()
|
||||
* to create another network in an existing multisite environment, skip
|
||||
* these steps since the main site of the new network has not yet been
|
||||
* created.
|
||||
*/
|
||||
if ( ! is_multisite() ) {
|
||||
$current_site = new stdClass;
|
||||
$current_site->domain = $domain;
|
||||
$current_site->path = $path;
|
||||
$current_site->site_name = ucfirst( $domain );
|
||||
$wpdb->insert(
|
||||
$wpdb->blogs,
|
||||
array(
|
||||
'site_id' => $network_id,
|
||||
'blog_id' => 1,
|
||||
'domain' => $domain,
|
||||
'path' => $path,
|
||||
'registered' => current_time( 'mysql' ),
|
||||
)
|
||||
);
|
||||
$current_site->blog_id = $blog_id = $wpdb->insert_id;
|
||||
update_user_meta( $site_user->ID, 'source_domain', $domain );
|
||||
update_user_meta( $site_user->ID, 'primary_blog', $blog_id );
|
||||
|
||||
if ( $subdomain_install ) {
|
||||
$wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );
|
||||
} else {
|
||||
$wp_rewrite->set_permalink_structure( '/blog/%year%/%monthnum%/%day%/%postname%/' );
|
||||
}
|
||||
|
||||
flush_rewrite_rules();
|
||||
|
||||
if ( ! $subdomain_install ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$vhost_ok = false;
|
||||
$errstr = '';
|
||||
$hostname = substr( md5( time() ), 0, 6 ) . '.' . $domain; // Very random hostname!
|
||||
$page = wp_remote_get(
|
||||
'http://' . $hostname,
|
||||
array(
|
||||
'timeout' => 5,
|
||||
'httpversion' => '1.1',
|
||||
)
|
||||
);
|
||||
if ( is_wp_error( $page ) ) {
|
||||
$errstr = $page->get_error_message();
|
||||
} elseif ( 200 == wp_remote_retrieve_response_code( $page ) ) {
|
||||
$vhost_ok = true;
|
||||
}
|
||||
|
||||
if ( ! $vhost_ok ) {
|
||||
$msg = '<p><strong>' . __( 'Warning! Wildcard DNS may not be configured correctly!' ) . '</strong></p>';
|
||||
|
||||
$msg .= '<p>' . sprintf(
|
||||
/* translators: %s: host name */
|
||||
__( 'The installer attempted to contact a random hostname (%s) on your domain.' ),
|
||||
'<code>' . $hostname . '</code>'
|
||||
);
|
||||
if ( ! empty( $errstr ) ) {
|
||||
/* translators: %s: error message */
|
||||
$msg .= ' ' . sprintf( __( 'This resulted in an error message: %s' ), '<code>' . $errstr . '</code>' );
|
||||
}
|
||||
$msg .= '</p>';
|
||||
|
||||
$msg .= '<p>' . sprintf(
|
||||
/* translators: %s: asterisk symbol (*) */
|
||||
__( 'To use a subdomain configuration, you must have a wildcard entry in your DNS. This usually means adding a %s hostname record pointing at your web server in your DNS configuration tool.' ),
|
||||
'<code>*</code>'
|
||||
) . '</p>';
|
||||
|
||||
$msg .= '<p>' . __( 'You can still use your site but any subdomain you create may not be accessible. If you know your DNS is correct, ignore this message.' ) . '</p>';
|
||||
|
||||
return new WP_Error( 'no_wildcard_dns', $msg );
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
$wpdb->query( "INSERT INTO $wpdb->sitemeta ( site_id, meta_key, meta_value ) VALUES " . $insert ); // phpcs:ignore WordPress.WP.PreparedSQL.NotPrepared
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* @global string $wp_version
|
||||
*/
|
||||
$wp_version = '5.0-alpha-43627';
|
||||
$wp_version = '5.0-alpha-43628';
|
||||
|
||||
/**
|
||||
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||
|
Loading…
Reference in New Issue
Block a user