wp/wp-admin/includes/schema.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 16 a86126ab1dd4
--- a/wp/wp-admin/includes/schema.php	Mon Oct 14 18:06:33 2019 +0200
+++ b/wp/wp-admin/includes/schema.php	Mon Oct 14 18:28:13 2019 +0200
@@ -38,8 +38,9 @@
 
 	$charset_collate = $wpdb->get_charset_collate();
 
-	if ( $blog_id && $blog_id != $wpdb->blogid )
+	if ( $blog_id && $blog_id != $wpdb->blogid ) {
 		$old_blog_id = $wpdb->set_blog_id( $blog_id );
+	}
 
 	// Engage multisite if in the middle of turning it on from network.php.
 	$is_multisite = is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK );
@@ -53,13 +54,13 @@
 
 	// Blog specific tables.
 	$blog_tables = "CREATE TABLE $wpdb->termmeta (
-  meta_id bigint(20) unsigned NOT NULL auto_increment,
-  term_id bigint(20) unsigned NOT NULL default '0',
-  meta_key varchar(255) default NULL,
-  meta_value longtext,
-  PRIMARY KEY  (meta_id),
-  KEY term_id (term_id),
-  KEY meta_key (meta_key($max_index_length))
+	meta_id bigint(20) unsigned NOT NULL auto_increment,
+	term_id bigint(20) unsigned NOT NULL default '0',
+	meta_key varchar(255) default NULL,
+	meta_value longtext,
+	PRIMARY KEY  (meta_id),
+	KEY term_id (term_id),
+	KEY meta_key (meta_key($max_index_length))
 ) $charset_collate;
 CREATE TABLE $wpdb->terms (
  term_id bigint(20) unsigned NOT NULL auto_increment,
@@ -89,248 +90,261 @@
  KEY term_taxonomy_id (term_taxonomy_id)
 ) $charset_collate;
 CREATE TABLE $wpdb->commentmeta (
-  meta_id bigint(20) unsigned NOT NULL auto_increment,
-  comment_id bigint(20) unsigned NOT NULL default '0',
-  meta_key varchar(255) default NULL,
-  meta_value longtext,
-  PRIMARY KEY  (meta_id),
-  KEY comment_id (comment_id),
-  KEY meta_key (meta_key($max_index_length))
+	meta_id bigint(20) unsigned NOT NULL auto_increment,
+	comment_id bigint(20) unsigned NOT NULL default '0',
+	meta_key varchar(255) default NULL,
+	meta_value longtext,
+	PRIMARY KEY  (meta_id),
+	KEY comment_id (comment_id),
+	KEY meta_key (meta_key($max_index_length))
 ) $charset_collate;
 CREATE TABLE $wpdb->comments (
-  comment_ID bigint(20) unsigned NOT NULL auto_increment,
-  comment_post_ID bigint(20) unsigned NOT NULL default '0',
-  comment_author tinytext NOT NULL,
-  comment_author_email varchar(100) NOT NULL default '',
-  comment_author_url varchar(200) NOT NULL default '',
-  comment_author_IP varchar(100) NOT NULL default '',
-  comment_date datetime NOT NULL default '0000-00-00 00:00:00',
-  comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
-  comment_content text NOT NULL,
-  comment_karma int(11) NOT NULL default '0',
-  comment_approved varchar(20) NOT NULL default '1',
-  comment_agent varchar(255) NOT NULL default '',
-  comment_type varchar(20) NOT NULL default '',
-  comment_parent bigint(20) unsigned NOT NULL default '0',
-  user_id bigint(20) unsigned NOT NULL default '0',
-  PRIMARY KEY  (comment_ID),
-  KEY comment_post_ID (comment_post_ID),
-  KEY comment_approved_date_gmt (comment_approved,comment_date_gmt),
-  KEY comment_date_gmt (comment_date_gmt),
-  KEY comment_parent (comment_parent),
-  KEY comment_author_email (comment_author_email(10))
+	comment_ID bigint(20) unsigned NOT NULL auto_increment,
+	comment_post_ID bigint(20) unsigned NOT NULL default '0',
+	comment_author tinytext NOT NULL,
+	comment_author_email varchar(100) NOT NULL default '',
+	comment_author_url varchar(200) NOT NULL default '',
+	comment_author_IP varchar(100) NOT NULL default '',
+	comment_date datetime NOT NULL default '0000-00-00 00:00:00',
+	comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
+	comment_content text NOT NULL,
+	comment_karma int(11) NOT NULL default '0',
+	comment_approved varchar(20) NOT NULL default '1',
+	comment_agent varchar(255) NOT NULL default '',
+	comment_type varchar(20) NOT NULL default '',
+	comment_parent bigint(20) unsigned NOT NULL default '0',
+	user_id bigint(20) unsigned NOT NULL default '0',
+	PRIMARY KEY  (comment_ID),
+	KEY comment_post_ID (comment_post_ID),
+	KEY comment_approved_date_gmt (comment_approved,comment_date_gmt),
+	KEY comment_date_gmt (comment_date_gmt),
+	KEY comment_parent (comment_parent),
+	KEY comment_author_email (comment_author_email(10))
 ) $charset_collate;
 CREATE TABLE $wpdb->links (
-  link_id bigint(20) unsigned NOT NULL auto_increment,
-  link_url varchar(255) NOT NULL default '',
-  link_name varchar(255) NOT NULL default '',
-  link_image varchar(255) NOT NULL default '',
-  link_target varchar(25) NOT NULL default '',
-  link_description varchar(255) NOT NULL default '',
-  link_visible varchar(20) NOT NULL default 'Y',
-  link_owner bigint(20) unsigned NOT NULL default '1',
-  link_rating int(11) NOT NULL default '0',
-  link_updated datetime NOT NULL default '0000-00-00 00:00:00',
-  link_rel varchar(255) NOT NULL default '',
-  link_notes mediumtext NOT NULL,
-  link_rss varchar(255) NOT NULL default '',
-  PRIMARY KEY  (link_id),
-  KEY link_visible (link_visible)
+	link_id bigint(20) unsigned NOT NULL auto_increment,
+	link_url varchar(255) NOT NULL default '',
+	link_name varchar(255) NOT NULL default '',
+	link_image varchar(255) NOT NULL default '',
+	link_target varchar(25) NOT NULL default '',
+	link_description varchar(255) NOT NULL default '',
+	link_visible varchar(20) NOT NULL default 'Y',
+	link_owner bigint(20) unsigned NOT NULL default '1',
+	link_rating int(11) NOT NULL default '0',
+	link_updated datetime NOT NULL default '0000-00-00 00:00:00',
+	link_rel varchar(255) NOT NULL default '',
+	link_notes mediumtext NOT NULL,
+	link_rss varchar(255) NOT NULL default '',
+	PRIMARY KEY  (link_id),
+	KEY link_visible (link_visible)
 ) $charset_collate;
 CREATE TABLE $wpdb->options (
-  option_id bigint(20) unsigned NOT NULL auto_increment,
-  option_name varchar(191) NOT NULL default '',
-  option_value longtext NOT NULL,
-  autoload varchar(20) NOT NULL default 'yes',
-  PRIMARY KEY  (option_id),
-  UNIQUE KEY option_name (option_name)
+	option_id bigint(20) unsigned NOT NULL auto_increment,
+	option_name varchar(191) NOT NULL default '',
+	option_value longtext NOT NULL,
+	autoload varchar(20) NOT NULL default 'yes',
+	PRIMARY KEY  (option_id),
+	UNIQUE KEY option_name (option_name)
 ) $charset_collate;
 CREATE TABLE $wpdb->postmeta (
-  meta_id bigint(20) unsigned NOT NULL auto_increment,
-  post_id bigint(20) unsigned NOT NULL default '0',
-  meta_key varchar(255) default NULL,
-  meta_value longtext,
-  PRIMARY KEY  (meta_id),
-  KEY post_id (post_id),
-  KEY meta_key (meta_key($max_index_length))
+	meta_id bigint(20) unsigned NOT NULL auto_increment,
+	post_id bigint(20) unsigned NOT NULL default '0',
+	meta_key varchar(255) default NULL,
+	meta_value longtext,
+	PRIMARY KEY  (meta_id),
+	KEY post_id (post_id),
+	KEY meta_key (meta_key($max_index_length))
 ) $charset_collate;
 CREATE TABLE $wpdb->posts (
-  ID bigint(20) unsigned NOT NULL auto_increment,
-  post_author bigint(20) unsigned NOT NULL default '0',
-  post_date datetime NOT NULL default '0000-00-00 00:00:00',
-  post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
-  post_content longtext NOT NULL,
-  post_title text NOT NULL,
-  post_excerpt text NOT NULL,
-  post_status varchar(20) NOT NULL default 'publish',
-  comment_status varchar(20) NOT NULL default 'open',
-  ping_status varchar(20) NOT NULL default 'open',
-  post_password varchar(255) NOT NULL default '',
-  post_name varchar(200) NOT NULL default '',
-  to_ping text NOT NULL,
-  pinged text NOT NULL,
-  post_modified datetime NOT NULL default '0000-00-00 00:00:00',
-  post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00',
-  post_content_filtered longtext NOT NULL,
-  post_parent bigint(20) unsigned NOT NULL default '0',
-  guid varchar(255) NOT NULL default '',
-  menu_order int(11) NOT NULL default '0',
-  post_type varchar(20) NOT NULL default 'post',
-  post_mime_type varchar(100) NOT NULL default '',
-  comment_count bigint(20) NOT NULL default '0',
-  PRIMARY KEY  (ID),
-  KEY post_name (post_name($max_index_length)),
-  KEY type_status_date (post_type,post_status,post_date,ID),
-  KEY post_parent (post_parent),
-  KEY post_author (post_author)
+	ID bigint(20) unsigned NOT NULL auto_increment,
+	post_author bigint(20) unsigned NOT NULL default '0',
+	post_date datetime NOT NULL default '0000-00-00 00:00:00',
+	post_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
+	post_content longtext NOT NULL,
+	post_title text NOT NULL,
+	post_excerpt text NOT NULL,
+	post_status varchar(20) NOT NULL default 'publish',
+	comment_status varchar(20) NOT NULL default 'open',
+	ping_status varchar(20) NOT NULL default 'open',
+	post_password varchar(255) NOT NULL default '',
+	post_name varchar(200) NOT NULL default '',
+	to_ping text NOT NULL,
+	pinged text NOT NULL,
+	post_modified datetime NOT NULL default '0000-00-00 00:00:00',
+	post_modified_gmt datetime NOT NULL default '0000-00-00 00:00:00',
+	post_content_filtered longtext NOT NULL,
+	post_parent bigint(20) unsigned NOT NULL default '0',
+	guid varchar(255) NOT NULL default '',
+	menu_order int(11) NOT NULL default '0',
+	post_type varchar(20) NOT NULL default 'post',
+	post_mime_type varchar(100) NOT NULL default '',
+	comment_count bigint(20) NOT NULL default '0',
+	PRIMARY KEY  (ID),
+	KEY post_name (post_name($max_index_length)),
+	KEY type_status_date (post_type,post_status,post_date,ID),
+	KEY post_parent (post_parent),
+	KEY post_author (post_author)
 ) $charset_collate;\n";
 
 	// Single site users table. The multisite flavor of the users table is handled below.
 	$users_single_table = "CREATE TABLE $wpdb->users (
-  ID bigint(20) unsigned NOT NULL auto_increment,
-  user_login varchar(60) NOT NULL default '',
-  user_pass varchar(255) NOT NULL default '',
-  user_nicename varchar(50) NOT NULL default '',
-  user_email varchar(100) NOT NULL default '',
-  user_url varchar(100) NOT NULL default '',
-  user_registered datetime NOT NULL default '0000-00-00 00:00:00',
-  user_activation_key varchar(255) NOT NULL default '',
-  user_status int(11) NOT NULL default '0',
-  display_name varchar(250) NOT NULL default '',
-  PRIMARY KEY  (ID),
-  KEY user_login_key (user_login),
-  KEY user_nicename (user_nicename),
-  KEY user_email (user_email)
+	ID bigint(20) unsigned NOT NULL auto_increment,
+	user_login varchar(60) NOT NULL default '',
+	user_pass varchar(255) NOT NULL default '',
+	user_nicename varchar(50) NOT NULL default '',
+	user_email varchar(100) NOT NULL default '',
+	user_url varchar(100) NOT NULL default '',
+	user_registered datetime NOT NULL default '0000-00-00 00:00:00',
+	user_activation_key varchar(255) NOT NULL default '',
+	user_status int(11) NOT NULL default '0',
+	display_name varchar(250) NOT NULL default '',
+	PRIMARY KEY  (ID),
+	KEY user_login_key (user_login),
+	KEY user_nicename (user_nicename),
+	KEY user_email (user_email)
 ) $charset_collate;\n";
 
 	// Multisite users table
 	$users_multi_table = "CREATE TABLE $wpdb->users (
-  ID bigint(20) unsigned NOT NULL auto_increment,
-  user_login varchar(60) NOT NULL default '',
-  user_pass varchar(255) NOT NULL default '',
-  user_nicename varchar(50) NOT NULL default '',
-  user_email varchar(100) NOT NULL default '',
-  user_url varchar(100) NOT NULL default '',
-  user_registered datetime NOT NULL default '0000-00-00 00:00:00',
-  user_activation_key varchar(255) NOT NULL default '',
-  user_status int(11) NOT NULL default '0',
-  display_name varchar(250) NOT NULL default '',
-  spam tinyint(2) NOT NULL default '0',
-  deleted tinyint(2) NOT NULL default '0',
-  PRIMARY KEY  (ID),
-  KEY user_login_key (user_login),
-  KEY user_nicename (user_nicename),
-  KEY user_email (user_email)
+	ID bigint(20) unsigned NOT NULL auto_increment,
+	user_login varchar(60) NOT NULL default '',
+	user_pass varchar(255) NOT NULL default '',
+	user_nicename varchar(50) NOT NULL default '',
+	user_email varchar(100) NOT NULL default '',
+	user_url varchar(100) NOT NULL default '',
+	user_registered datetime NOT NULL default '0000-00-00 00:00:00',
+	user_activation_key varchar(255) NOT NULL default '',
+	user_status int(11) NOT NULL default '0',
+	display_name varchar(250) NOT NULL default '',
+	spam tinyint(2) NOT NULL default '0',
+	deleted tinyint(2) NOT NULL default '0',
+	PRIMARY KEY  (ID),
+	KEY user_login_key (user_login),
+	KEY user_nicename (user_nicename),
+	KEY user_email (user_email)
 ) $charset_collate;\n";
 
 	// Usermeta.
 	$usermeta_table = "CREATE TABLE $wpdb->usermeta (
-  umeta_id bigint(20) unsigned NOT NULL auto_increment,
-  user_id bigint(20) unsigned NOT NULL default '0',
-  meta_key varchar(255) default NULL,
-  meta_value longtext,
-  PRIMARY KEY  (umeta_id),
-  KEY user_id (user_id),
-  KEY meta_key (meta_key($max_index_length))
+	umeta_id bigint(20) unsigned NOT NULL auto_increment,
+	user_id bigint(20) unsigned NOT NULL default '0',
+	meta_key varchar(255) default NULL,
+	meta_value longtext,
+	PRIMARY KEY  (umeta_id),
+	KEY user_id (user_id),
+	KEY meta_key (meta_key($max_index_length))
 ) $charset_collate;\n";
 
 	// Global tables
-	if ( $is_multisite )
+	if ( $is_multisite ) {
 		$global_tables = $users_multi_table . $usermeta_table;
-	else
+	} else {
 		$global_tables = $users_single_table . $usermeta_table;
+	}
 
 	// Multisite global tables.
 	$ms_global_tables = "CREATE TABLE $wpdb->blogs (
-  blog_id bigint(20) NOT NULL auto_increment,
-  site_id bigint(20) NOT NULL default '0',
-  domain varchar(200) NOT NULL default '',
-  path varchar(100) NOT NULL default '',
-  registered datetime NOT NULL default '0000-00-00 00:00:00',
-  last_updated datetime NOT NULL default '0000-00-00 00:00:00',
-  public tinyint(2) NOT NULL default '1',
-  archived tinyint(2) NOT NULL default '0',
-  mature tinyint(2) NOT NULL default '0',
-  spam tinyint(2) NOT NULL default '0',
-  deleted tinyint(2) NOT NULL default '0',
-  lang_id int(11) NOT NULL default '0',
-  PRIMARY KEY  (blog_id),
-  KEY domain (domain(50),path(5)),
-  KEY lang_id (lang_id)
+	blog_id bigint(20) NOT NULL auto_increment,
+	site_id bigint(20) NOT NULL default '0',
+	domain varchar(200) NOT NULL default '',
+	path varchar(100) NOT NULL default '',
+	registered datetime NOT NULL default '0000-00-00 00:00:00',
+	last_updated datetime NOT NULL default '0000-00-00 00:00:00',
+	public tinyint(2) NOT NULL default '1',
+	archived tinyint(2) NOT NULL default '0',
+	mature tinyint(2) NOT NULL default '0',
+	spam tinyint(2) NOT NULL default '0',
+	deleted tinyint(2) NOT NULL default '0',
+	lang_id int(11) NOT NULL default '0',
+	PRIMARY KEY  (blog_id),
+	KEY domain (domain(50),path(5)),
+	KEY lang_id (lang_id)
 ) $charset_collate;
 CREATE TABLE $wpdb->blog_versions (
-  blog_id bigint(20) NOT NULL default '0',
-  db_version varchar(20) NOT NULL default '',
-  last_updated datetime NOT NULL default '0000-00-00 00:00:00',
-  PRIMARY KEY  (blog_id),
-  KEY db_version (db_version)
+	blog_id bigint(20) NOT NULL default '0',
+	db_version varchar(20) NOT NULL default '',
+	last_updated datetime NOT NULL default '0000-00-00 00:00:00',
+	PRIMARY KEY  (blog_id),
+	KEY db_version (db_version)
+) $charset_collate;
+CREATE TABLE $wpdb->blogmeta (
+	meta_id bigint(20) unsigned NOT NULL auto_increment,
+	blog_id bigint(20) NOT NULL default '0',
+	meta_key varchar(255) default NULL,
+	meta_value longtext,
+	PRIMARY KEY  (meta_id),
+	KEY meta_key (meta_key($max_index_length)),
+	KEY blog_id (blog_id)
 ) $charset_collate;
 CREATE TABLE $wpdb->registration_log (
-  ID bigint(20) NOT NULL auto_increment,
-  email varchar(255) NOT NULL default '',
-  IP varchar(30) NOT NULL default '',
-  blog_id bigint(20) NOT NULL default '0',
-  date_registered datetime NOT NULL default '0000-00-00 00:00:00',
-  PRIMARY KEY  (ID),
-  KEY IP (IP)
+	ID bigint(20) NOT NULL auto_increment,
+	email varchar(255) NOT NULL default '',
+	IP varchar(30) NOT NULL default '',
+	blog_id bigint(20) NOT NULL default '0',
+	date_registered datetime NOT NULL default '0000-00-00 00:00:00',
+	PRIMARY KEY  (ID),
+	KEY IP (IP)
 ) $charset_collate;
 CREATE TABLE $wpdb->site (
-  id bigint(20) NOT NULL auto_increment,
-  domain varchar(200) NOT NULL default '',
-  path varchar(100) NOT NULL default '',
-  PRIMARY KEY  (id),
-  KEY domain (domain(140),path(51))
+	id bigint(20) NOT NULL auto_increment,
+	domain varchar(200) NOT NULL default '',
+	path varchar(100) NOT NULL default '',
+	PRIMARY KEY  (id),
+	KEY domain (domain(140),path(51))
 ) $charset_collate;
 CREATE TABLE $wpdb->sitemeta (
-  meta_id bigint(20) NOT NULL auto_increment,
-  site_id bigint(20) NOT NULL default '0',
-  meta_key varchar(255) default NULL,
-  meta_value longtext,
-  PRIMARY KEY  (meta_id),
-  KEY meta_key (meta_key($max_index_length)),
-  KEY site_id (site_id)
+	meta_id bigint(20) NOT NULL auto_increment,
+	site_id bigint(20) NOT NULL default '0',
+	meta_key varchar(255) default NULL,
+	meta_value longtext,
+	PRIMARY KEY  (meta_id),
+	KEY meta_key (meta_key($max_index_length)),
+	KEY site_id (site_id)
 ) $charset_collate;
 CREATE TABLE $wpdb->signups (
-  signup_id bigint(20) NOT NULL auto_increment,
-  domain varchar(200) NOT NULL default '',
-  path varchar(100) NOT NULL default '',
-  title longtext NOT NULL,
-  user_login varchar(60) NOT NULL default '',
-  user_email varchar(100) NOT NULL default '',
-  registered datetime NOT NULL default '0000-00-00 00:00:00',
-  activated datetime NOT NULL default '0000-00-00 00:00:00',
-  active tinyint(1) NOT NULL default '0',
-  activation_key varchar(50) NOT NULL default '',
-  meta longtext,
-  PRIMARY KEY  (signup_id),
-  KEY activation_key (activation_key),
-  KEY user_email (user_email),
-  KEY user_login_email (user_login,user_email),
-  KEY domain_path (domain(140),path(51))
+	signup_id bigint(20) NOT NULL auto_increment,
+	domain varchar(200) NOT NULL default '',
+	path varchar(100) NOT NULL default '',
+	title longtext NOT NULL,
+	user_login varchar(60) NOT NULL default '',
+	user_email varchar(100) NOT NULL default '',
+	registered datetime NOT NULL default '0000-00-00 00:00:00',
+	activated datetime NOT NULL default '0000-00-00 00:00:00',
+	active tinyint(1) NOT NULL default '0',
+	activation_key varchar(50) NOT NULL default '',
+	meta longtext,
+	PRIMARY KEY  (signup_id),
+	KEY activation_key (activation_key),
+	KEY user_email (user_email),
+	KEY user_login_email (user_login,user_email),
+	KEY domain_path (domain(140),path(51))
 ) $charset_collate;";
 
 	switch ( $scope ) {
-		case 'blog' :
+		case 'blog':
 			$queries = $blog_tables;
 			break;
-		case 'global' :
+		case 'global':
 			$queries = $global_tables;
-			if ( $is_multisite )
+			if ( $is_multisite ) {
 				$queries .= $ms_global_tables;
+			}
 			break;
-		case 'ms_global' :
+		case 'ms_global':
 			$queries = $ms_global_tables;
 			break;
-		case 'all' :
+		case 'all':
 		default:
 			$queries = $global_tables . $blog_tables;
-			if ( $is_multisite )
+			if ( $is_multisite ) {
 				$queries .= $ms_global_tables;
+			}
 			break;
 	}
 
-	if ( isset( $old_blog_id ) )
+	if ( isset( $old_blog_id ) ) {
 		$wpdb->set_blog_id( $old_blog_id );
+	}
 
 	return $queries;
 }
@@ -342,12 +356,15 @@
  * Create WordPress options and set the default values.
  *
  * @since 1.5.0
+ * @since 5.1.0 The $options parameter has been added.
  *
  * @global wpdb $wpdb WordPress database abstraction object.
  * @global int  $wp_db_version
  * @global int  $wp_current_db_version
+ *
+ * @param array $options Optional. Custom option $key => $value pairs to use. Default empty array.
  */
-function populate_options() {
+function populate_options( array $options = array() ) {
 	global $wpdb, $wp_db_version, $wp_current_db_version;
 
 	$guessurl = wp_guess_url();
@@ -358,7 +375,7 @@
 	 */
 	do_action( 'populate_options' );
 
-	if ( ini_get('safe_mode') ) {
+	if ( ini_get( 'safe_mode' ) ) {
 		// Safe mode can break mkdir() so use a flat structure by default.
 		$uploads_use_yearmonth_folders = 0;
 	} else {
@@ -366,8 +383,9 @@
 	}
 
 	// If WP_DEFAULT_THEME doesn't exist, fall back to the latest core default theme.
-	$stylesheet = $template = WP_DEFAULT_THEME;
-	$theme = wp_get_theme( 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();
 	}
@@ -379,216 +397,288 @@
 	}
 
 	$timezone_string = '';
-	$gmt_offset = 0;
-	/* translators: default GMT offset or timezone string. Must be either a valid offset (-12 to 14)
-	   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' );
-	if ( is_numeric( $offset_or_tz ) )
+	$gmt_offset      = 0;
+	/*
+	 * translators: default GMT offset or timezone string. Must be either a valid offset (-12 to 14)
+	 * 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' ); // 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() ) )
+	} elseif ( $offset_or_tz && in_array( $offset_or_tz, timezone_identifiers_list() ) ) {
 			$timezone_string = $offset_or_tz;
+	}
 
-	$options = array(
-	'siteurl' => $guessurl,
-	'home' => $guessurl,
-	'blogname' => __('My Site'),
-	/* translators: site tagline */
-	'blogdescription' => __('Just another WordPress site'),
-	'users_can_register' => 0,
-	'admin_email' => 'you@example.com',
-	/* translators: default start of the week. 0 = Sunday, 1 = Monday */
-	'start_of_week' => _x( '1', 'start of week' ),
-	'use_balanceTags' => 0,
-	'use_smilies' => 1,
-	'require_name_email' => 1,
-	'comments_notify' => 1,
-	'posts_per_rss' => 10,
-	'rss_use_excerpt' => 0,
-	'mailserver_url' => 'mail.example.com',
-	'mailserver_login' => 'login@example.com',
-	'mailserver_pass' => 'password',
-	'mailserver_port' => 110,
-	'default_category' => 1,
-	'default_comment_status' => 'open',
-	'default_ping_status' => 'open',
-	'default_pingback_flag' => 1,
-	'posts_per_page' => 10,
-	/* translators: default date format, see https://secure.php.net/date */
-	'date_format' => __('F j, Y'),
-	/* translators: default time format, see https://secure.php.net/date */
-	'time_format' => __('g:i a'),
-	/* translators: links last updated date format, see https://secure.php.net/date */
-	'links_updated_date_format' => __('F j, Y g:i a'),
-	'comment_moderation' => 0,
-	'moderation_notify' => 1,
-	'permalink_structure' => '',
-	'rewrite_rules' => '',
-	'hack_file' => 0,
-	'blog_charset' => 'UTF-8',
-	'moderation_keys' => '',
-	'active_plugins' => array(),
-	'category_base' => '',
-	'ping_sites' => 'http://rpc.pingomatic.com/',
-	'comment_max_links' => 2,
-	'gmt_offset' => $gmt_offset,
+	$defaults = array(
+		'siteurl'                         => $guessurl,
+		'home'                            => $guessurl,
+		'blogname'                        => __( 'My Site' ),
+		/* translators: site tagline */
+		'blogdescription'                 => __( 'Just another WordPress site' ),
+		'users_can_register'              => 0,
+		'admin_email'                     => 'you@example.com',
+		/* translators: default start of the week. 0 = Sunday, 1 = Monday */
+		'start_of_week'                   => _x( '1', 'start of week' ),
+		'use_balanceTags'                 => 0,
+		'use_smilies'                     => 1,
+		'require_name_email'              => 1,
+		'comments_notify'                 => 1,
+		'posts_per_rss'                   => 10,
+		'rss_use_excerpt'                 => 0,
+		'mailserver_url'                  => 'mail.example.com',
+		'mailserver_login'                => 'login@example.com',
+		'mailserver_pass'                 => 'password',
+		'mailserver_port'                 => 110,
+		'default_category'                => 1,
+		'default_comment_status'          => 'open',
+		'default_ping_status'             => 'open',
+		'default_pingback_flag'           => 1,
+		'posts_per_page'                  => 10,
+		/* translators: default date format, see https://secure.php.net/date */
+		'date_format'                     => __( 'F j, Y' ),
+		/* translators: default time format, see https://secure.php.net/date */
+		'time_format'                     => __( 'g:i a' ),
+		/* translators: links last updated date format, see https://secure.php.net/date */
+		'links_updated_date_format'       => __( 'F j, Y g:i a' ),
+		'comment_moderation'              => 0,
+		'moderation_notify'               => 1,
+		'permalink_structure'             => '',
+		'rewrite_rules'                   => '',
+		'hack_file'                       => 0,
+		'blog_charset'                    => 'UTF-8',
+		'moderation_keys'                 => '',
+		'active_plugins'                  => array(),
+		'category_base'                   => '',
+		'ping_sites'                      => 'http://rpc.pingomatic.com/',
+		'comment_max_links'               => 2,
+		'gmt_offset'                      => $gmt_offset,
 
-	// 1.5
-	'default_email_category' => 1,
-	'recently_edited' => '',
-	'template' => $template,
-	'stylesheet' => $stylesheet,
-	'comment_whitelist' => 1,
-	'blacklist_keys' => '',
-	'comment_registration' => 0,
-	'html_type' => 'text/html',
+		// 1.5
+		'default_email_category'          => 1,
+		'recently_edited'                 => '',
+		'template'                        => $template,
+		'stylesheet'                      => $stylesheet,
+		'comment_whitelist'               => 1,
+		'blacklist_keys'                  => '',
+		'comment_registration'            => 0,
+		'html_type'                       => 'text/html',
 
-	// 1.5.1
-	'use_trackback' => 0,
+		// 1.5.1
+		'use_trackback'                   => 0,
 
-	// 2.0
-	'default_role' => 'subscriber',
-	'db_version' => $wp_db_version,
+		// 2.0
+		'default_role'                    => 'subscriber',
+		'db_version'                      => $wp_db_version,
 
-	// 2.0.1
-	'uploads_use_yearmonth_folders' => $uploads_use_yearmonth_folders,
-	'upload_path' => '',
+		// 2.0.1
+		'uploads_use_yearmonth_folders'   => $uploads_use_yearmonth_folders,
+		'upload_path'                     => '',
 
-	// 2.1
-	'blog_public' => '1',
-	'default_link_category' => 2,
-	'show_on_front' => 'posts',
+		// 2.1
+		'blog_public'                     => '1',
+		'default_link_category'           => 2,
+		'show_on_front'                   => 'posts',
 
-	// 2.2
-	'tag_base' => '',
+		// 2.2
+		'tag_base'                        => '',
 
-	// 2.5
-	'show_avatars' => '1',
-	'avatar_rating' => 'G',
-	'upload_url_path' => '',
-	'thumbnail_size_w' => 150,
-	'thumbnail_size_h' => 150,
-	'thumbnail_crop' => 1,
-	'medium_size_w' => 300,
-	'medium_size_h' => 300,
+		// 2.5
+		'show_avatars'                    => '1',
+		'avatar_rating'                   => 'G',
+		'upload_url_path'                 => '',
+		'thumbnail_size_w'                => 150,
+		'thumbnail_size_h'                => 150,
+		'thumbnail_crop'                  => 1,
+		'medium_size_w'                   => 300,
+		'medium_size_h'                   => 300,
 
-	// 2.6
-	'avatar_default' => 'mystery',
+		// 2.6
+		'avatar_default'                  => 'mystery',
 
-	// 2.7
-	'large_size_w' => 1024,
-	'large_size_h' => 1024,
-	'image_default_link_type' => 'none',
-	'image_default_size' => '',
-	'image_default_align' => '',
-	'close_comments_for_old_posts' => 0,
-	'close_comments_days_old' => 14,
-	'thread_comments' => 1,
-	'thread_comments_depth' => 5,
-	'page_comments' => 0,
-	'comments_per_page' => 50,
-	'default_comments_page' => 'newest',
-	'comment_order' => 'asc',
-	'sticky_posts' => array(),
-	'widget_categories' => array(),
-	'widget_text' => array(),
-	'widget_rss' => array(),
-	'uninstall_plugins' => array(),
+		// 2.7
+		'large_size_w'                    => 1024,
+		'large_size_h'                    => 1024,
+		'image_default_link_type'         => 'none',
+		'image_default_size'              => '',
+		'image_default_align'             => '',
+		'close_comments_for_old_posts'    => 0,
+		'close_comments_days_old'         => 14,
+		'thread_comments'                 => 1,
+		'thread_comments_depth'           => 5,
+		'page_comments'                   => 0,
+		'comments_per_page'               => 50,
+		'default_comments_page'           => 'newest',
+		'comment_order'                   => 'asc',
+		'sticky_posts'                    => array(),
+		'widget_categories'               => array(),
+		'widget_text'                     => array(),
+		'widget_rss'                      => array(),
+		'uninstall_plugins'               => array(),
 
-	// 2.8
-	'timezone_string' => $timezone_string,
+		// 2.8
+		'timezone_string'                 => $timezone_string,
 
-	// 3.0
-	'page_for_posts' => 0,
-	'page_on_front' => 0,
+		// 3.0
+		'page_for_posts'                  => 0,
+		'page_on_front'                   => 0,
 
-	// 3.1
-	'default_post_format' => 0,
+		// 3.1
+		'default_post_format'             => 0,
 
-	// 3.5
-	'link_manager_enabled' => 0,
+		// 3.5
+		'link_manager_enabled'            => 0,
 
-	// 4.3.0
-	'finished_splitting_shared_terms' => 1,
-	'site_icon' => 0,
+		// 4.3.0
+		'finished_splitting_shared_terms' => 1,
+		'site_icon'                       => 0,
 
-	// 4.4.0
-	'medium_large_size_w' => 768,
-	'medium_large_size_h' => 0,
+		// 4.4.0
+		'medium_large_size_w'             => 768,
+		'medium_large_size_h'             => 0,
 
 		// 4.9.6
 		'wp_page_for_privacy_policy'      => 0,
 
 		// 4.9.8
-		'show_comments_cookies_opt_in'    => 0,
+		'show_comments_cookies_opt_in'    => 1,
 	);
 
 	// 3.3
 	if ( ! is_multisite() ) {
-		$options['initial_db_version'] = ! empty( $wp_current_db_version ) && $wp_current_db_version < $wp_db_version
+		$defaults['initial_db_version'] = ! empty( $wp_current_db_version ) && $wp_current_db_version < $wp_db_version
 			? $wp_current_db_version : $wp_db_version;
 	}
 
 	// 3.0 multisite
 	if ( is_multisite() ) {
 		/* translators: site tagline */
-		$options[ 'blogdescription' ] = sprintf(__('Just another %s site'), get_network()->site_name );
-		$options[ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/';
+		$defaults['blogdescription']     = sprintf( __( 'Just another %s site' ), get_network()->site_name );
+		$defaults['permalink_structure'] = '/%year%/%monthnum%/%day%/%postname%/';
 	}
 
+	$options = wp_parse_args( $options, $defaults );
+
 	// Set autoload to no for these options
 	$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 )" );
+	$keys             = "'" . implode( "', '", array_keys( $options ) ) . "'";
+	$existing_options = $wpdb->get_col( "SELECT option_name FROM $wpdb->options WHERE option_name in ( $keys )" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
 
 	$insert = '';
 	foreach ( $options as $option => $value ) {
-		if ( in_array($option, $existing_options) )
+		if ( in_array( $option, $existing_options ) ) {
 			continue;
-		if ( in_array($option, $fat_options) )
+		}
+		if ( in_array( $option, $fat_options ) ) {
 			$autoload = 'no';
-		else
+		} else {
 			$autoload = 'yes';
+		}
 
-		if ( is_array($value) )
-			$value = serialize($value);
-		if ( !empty($insert) )
+		if ( is_array( $value ) ) {
+			$value = serialize( $value );
+		}
+		if ( ! empty( $insert ) ) {
 			$insert .= ', ';
-		$insert .= $wpdb->prepare( "(%s, %s, %s)", $option, $value, $autoload );
+		}
+		$insert .= $wpdb->prepare( '(%s, %s, %s)', $option, $value, $autoload );
 	}
 
-	if ( !empty($insert) )
-		$wpdb->query("INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert);
+	if ( ! empty( $insert ) ) {
+		$wpdb->query( "INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES " . $insert ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
+	}
 
 	// In case it is set, but blank, update "home".
-	if ( !__get_option('home') ) update_option('home', $guessurl);
+	if ( ! __get_option( 'home' ) ) {
+		update_option( 'home', $guessurl );
+	}
 
 	// Delete unused options.
 	$unusedoptions = array(
-		'blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory',
-		'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping',
-		'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers',
-		'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference',
-		'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char',
-		'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1',
-		'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5',
-		'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9',
-		'links_recently_updated_time', 'links_recently_updated_prepend', 'links_recently_updated_append',
-		'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat',
-		'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce',
-		'_wp_http_referer', 'Update', 'action', 'rich_editing', 'autosave_interval', 'deactivated_plugins',
-		'can_compress_scripts', 'page_uris', 'update_core', 'update_plugins', 'update_themes', 'doing_cron',
-		'random_seed', 'rss_excerpt_length', 'secret', 'use_linksupdate', 'default_comment_status_page',
-		'wporg_popular_tags', 'what_to_show', 'rss_language', 'language', 'enable_xmlrpc', 'enable_app',
-		'embed_autourls', 'default_post_edit_rows', 'gzipcompression', 'advanced_edit'
+		'blodotgsping_url',
+		'bodyterminator',
+		'emailtestonly',
+		'phoneemail_separator',
+		'smilies_directory',
+		'subjectprefix',
+		'use_bbcode',
+		'use_blodotgsping',
+		'use_phoneemail',
+		'use_quicktags',
+		'use_weblogsping',
+		'weblogs_cache_file',
+		'use_preview',
+		'use_htmltrans',
+		'smilies_directory',
+		'fileupload_allowedusers',
+		'use_phoneemail',
+		'default_post_status',
+		'default_post_category',
+		'archive_mode',
+		'time_difference',
+		'links_minadminlevel',
+		'links_use_adminlevels',
+		'links_rating_type',
+		'links_rating_char',
+		'links_rating_ignore_zero',
+		'links_rating_single_image',
+		'links_rating_image0',
+		'links_rating_image1',
+		'links_rating_image2',
+		'links_rating_image3',
+		'links_rating_image4',
+		'links_rating_image5',
+		'links_rating_image6',
+		'links_rating_image7',
+		'links_rating_image8',
+		'links_rating_image9',
+		'links_recently_updated_time',
+		'links_recently_updated_prepend',
+		'links_recently_updated_append',
+		'weblogs_cacheminutes',
+		'comment_allowed_tags',
+		'search_engine_friendly_urls',
+		'default_geourl_lat',
+		'default_geourl_lon',
+		'use_default_geourl',
+		'weblogs_xml_url',
+		'new_users_can_blog',
+		'_wpnonce',
+		'_wp_http_referer',
+		'Update',
+		'action',
+		'rich_editing',
+		'autosave_interval',
+		'deactivated_plugins',
+		'can_compress_scripts',
+		'page_uris',
+		'update_core',
+		'update_plugins',
+		'update_themes',
+		'doing_cron',
+		'random_seed',
+		'rss_excerpt_length',
+		'secret',
+		'use_linksupdate',
+		'default_comment_status_page',
+		'wporg_popular_tags',
+		'what_to_show',
+		'rss_language',
+		'language',
+		'enable_xmlrpc',
+		'enable_app',
+		'embed_autourls',
+		'default_post_edit_rows',
+		'gzipcompression',
+		'advanced_edit',
 	);
-	foreach ( $unusedoptions as $option )
-		delete_option($option);
+	foreach ( $unusedoptions as $option ) {
+		delete_option( $option );
+	}
 
 	// Delete obsolete magpie stuff.
-	$wpdb->query("DELETE FROM $wpdb->options WHERE option_name REGEXP '^rss_[0-9a-f]{32}(_ts)?$'");
+	$wpdb->query( "DELETE FROM $wpdb->options WHERE option_name REGEXP '^rss_[0-9a-f]{32}(_ts)?$'" );
 
 	// Clear expired transients
 	delete_expired_transients( true );
@@ -618,101 +708,89 @@
 function populate_roles_160() {
 	// Add roles
 
-	// Dummy gettext calls to get strings in the catalog.
-	/* translators: user role */
-	_x('Administrator', 'User role');
-	/* translators: user role */
-	_x('Editor', 'User role');
-	/* translators: user role */
-	_x('Author', 'User role');
-	/* translators: user role */
-	_x('Contributor', 'User role');
-	/* translators: user role */
-	_x('Subscriber', 'User role');
-
-	add_role('administrator', 'Administrator');
-	add_role('editor', 'Editor');
-	add_role('author', 'Author');
-	add_role('contributor', 'Contributor');
-	add_role('subscriber', 'Subscriber');
+	add_role( 'administrator', 'Administrator' );
+	add_role( 'editor', 'Editor' );
+	add_role( 'author', 'Author' );
+	add_role( 'contributor', 'Contributor' );
+	add_role( 'subscriber', 'Subscriber' );
 
 	// Add caps for Administrator role
-	$role = get_role('administrator');
-	$role->add_cap('switch_themes');
-	$role->add_cap('edit_themes');
-	$role->add_cap('activate_plugins');
-	$role->add_cap('edit_plugins');
-	$role->add_cap('edit_users');
-	$role->add_cap('edit_files');
-	$role->add_cap('manage_options');
-	$role->add_cap('moderate_comments');
-	$role->add_cap('manage_categories');
-	$role->add_cap('manage_links');
-	$role->add_cap('upload_files');
-	$role->add_cap('import');
-	$role->add_cap('unfiltered_html');
-	$role->add_cap('edit_posts');
-	$role->add_cap('edit_others_posts');
-	$role->add_cap('edit_published_posts');
-	$role->add_cap('publish_posts');
-	$role->add_cap('edit_pages');
-	$role->add_cap('read');
-	$role->add_cap('level_10');
-	$role->add_cap('level_9');
-	$role->add_cap('level_8');
-	$role->add_cap('level_7');
-	$role->add_cap('level_6');
-	$role->add_cap('level_5');
-	$role->add_cap('level_4');
-	$role->add_cap('level_3');
-	$role->add_cap('level_2');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
+	$role = get_role( 'administrator' );
+	$role->add_cap( 'switch_themes' );
+	$role->add_cap( 'edit_themes' );
+	$role->add_cap( 'activate_plugins' );
+	$role->add_cap( 'edit_plugins' );
+	$role->add_cap( 'edit_users' );
+	$role->add_cap( 'edit_files' );
+	$role->add_cap( 'manage_options' );
+	$role->add_cap( 'moderate_comments' );
+	$role->add_cap( 'manage_categories' );
+	$role->add_cap( 'manage_links' );
+	$role->add_cap( 'upload_files' );
+	$role->add_cap( 'import' );
+	$role->add_cap( 'unfiltered_html' );
+	$role->add_cap( 'edit_posts' );
+	$role->add_cap( 'edit_others_posts' );
+	$role->add_cap( 'edit_published_posts' );
+	$role->add_cap( 'publish_posts' );
+	$role->add_cap( 'edit_pages' );
+	$role->add_cap( 'read' );
+	$role->add_cap( 'level_10' );
+	$role->add_cap( 'level_9' );
+	$role->add_cap( 'level_8' );
+	$role->add_cap( 'level_7' );
+	$role->add_cap( 'level_6' );
+	$role->add_cap( 'level_5' );
+	$role->add_cap( 'level_4' );
+	$role->add_cap( 'level_3' );
+	$role->add_cap( 'level_2' );
+	$role->add_cap( 'level_1' );
+	$role->add_cap( 'level_0' );
 
 	// Add caps for Editor role
-	$role = get_role('editor');
-	$role->add_cap('moderate_comments');
-	$role->add_cap('manage_categories');
-	$role->add_cap('manage_links');
-	$role->add_cap('upload_files');
-	$role->add_cap('unfiltered_html');
-	$role->add_cap('edit_posts');
-	$role->add_cap('edit_others_posts');
-	$role->add_cap('edit_published_posts');
-	$role->add_cap('publish_posts');
-	$role->add_cap('edit_pages');
-	$role->add_cap('read');
-	$role->add_cap('level_7');
-	$role->add_cap('level_6');
-	$role->add_cap('level_5');
-	$role->add_cap('level_4');
-	$role->add_cap('level_3');
-	$role->add_cap('level_2');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
+	$role = get_role( 'editor' );
+	$role->add_cap( 'moderate_comments' );
+	$role->add_cap( 'manage_categories' );
+	$role->add_cap( 'manage_links' );
+	$role->add_cap( 'upload_files' );
+	$role->add_cap( 'unfiltered_html' );
+	$role->add_cap( 'edit_posts' );
+	$role->add_cap( 'edit_others_posts' );
+	$role->add_cap( 'edit_published_posts' );
+	$role->add_cap( 'publish_posts' );
+	$role->add_cap( 'edit_pages' );
+	$role->add_cap( 'read' );
+	$role->add_cap( 'level_7' );
+	$role->add_cap( 'level_6' );
+	$role->add_cap( 'level_5' );
+	$role->add_cap( 'level_4' );
+	$role->add_cap( 'level_3' );
+	$role->add_cap( 'level_2' );
+	$role->add_cap( 'level_1' );
+	$role->add_cap( 'level_0' );
 
 	// Add caps for Author role
-	$role = get_role('author');
-	$role->add_cap('upload_files');
-	$role->add_cap('edit_posts');
-	$role->add_cap('edit_published_posts');
-	$role->add_cap('publish_posts');
-	$role->add_cap('read');
-	$role->add_cap('level_2');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
+	$role = get_role( 'author' );
+	$role->add_cap( 'upload_files' );
+	$role->add_cap( 'edit_posts' );
+	$role->add_cap( 'edit_published_posts' );
+	$role->add_cap( 'publish_posts' );
+	$role->add_cap( 'read' );
+	$role->add_cap( 'level_2' );
+	$role->add_cap( 'level_1' );
+	$role->add_cap( 'level_0' );
 
 	// Add caps for Contributor role
-	$role = get_role('contributor');
-	$role->add_cap('edit_posts');
-	$role->add_cap('read');
-	$role->add_cap('level_1');
-	$role->add_cap('level_0');
+	$role = get_role( 'contributor' );
+	$role->add_cap( 'edit_posts' );
+	$role->add_cap( 'read' );
+	$role->add_cap( 'level_1' );
+	$role->add_cap( 'level_0' );
 
 	// Add caps for Subscriber role
-	$role = get_role('subscriber');
-	$role->add_cap('read');
-	$role->add_cap('level_0');
+	$role = get_role( 'subscriber' );
+	$role->add_cap( 'read' );
+	$role->add_cap( 'level_0' );
 }
 
 /**
@@ -721,44 +799,45 @@
  * @since 2.1.0
  */
 function populate_roles_210() {
-	$roles = array('administrator', 'editor');
-	foreach ($roles as $role) {
-		$role = get_role($role);
-		if ( empty($role) )
+	$roles = array( 'administrator', 'editor' );
+	foreach ( $roles as $role ) {
+		$role = get_role( $role );
+		if ( empty( $role ) ) {
 			continue;
+		}
 
-		$role->add_cap('edit_others_pages');
-		$role->add_cap('edit_published_pages');
-		$role->add_cap('publish_pages');
-		$role->add_cap('delete_pages');
-		$role->add_cap('delete_others_pages');
-		$role->add_cap('delete_published_pages');
-		$role->add_cap('delete_posts');
-		$role->add_cap('delete_others_posts');
-		$role->add_cap('delete_published_posts');
-		$role->add_cap('delete_private_posts');
-		$role->add_cap('edit_private_posts');
-		$role->add_cap('read_private_posts');
-		$role->add_cap('delete_private_pages');
-		$role->add_cap('edit_private_pages');
-		$role->add_cap('read_private_pages');
+		$role->add_cap( 'edit_others_pages' );
+		$role->add_cap( 'edit_published_pages' );
+		$role->add_cap( 'publish_pages' );
+		$role->add_cap( 'delete_pages' );
+		$role->add_cap( 'delete_others_pages' );
+		$role->add_cap( 'delete_published_pages' );
+		$role->add_cap( 'delete_posts' );
+		$role->add_cap( 'delete_others_posts' );
+		$role->add_cap( 'delete_published_posts' );
+		$role->add_cap( 'delete_private_posts' );
+		$role->add_cap( 'edit_private_posts' );
+		$role->add_cap( 'read_private_posts' );
+		$role->add_cap( 'delete_private_pages' );
+		$role->add_cap( 'edit_private_pages' );
+		$role->add_cap( 'read_private_pages' );
 	}
 
-	$role = get_role('administrator');
-	if ( ! empty($role) ) {
-		$role->add_cap('delete_users');
-		$role->add_cap('create_users');
+	$role = get_role( 'administrator' );
+	if ( ! empty( $role ) ) {
+		$role->add_cap( 'delete_users' );
+		$role->add_cap( 'create_users' );
 	}
 
-	$role = get_role('author');
-	if ( ! empty($role) ) {
-		$role->add_cap('delete_posts');
-		$role->add_cap('delete_published_posts');
+	$role = get_role( 'author' );
+	if ( ! empty( $role ) ) {
+		$role->add_cap( 'delete_posts' );
+		$role->add_cap( 'delete_published_posts' );
 	}
 
-	$role = get_role('contributor');
-	if ( ! empty($role) ) {
-		$role->add_cap('delete_posts');
+	$role = get_role( 'contributor' );
+	if ( ! empty( $role ) ) {
+		$role->add_cap( 'delete_posts' );
 	}
 }
 
@@ -770,7 +849,7 @@
 function populate_roles_230() {
 	$role = get_role( 'administrator' );
 
-	if ( !empty( $role ) ) {
+	if ( ! empty( $role ) ) {
 		$role->add_cap( 'unfiltered_upload' );
 	}
 }
@@ -783,7 +862,7 @@
 function populate_roles_250() {
 	$role = get_role( 'administrator' );
 
-	if ( !empty( $role ) ) {
+	if ( ! empty( $role ) ) {
 		$role->add_cap( 'edit_dashboard' );
 	}
 }
@@ -796,7 +875,7 @@
 function populate_roles_260() {
 	$role = get_role( 'administrator' );
 
-	if ( !empty( $role ) ) {
+	if ( ! empty( $role ) ) {
 		$role->add_cap( 'update_plugins' );
 		$role->add_cap( 'delete_plugins' );
 	}
@@ -810,7 +889,7 @@
 function populate_roles_270() {
 	$role = get_role( 'administrator' );
 
-	if ( !empty( $role ) ) {
+	if ( ! empty( $role ) ) {
 		$role->add_cap( 'install_plugins' );
 		$role->add_cap( 'update_themes' );
 	}
@@ -824,7 +903,7 @@
 function populate_roles_280() {
 	$role = get_role( 'administrator' );
 
-	if ( !empty( $role ) ) {
+	if ( ! empty( $role ) ) {
 		$role->add_cap( 'install_themes' );
 	}
 }
@@ -837,7 +916,7 @@
 function populate_roles_300() {
 	$role = get_role( 'administrator' );
 
-	if ( !empty( $role ) ) {
+	if ( ! empty( $role ) ) {
 		$role->add_cap( 'update_core' );
 		$role->add_cap( 'list_users' );
 		$role->add_cap( 'remove_users' );
@@ -848,18 +927,19 @@
 	}
 }
 
-if ( !function_exists( 'install_network' ) ) :
-/**
- * Install Network.
- *
- * @since 3.0.0
- */
-function install_network() {
-	if ( ! defined( 'WP_INSTALLING_NETWORK' ) )
-		define( 'WP_INSTALLING_NETWORK', true );
+if ( ! function_exists( 'install_network' ) ) :
+	/**
+	 * Install Network.
+	 *
+	 * @since 3.0.0
+	 */
+	function install_network() {
+		if ( ! defined( 'WP_INSTALLING_NETWORK' ) ) {
+			define( 'WP_INSTALLING_NETWORK', true );
+		}
 
-	dbDelta( wp_get_db_schema( 'global' ) );
-}
+		dbDelta( wp_get_db_schema( 'global' ) );
+	}
 endif;
 
 /**
@@ -869,7 +949,6 @@
  *
  * @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.
@@ -883,13 +962,15 @@
  *                       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 )
+	if ( '' == $domain ) {
 		$errors->add( 'empty_domain', __( 'You must provide a domain name.' ) );
-	if ( '' == $site_name )
+	}
+	if ( '' == $site_name ) {
 		$errors->add( 'empty_sitename', __( 'You must provide a name for your network of sites.' ) );
+	}
 
 	// Check for network collision.
 	$network_exists = false;
@@ -903,142 +984,44 @@
 		}
 	}
 
-	if ( ! is_email( $email ) )
+	if ( ! is_email( $email ) ) {
 		$errors->add( 'invalid_email', __( 'You must provide a valid email address.' ) );
-
-	if ( $errors->get_error_code() )
-		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 ( $errors->has_errors() ) {
+		return $errors;
 	}
 
 	if ( 1 == $network_id ) {
-		$wpdb->insert( $wpdb->site, array( 'domain' => $domain, 'path' => $path ) );
+		$wpdb->insert(
+			$wpdb->site,
+			array(
+				'domain' => $domain,
+				'path'   => $path,
+			)
+		);
 		$network_id = $wpdb->insert_id;
 	} else {
-		$wpdb->insert( $wpdb->site, array( 'domain' => $domain, 'path' => $path, 'id' => $network_id ) );
-	}
-
-	wp_cache_delete( 'networks_have_paths', 'site-options' );
-
-	if ( !is_multisite() ) {
-		$site_admins = array( $site_user->user_login );
-		$users = get_users( array(
-			'fields' => array( 'user_login' ),
-			'role'   => 'administrator',
-		) );
-		if ( $users ) {
-			foreach ( $users as $user ) {
-				$site_admins[] = $user->user_login;
-			}
-
-			$site_admins = array_unique( $site_admins );
-		}
-	} else {
-		$site_admins = get_site_option( 'site_admins' );
+		$wpdb->insert(
+			$wpdb->site,
+			array(
+				'domain' => $domain,
+				'path'   => $path,
+				'id'     => $network_id,
+			)
+		);
 	}
 
-	/* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
-	$welcome_email = __( 'Howdy USERNAME,
-
-Your new SITE_NAME site has been successfully set up at:
-BLOG_URL
-
-You can log in to the administrator account with the following information:
-
-Username: USERNAME
-Password: PASSWORD
-Log in here: BLOG_URLwp-login.php
-
-We hope you enjoy your new site. Thanks!
-
---The Team @ SITE_NAME' );
-
-	$misc_exts = array(
-		// Images.
-		'jpg', 'jpeg', 'png', 'gif',
-		// Video.
-		'mov', 'avi', 'mpg', '3gp', '3g2',
-		// "audio".
-		'midi', 'mid',
-		// Miscellaneous.
-		'pdf', 'doc', 'ppt', 'odt', 'pptx', 'docx', 'pps', 'ppsx', 'xls', 'xlsx', 'key',
+	populate_network_meta(
+		$network_id,
+		array(
+			'admin_email'       => $email,
+			'site_name'         => $site_name,
+			'subdomain_install' => $subdomain_install,
+		)
 	);
-	$audio_exts = wp_get_audio_extensions();
-	$video_exts = wp_get_video_extensions();
-	$upload_filetypes = array_unique( array_merge( $misc_exts, $audio_exts, $video_exts ) );
 
-	$sitemeta = array(
-		'site_name' => $site_name,
-		'admin_email' => $email,
-		'admin_user_id' => $site_user->ID,
-		'registration' => 'none',
-		'upload_filetypes' => implode( ' ', $upload_filetypes ),
-		'blog_upload_space' => 100,
-		'fileupload_maxk' => 1500,
-		'site_admins' => $site_admins,
-		'allowedthemes' => $allowed_themes,
-		'illegal_names' => array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files' ),
-		'wpmu_upgrade_site' => $wp_db_version,
-		'welcome_email' => $welcome_email,
-		/* translators: %s: site link */
-		'first_post' => __( 'Welcome to %s. This is your first post. Edit or delete it, then start blogging!' ),
-		// @todo - network admins should have a method of editing the network siteurl (used for cookie hash)
-		'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 ),
-		'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' ),
-		'active_sitewide_plugins' => array(),
-		'WPLANG' => get_locale(),
-	);
-	if ( ! $subdomain_install )
-		$sitemeta['illegal_names'][] = 'blog';
-
-	/**
-	 * Filters meta for a network on creation.
-	 *
-	 * @since 3.7.0
-	 *
-	 * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
-	 * @param int   $network_id ID of network to populate.
-	 */
-	$sitemeta = apply_filters( 'populate_network_meta', $sitemeta, $network_id );
-
-	$insert = '';
-	foreach ( $sitemeta as $meta_key => $meta_value ) {
-		if ( is_array( $meta_value ) )
-			$meta_value = serialize( $meta_value );
-		if ( !empty( $insert ) )
-			$insert .= ', ';
-		$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 );
+	$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
@@ -1048,33 +1031,51 @@
 	 * created.
 	 */
 	if ( ! is_multisite() ) {
-		$current_site = new stdClass;
-		$current_site->domain = $domain;
-		$current_site->path = $path;
+		$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;
+		$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', $blog_id );
+		update_user_meta( $site_user->ID, 'primary_blog', $current_site->blog_id );
 
-		if ( $subdomain_install )
+		if ( $subdomain_install ) {
 			$wp_rewrite->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );
-		else
+		} else {
 			$wp_rewrite->set_permalink_structure( '/blog/%year%/%monthnum%/%day%/%postname%/' );
+		}
 
 		flush_rewrite_rules();
 
-		if ( ! $subdomain_install )
+		if ( ! $subdomain_install ) {
 			return true;
+		}
 
 		$vhost_ok = false;
-		$errstr = '';
+		$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 ) )
+		$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 ) )
+		} 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>';
@@ -1084,7 +1085,7 @@
 				__( 'The installer attempted to contact a random hostname (%s) on your domain.' ),
 				'<code>' . $hostname . '</code>'
 			);
-			if ( ! empty ( $errstr ) ) {
+			if ( ! empty( $errstr ) ) {
 				/* translators: %s: error message */
 				$msg .= ' ' . sprintf( __( 'This resulted in an error message: %s' ), '<code>' . $errstr . '</code>' );
 			}
@@ -1104,3 +1105,228 @@
 
 	return true;
 }
+
+/**
+ * Creates WordPress network meta and sets the default values.
+ *
+ * @since 5.1.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() ) {
+		$site_admins = array( $site_user->user_login );
+		$users       = get_users(
+			array(
+				'fields' => array( 'user_login' ),
+				'role'   => 'administrator',
+			)
+		);
+		if ( $users ) {
+			foreach ( $users as $user ) {
+				$site_admins[] = $user->user_login;
+			}
+
+			$site_admins = array_unique( $site_admins );
+		}
+	} else {
+		$site_admins = get_site_option( 'site_admins' );
+	}
+
+	/* translators: Do not translate USERNAME, SITE_NAME, BLOG_URL, PASSWORD: those are placeholders. */
+	$welcome_email = __(
+		'Howdy USERNAME,
+
+Your new SITE_NAME site has been successfully set up at:
+BLOG_URL
+
+You can log in to the administrator account with the following information:
+
+Username: USERNAME
+Password: PASSWORD
+Log in here: BLOG_URLwp-login.php
+
+We hope you enjoy your new site. Thanks!
+
+--The Team @ SITE_NAME'
+	);
+
+	$misc_exts        = array(
+		// Images.
+		'jpg',
+		'jpeg',
+		'png',
+		'gif',
+		// Video.
+		'mov',
+		'avi',
+		'mpg',
+		'3gp',
+		'3g2',
+		// "audio".
+		'midi',
+		'mid',
+		// Miscellaneous.
+		'pdf',
+		'doc',
+		'ppt',
+		'odt',
+		'pptx',
+		'docx',
+		'pps',
+		'ppsx',
+		'xls',
+		'xlsx',
+		'key',
+	);
+	$audio_exts       = wp_get_audio_extensions();
+	$video_exts       = wp_get_video_extensions();
+	$upload_filetypes = array_unique( array_merge( $misc_exts, $audio_exts, $video_exts ) );
+
+	$sitemeta = array(
+		'site_name'                   => __( 'My Network' ),
+		'admin_email'                 => $email,
+		'admin_user_id'               => $site_user->ID,
+		'registration'                => 'none',
+		'upload_filetypes'            => implode( ' ', $upload_filetypes ),
+		'blog_upload_space'           => 100,
+		'fileupload_maxk'             => 1500,
+		'site_admins'                 => $site_admins,
+		'allowedthemes'               => $allowed_themes,
+		'illegal_names'               => array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'files' ),
+		'wpmu_upgrade_site'           => $wp_db_version,
+		'welcome_email'               => $welcome_email,
+		/* translators: %s: site link */
+		'first_post'                  => __( 'Welcome to %s. This is your first post. Edit or delete it, then start writing!' ),
+		// @todo - network admins should have a method of editing the network siteurl (used for cookie hash)
+		'siteurl'                     => get_option( 'siteurl' ) . '/',
+		'add_new_users'               => '0',
+		'upload_space_check_disabled' => is_multisite() ? get_site_option( 'upload_space_check_disabled' ) : '1',
+		'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' ),
+		'active_sitewide_plugins'     => array(),
+		'WPLANG'                      => get_locale(),
+	);
+	if ( ! $subdomain_install ) {
+		$sitemeta['illegal_names'][] = 'blog';
+	}
+
+	$sitemeta = wp_parse_args( $meta, $sitemeta );
+
+	/**
+	 * Filters meta for a network on creation.
+	 *
+	 * @since 3.7.0
+	 *
+	 * @param array $sitemeta   Associative array of network meta keys and values to be inserted.
+	 * @param int   $network_id ID of network to populate.
+	 */
+	$sitemeta = apply_filters( 'populate_network_meta', $sitemeta, $network_id );
+
+	$insert = '';
+	foreach ( $sitemeta as $meta_key => $meta_value ) {
+		if ( is_array( $meta_value ) ) {
+			$meta_value = serialize( $meta_value );
+		}
+		if ( ! empty( $insert ) ) {
+			$insert .= ', ';
+		}
+		$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 ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
+}
+
+/**
+ * Creates WordPress site meta and sets the default values.
+ *
+ * @since 5.1.0
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param int   $site_id Site ID to populate meta for.
+ * @param array $meta    Optional. Custom meta $key => $value pairs to use. Default empty array.
+ */
+function populate_site_meta( $site_id, array $meta = array() ) {
+	global $wpdb;
+
+	$site_id = (int) $site_id;
+
+	if ( ! is_site_meta_supported() ) {
+		return;
+	}
+
+	if ( empty( $meta ) ) {
+		return;
+	}
+
+	/**
+	 * Filters meta for a site on creation.
+	 *
+	 * @since 5.2.0
+	 *
+	 * @param array $meta    Associative array of site meta keys and values to be inserted.
+	 * @param int   $site_id ID of site to populate.
+	 */
+	$site_meta = apply_filters( 'populate_site_meta', $meta, $site_id );
+
+	$insert = '';
+	foreach ( $site_meta as $meta_key => $meta_value ) {
+		if ( is_array( $meta_value ) ) {
+			$meta_value = serialize( $meta_value );
+		}
+		if ( ! empty( $insert ) ) {
+			$insert .= ', ';
+		}
+		$insert .= $wpdb->prepare( '( %d, %s, %s)', $site_id, $meta_key, $meta_value );
+	}
+
+	$wpdb->query( "INSERT INTO $wpdb->blogmeta ( blog_id, meta_key, meta_value ) VALUES " . $insert ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
+
+	wp_cache_delete( $site_id, 'blog_meta' );
+	wp_cache_set_sites_last_changed();
+}