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
|
||||
*/
|
||||
|
||||
// Declare these as global in case schema.php is included from a function.
|
||||
global $wpdb, $wp_queries, $charset_collate;
|
||||
|
||||
/**
|
||||
* The database character collate.
|
||||
* @var string
|
||||
|
@ -16,16 +19,36 @@
|
|||
*/
|
||||
$charset_collate = '';
|
||||
|
||||
// Declare these as global in case schema.php is included from a function.
|
||||
global $wpdb, $wp_queries;
|
||||
|
||||
if ( ! empty($wpdb->charset) )
|
||||
if ( ! empty( $wpdb->charset ) )
|
||||
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
|
||||
if ( ! empty($wpdb->collate) )
|
||||
if ( ! empty( $wpdb->collate ) )
|
||||
$charset_collate .= " COLLATE $wpdb->collate";
|
||||
|
||||
/** Create WordPress database tables SQL */
|
||||
$wp_queries = "CREATE TABLE $wpdb->terms (
|
||||
/**
|
||||
* 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) )
|
||||
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
|
||||
if ( ! empty($wpdb->collate) )
|
||||
$charset_collate .= " COLLATE $wpdb->collate";
|
||||
|
||||
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 );
|
||||
|
||||
// Blog specific tables.
|
||||
$blog_tables = "CREATE TABLE $wpdb->terms (
|
||||
term_id bigint(20) unsigned NOT NULL auto_increment,
|
||||
name 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 post_parent (post_parent),
|
||||
KEY post_author (post_author)
|
||||
) $charset_collate;
|
||||
CREATE TABLE $wpdb->users (
|
||||
) $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(64) NOT NULL default '',
|
||||
|
@ -163,8 +188,29 @@ CREATE TABLE $wpdb->users (
|
|||
PRIMARY KEY (ID),
|
||||
KEY user_login_key (user_login),
|
||||
KEY user_nicename (user_nicename)
|
||||
) $charset_collate;
|
||||
CREATE TABLE $wpdb->usermeta (
|
||||
) $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(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,
|
||||
user_id bigint(20) unsigned NOT NULL default '0',
|
||||
meta_key varchar(255) default NULL,
|
||||
|
@ -172,8 +218,108 @@ CREATE TABLE $wpdb->usermeta (
|
|||
PRIMARY KEY (umeta_id),
|
||||
KEY user_id (user_id),
|
||||
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;";
|
||||
|
||||
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.
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
|
|
@ -1424,9 +1424,12 @@ function deslash($content) {
|
|||
* @param unknown_type $execute
|
||||
* @return unknown
|
||||
*/
|
||||
function dbDelta($queries, $execute = true) {
|
||||
function dbDelta( $queries = '', $execute = true ) {
|
||||
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
|
||||
if ( !is_array($queries) ) {
|
||||
$queries = explode( ';', $queries );
|
||||
|
@ -1631,10 +1634,8 @@ function dbDelta($queries, $execute = true) {
|
|||
*
|
||||
* @since 1.5.0
|
||||
*/
|
||||
function make_db_current() {
|
||||
global $wp_queries;
|
||||
|
||||
$alterations = dbDelta($wp_queries);
|
||||
function make_db_current( $tables = 'all' ) {
|
||||
$alterations = dbDelta( $tables );
|
||||
echo "<ol>\n";
|
||||
foreach($alterations as $alteration) echo "<li>$alteration</li>\n";
|
||||
echo "</ol>\n";
|
||||
|
@ -1647,10 +1648,8 @@ function make_db_current() {
|
|||
*
|
||||
* @since 1.5.0
|
||||
*/
|
||||
function make_db_current_silent() {
|
||||
global $wp_queries;
|
||||
|
||||
$alterations = dbDelta($wp_queries);
|
||||
function make_db_current_silent( $tables = 'all' ) {
|
||||
$alterations = dbDelta( $tables );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
* @subpackage Administration
|
||||
*/
|
||||
|
||||
define( 'WP_NETWORK_ADMIN_PAGE', true );
|
||||
define( 'WP_INSTALLING_NETWORK', true );
|
||||
|
||||
/** WordPress Administration Bootstrap */
|
||||
require_once( './admin.php' );
|
||||
|
|
|
@ -382,7 +382,7 @@ function load_default_textdomain() {
|
|||
|
||||
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" );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1172,7 +1172,7 @@ function install_blog($blog_id, $blog_title = '') {
|
|||
$url = get_blogaddress_by_id($blog_id);
|
||||
|
||||
// Set everything up
|
||||
make_db_current_silent();
|
||||
make_db_current_silent( 'blog' );
|
||||
populate_options();
|
||||
populate_roles();
|
||||
$wp_roles->_init();
|
||||
|
|
Loading…
Reference in New Issue