Introduce wp_get_db_schema() for rerieving the various flavors of the WP db schema. Eliminates need to use global. Allows multiple calls to wpmu_create_blog(). see #12028
git-svn-id: http://svn.automattic.com/wordpress/trunk@18899 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
4c3edc9b6b
commit
a0f6c4469d
|
@ -8,6 +8,9 @@
|
||||||
* @subpackage Administration
|
* @subpackage Administration
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// Declare these as global in case schema.php is included from a function.
|
||||||
|
global $wpdb, $wp_queries, $charset_collate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The database character collate.
|
* The database character collate.
|
||||||
* @var string
|
* @var string
|
||||||
|
@ -16,16 +19,36 @@
|
||||||
*/
|
*/
|
||||||
$charset_collate = '';
|
$charset_collate = '';
|
||||||
|
|
||||||
// Declare these as global in case schema.php is included from a function.
|
if ( ! empty( $wpdb->charset ) )
|
||||||
global $wpdb, $wp_queries;
|
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
|
||||||
|
if ( ! empty( $wpdb->collate ) )
|
||||||
|
$charset_collate .= " COLLATE $wpdb->collate";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the SQL for creating database tables.
|
||||||
|
*
|
||||||
|
* @since 3.3.0
|
||||||
|
*
|
||||||
|
* @param string $scope Optional. The tables for which to retrieve SQL. Can be all, global, ms_global, or blog tables. Defaults to all.
|
||||||
|
* @param int $blog_id Optional. The blog ID for which to retrieve SQL. Default is the current blog ID.
|
||||||
|
* @return string The SQL needed to create the requested tables.
|
||||||
|
*/
|
||||||
|
function wp_get_db_schema( $scope = 'all', $blog_id = null ) {
|
||||||
|
global $wpdb;
|
||||||
|
|
||||||
if ( ! empty($wpdb->charset) )
|
if ( ! empty($wpdb->charset) )
|
||||||
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
|
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
|
||||||
if ( ! empty($wpdb->collate) )
|
if ( ! empty($wpdb->collate) )
|
||||||
$charset_collate .= " COLLATE $wpdb->collate";
|
$charset_collate .= " COLLATE $wpdb->collate";
|
||||||
|
|
||||||
/** Create WordPress database tables SQL */
|
if ( $blog_id && $blog_id != $wpdb->blogid )
|
||||||
$wp_queries = "CREATE TABLE $wpdb->terms (
|
$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 );
|
||||||
|
|
||||||
|
// Blog specific tables.
|
||||||
|
$blog_tables = "CREATE TABLE $wpdb->terms (
|
||||||
term_id bigint(20) unsigned NOT NULL auto_increment,
|
term_id bigint(20) unsigned NOT NULL auto_increment,
|
||||||
name varchar(200) NOT NULL default '',
|
name varchar(200) NOT NULL default '',
|
||||||
slug varchar(200) NOT NULL default '',
|
slug varchar(200) NOT NULL default '',
|
||||||
|
@ -148,8 +171,10 @@ CREATE TABLE $wpdb->posts (
|
||||||
KEY type_status_date (post_type,post_status,post_date,ID),
|
KEY type_status_date (post_type,post_status,post_date,ID),
|
||||||
KEY post_parent (post_parent),
|
KEY post_parent (post_parent),
|
||||||
KEY post_author (post_author)
|
KEY post_author (post_author)
|
||||||
) $charset_collate;
|
) $charset_collate;\n";
|
||||||
CREATE TABLE $wpdb->users (
|
|
||||||
|
// 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,
|
ID bigint(20) unsigned NOT NULL auto_increment,
|
||||||
user_login varchar(60) NOT NULL default '',
|
user_login varchar(60) NOT NULL default '',
|
||||||
user_pass varchar(64) NOT NULL default '',
|
user_pass varchar(64) NOT NULL default '',
|
||||||
|
@ -163,8 +188,29 @@ CREATE TABLE $wpdb->users (
|
||||||
PRIMARY KEY (ID),
|
PRIMARY KEY (ID),
|
||||||
KEY user_login_key (user_login),
|
KEY user_login_key (user_login),
|
||||||
KEY user_nicename (user_nicename)
|
KEY user_nicename (user_nicename)
|
||||||
) $charset_collate;
|
) $charset_collate;\n";
|
||||||
CREATE TABLE $wpdb->usermeta (
|
|
||||||
|
// 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(64) 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(60) 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)
|
||||||
|
) $charset_collate;\n";
|
||||||
|
|
||||||
|
// usermeta
|
||||||
|
$usermeta_table = "CREATE TABLE $wpdb->usermeta (
|
||||||
umeta_id bigint(20) unsigned NOT NULL auto_increment,
|
umeta_id bigint(20) unsigned NOT NULL auto_increment,
|
||||||
user_id bigint(20) unsigned NOT NULL default '0',
|
user_id bigint(20) unsigned NOT NULL default '0',
|
||||||
meta_key varchar(255) default NULL,
|
meta_key varchar(255) default NULL,
|
||||||
|
@ -172,8 +218,108 @@ CREATE TABLE $wpdb->usermeta (
|
||||||
PRIMARY KEY (umeta_id),
|
PRIMARY KEY (umeta_id),
|
||||||
KEY user_id (user_id),
|
KEY user_id (user_id),
|
||||||
KEY meta_key (meta_key)
|
KEY meta_key (meta_key)
|
||||||
|
) $charset_collate;\n";
|
||||||
|
|
||||||
|
// Global tables
|
||||||
|
if ( $is_multisite )
|
||||||
|
$global_tables = $users_multi_table . $usermeta_table;
|
||||||
|
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 enum('0','1') 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)
|
||||||
|
) $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)
|
||||||
|
) $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,path)
|
||||||
|
) $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),
|
||||||
|
KEY site_id (site_id)
|
||||||
|
) $charset_collate;
|
||||||
|
CREATE TABLE $wpdb->signups (
|
||||||
|
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,
|
||||||
|
KEY activation_key (activation_key),
|
||||||
|
KEY domain (domain)
|
||||||
) $charset_collate;";
|
) $charset_collate;";
|
||||||
|
|
||||||
|
switch ( $scope ) {
|
||||||
|
case 'blog' :
|
||||||
|
$queries = $blog_tables;
|
||||||
|
break;
|
||||||
|
case 'global' :
|
||||||
|
$queries = $global_tables;
|
||||||
|
if ( $is_multisite )
|
||||||
|
$queries .= $ms_global_tables;
|
||||||
|
break;
|
||||||
|
case 'ms_global' :
|
||||||
|
$queries = $ms_global_tables;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 'all' :
|
||||||
|
$queries = $global_tables . $blog_tables;
|
||||||
|
if ( $is_multisite )
|
||||||
|
$queries .= $ms_global_tables;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( isset( $old_blog_id ) )
|
||||||
|
$wpdb->set_blog_id( $old_blog_id );
|
||||||
|
|
||||||
|
return $queries;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Populate for back compat.
|
||||||
|
$wp_queries = wp_get_db_schema( 'all' );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create WordPress options and set the default values.
|
* Create WordPress options and set the default values.
|
||||||
*
|
*
|
||||||
|
@ -623,6 +769,21 @@ function populate_roles_300() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install Network.
|
||||||
|
*
|
||||||
|
* @since 3.0.0
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if ( !function_exists( 'install_network' ) ) :
|
||||||
|
function install_network() {
|
||||||
|
if ( ! defined( 'WP_INSTALLING_NETWORK' ) )
|
||||||
|
define( 'WP_INSTALLING_NETWORK', true );
|
||||||
|
|
||||||
|
dbDelta( wp_get_db_schema( 'global' ) );
|
||||||
|
}
|
||||||
|
endif;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* populate network settings
|
* populate network settings
|
||||||
*
|
*
|
||||||
|
|
|
@ -1424,9 +1424,12 @@ function deslash($content) {
|
||||||
* @param unknown_type $execute
|
* @param unknown_type $execute
|
||||||
* @return unknown
|
* @return unknown
|
||||||
*/
|
*/
|
||||||
function dbDelta($queries, $execute = true) {
|
function dbDelta( $queries = '', $execute = true ) {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
|
|
||||||
|
if ( in_array( $queries, array( '', 'all', 'blog', 'global', 'ms_global' ), true ) )
|
||||||
|
$queries = wp_get_db_schema( $queries );
|
||||||
|
|
||||||
// Separate individual queries into an array
|
// Separate individual queries into an array
|
||||||
if ( !is_array($queries) ) {
|
if ( !is_array($queries) ) {
|
||||||
$queries = explode( ';', $queries );
|
$queries = explode( ';', $queries );
|
||||||
|
@ -1631,10 +1634,8 @@ function dbDelta($queries, $execute = true) {
|
||||||
*
|
*
|
||||||
* @since 1.5.0
|
* @since 1.5.0
|
||||||
*/
|
*/
|
||||||
function make_db_current() {
|
function make_db_current( $tables = 'all' ) {
|
||||||
global $wp_queries;
|
$alterations = dbDelta( $tables );
|
||||||
|
|
||||||
$alterations = dbDelta($wp_queries);
|
|
||||||
echo "<ol>\n";
|
echo "<ol>\n";
|
||||||
foreach($alterations as $alteration) echo "<li>$alteration</li>\n";
|
foreach($alterations as $alteration) echo "<li>$alteration</li>\n";
|
||||||
echo "</ol>\n";
|
echo "</ol>\n";
|
||||||
|
@ -1647,10 +1648,8 @@ function make_db_current() {
|
||||||
*
|
*
|
||||||
* @since 1.5.0
|
* @since 1.5.0
|
||||||
*/
|
*/
|
||||||
function make_db_current_silent() {
|
function make_db_current_silent( $tables = 'all' ) {
|
||||||
global $wp_queries;
|
$alterations = dbDelta( $tables );
|
||||||
|
|
||||||
$alterations = dbDelta($wp_queries);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1932,102 +1931,6 @@ function pre_schema_upgrade() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Install Network.
|
|
||||||
*
|
|
||||||
* @since 3.0.0
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
if ( !function_exists( 'install_network' ) ) :
|
|
||||||
function install_network() {
|
|
||||||
global $wpdb, $charset_collate;
|
|
||||||
$ms_queries = "
|
|
||||||
CREATE TABLE $wpdb->users (
|
|
||||||
ID bigint(20) unsigned NOT NULL auto_increment,
|
|
||||||
user_login varchar(60) NOT NULL default '',
|
|
||||||
user_pass varchar(64) 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(60) 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)
|
|
||||||
) $charset_collate;
|
|
||||||
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 enum('0','1') 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)
|
|
||||||
) $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)
|
|
||||||
) $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,path)
|
|
||||||
) $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),
|
|
||||||
KEY site_id (site_id)
|
|
||||||
) $charset_collate;
|
|
||||||
CREATE TABLE $wpdb->signups (
|
|
||||||
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,
|
|
||||||
KEY activation_key (activation_key),
|
|
||||||
KEY domain (domain)
|
|
||||||
) $charset_collate;
|
|
||||||
";
|
|
||||||
// now create tables
|
|
||||||
dbDelta( $ms_queries );
|
|
||||||
}
|
|
||||||
endif;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Install global terms.
|
* Install global terms.
|
||||||
*
|
*
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
* @subpackage Administration
|
* @subpackage Administration
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define( 'WP_NETWORK_ADMIN_PAGE', true );
|
define( 'WP_INSTALLING_NETWORK', true );
|
||||||
|
|
||||||
/** WordPress Administration Bootstrap */
|
/** WordPress Administration Bootstrap */
|
||||||
require_once( './admin.php' );
|
require_once( './admin.php' );
|
||||||
|
|
|
@ -382,7 +382,7 @@ function load_default_textdomain() {
|
||||||
|
|
||||||
load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" );
|
load_textdomain( 'default', WP_LANG_DIR . "/$locale.mo" );
|
||||||
|
|
||||||
if ( is_multisite() || ( defined( 'WP_NETWORK_ADMIN_PAGE' ) && WP_NETWORK_ADMIN_PAGE ) ) {
|
if ( is_multisite() || ( defined( 'WP_INSTALLING_NETWORK' ) && WP_INSTALLING_NETWORK ) ) {
|
||||||
load_textdomain( 'default', WP_LANG_DIR . "/ms-$locale.mo" );
|
load_textdomain( 'default', WP_LANG_DIR . "/ms-$locale.mo" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1172,7 +1172,7 @@ function install_blog($blog_id, $blog_title = '') {
|
||||||
$url = get_blogaddress_by_id($blog_id);
|
$url = get_blogaddress_by_id($blog_id);
|
||||||
|
|
||||||
// Set everything up
|
// Set everything up
|
||||||
make_db_current_silent();
|
make_db_current_silent( 'blog' );
|
||||||
populate_options();
|
populate_options();
|
||||||
populate_roles();
|
populate_roles();
|
||||||
$wp_roles->_init();
|
$wp_roles->_init();
|
||||||
|
|
Loading…
Reference in New Issue