mirror of
https://github.com/WordPress/WordPress.git
synced 2025-01-03 15:08:10 +01:00
implement multisite schema, upgrade, See #11644
git-svn-id: http://svn.automattic.com/wordpress/trunk@12756 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
e52de33dc2
commit
fca602d414
26
wp-admin/includes/htaccess.ms
Normal file
26
wp-admin/includes/htaccess.ms
Normal file
@ -0,0 +1,26 @@
|
||||
RewriteEngine On
|
||||
RewriteBase BASE/
|
||||
|
||||
#uploaded files
|
||||
RewriteRule ^(.*/)?files/$ index.php [L]
|
||||
RewriteCond %{REQUEST_URI} !.*wp-content/plugins.*
|
||||
RewriteRule ^(.*/)?files/(.*) wp-content/blogs.php?file=$2 [L]
|
||||
|
||||
# add a trailing slash to /wp-admin
|
||||
RewriteCond %{REQUEST_URI} ^.*/wp-admin$
|
||||
RewriteRule ^(.+)$ $1/ [R=301,L]
|
||||
|
||||
RewriteCond %{REQUEST_FILENAME} -f [OR]
|
||||
RewriteCond %{REQUEST_FILENAME} -d
|
||||
RewriteRule . - [L]
|
||||
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L]
|
||||
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
|
||||
RewriteRule . index.php [L]
|
||||
|
||||
<IfModule mod_security.c>
|
||||
<Files async-upload.php>
|
||||
SecFilterEngine Off
|
||||
SecFilterScanPOST Off
|
||||
</Files>
|
||||
</IfModule>
|
||||
|
@ -317,6 +317,12 @@ function populate_options() {
|
||||
'embed_size_h' => 600,
|
||||
);
|
||||
|
||||
// 3.0 multisite
|
||||
if ( is_multisite() ) {
|
||||
$options[ 'blogdescription' ] = sprintf(__('Just another %s site'), $current_site->site_name );
|
||||
$options[ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/';
|
||||
}
|
||||
|
||||
// Set autoload to no for these options
|
||||
$fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' );
|
||||
|
||||
@ -606,4 +612,119 @@ function populate_roles_300() {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* populate network settings
|
||||
*
|
||||
* @since 3.0
|
||||
*
|
||||
* @param int $network_id id of network to populate
|
||||
*/
|
||||
function populate_network( $network_id = 1, $domain = '', $email = '', $site_name = '', $path = '/', $vhost = 'no' ) {
|
||||
global $wpdb, $current_site, $wp_version, $wp_db_version, $wp_rewrite;
|
||||
|
||||
//@todo: turn these checks into returned messages
|
||||
if( $domain == '' )
|
||||
die( 'You must provide a domain name!' );
|
||||
if( $site_name == '' )
|
||||
die( 'You must provide a site name!' );
|
||||
|
||||
// check for network collision
|
||||
$existing_network = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$wpdb->site} WHERE id = %d", $network_id ) );
|
||||
if( $existing_network == $network_id )
|
||||
die( 'That network already exists!' );
|
||||
|
||||
$site_user = get_user_by_email( $email );
|
||||
if( !$site_user )
|
||||
die( 'You must provide an email address!' );
|
||||
// set up site tables
|
||||
$template = get_option( 'template' );
|
||||
$stylesheet = get_option( 'stylesheet' );
|
||||
if ( $template != $stylesheet ) {
|
||||
$allowed_themes = array( $template, $stylesheet );
|
||||
} else {
|
||||
$allowed_themes = array( $stylesheet );
|
||||
}
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'site_name', %s)", $network_id, $site_name ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'admin_email', %s)", $network_id, $site_user->user_email ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'admin_user_id', %d)", $network_id, $site_user->ID ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'registration', 'none')", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->site." ( id, domain, path ) VALUES ( %d, %s, %s )", $network_id, $domain, $path ) );
|
||||
if ( !is_multisite() ) {
|
||||
$wpdb->query( "INSERT INTO " . $wpdb->sitecategories . " ( cat_ID, cat_name, category_nicename, last_updated ) VALUES (1, 'Uncategorized', 'uncategorized', NOW())" );
|
||||
$wpdb->query( "INSERT INTO " . $wpdb->sitecategories . " ( cat_ID, cat_name, category_nicename, last_updated ) VALUES (2, 'Blogroll', 'blogroll', NOW())" );
|
||||
}
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'upload_filetypes', 'jpg jpeg png gif mp3 mov avi wmv midi mid pdf' )", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'blog_upload_space', '10' )", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'fileupload_maxk', '1500' )", $network_id ) );
|
||||
if ( !is_multisite() ) {
|
||||
$site_admins = array( $site_user->user_login );
|
||||
$users = get_users_of_blog();
|
||||
if ( $users ) {
|
||||
foreach ( $users as $user ) {
|
||||
if ( is_super_admin( $user->ID ) && !in_array( $user->user_login, $site_admins ) ) {
|
||||
$site_admins[] = $user->user_login;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$site_admins = get_site_option( 'site_admins' );
|
||||
}
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'site_admins', '" . serialize( $site_admins ) . "' )", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'allowedthemes', '" . serialize( $allowed_themes ) . "' )", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'illegal_names', '" . serialize( array( "www", "web", "root", "admin", "main", "invite", "administrator" ) ) . "' )", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'wpmu_upgrade_site', '{$wp_db_version}')", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'welcome_email', 'Dear User,
|
||||
|
||||
Your new SITE_NAME blog has been successfully set up at:
|
||||
BLOG_URL
|
||||
|
||||
You can log in to the administrator account with the following information:
|
||||
Username: USERNAME
|
||||
Password: PASSWORD
|
||||
Login Here: BLOG_URLwp-login.php
|
||||
|
||||
We hope you enjoy your new blog.
|
||||
Thanks!
|
||||
|
||||
--The Team @ SITE_NAME')", $network_id ) );
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'first_post', 'Welcome to <a href=\"SITE_URL\">SITE_NAME</a>. This is your first post. Edit or delete it, then start blogging!' )", $network_id ) );
|
||||
$weblog_title = stripslashes( $_POST[ 'weblog_title' ] );
|
||||
|
||||
$current_site->domain = $domain;
|
||||
$current_site->path = $base;
|
||||
$current_site->site_name = ucfirst( $domain );
|
||||
|
||||
if ( !is_multisite() ) {
|
||||
$wpdb->query( $wpdb->prepare( "INSERT INTO {$wpdb->blogs} (site_id, domain, path) VALUES (%s, %s, %s)", $network_id, $domain, $path ) );
|
||||
update_usermeta( $site_user->ID, 'source_domain', $domain );
|
||||
update_usermeta( $site_user->ID, 'primary_blog', 1 );
|
||||
}
|
||||
|
||||
if( $vhost == 'yes' ) {
|
||||
update_option( 'permalink_structure', '/%year%/%monthnum%/%day%/%postname%/');
|
||||
} else {
|
||||
update_option( 'permalink_structure', '/blog/%year%/%monthnum%/%day%/%postname%/');
|
||||
}
|
||||
$wp_rewrite->flush_rules();
|
||||
|
||||
if ( $vhost == 'yes' ) {
|
||||
$vhost_ok = false;
|
||||
$hostname = substr( md5( time() ), 0, 6 ) . '.' . $domain; // Very random hostname!
|
||||
$page = wp_remote_get( 'http://' . $hostname, array( 'timeout' => 5, 'httpversion' => '1.1' ) );
|
||||
if( is_object( $page ) && is_wp_error( $page ) ) {
|
||||
foreach ( $page->get_error_messages() as $err )
|
||||
$errstr = $err;
|
||||
} elseif( $page[ 'response' ][ 'code' ] == 200 ) {
|
||||
$vhost_ok = true;
|
||||
}
|
||||
if( !$vhost_ok ) {
|
||||
$msg = "<h2>Warning! Wildcard DNS may not be configured correctly!</h2>";
|
||||
$msg .= "<p>To use the subdomain feature of WordPress MU you must have a wildcard entry in your dns. The installer attempted to contact a random hostname ($hostname) on your domain but failed. It returned this error message:<br /> <strong>$errstr</strong></p><p>From the README.txt:</p>";
|
||||
$msg .= "<p><blockquote> If you want to host blogs of the form http://blog.domain.tld/ where domain.tld is the domain name of your machine then you must add a wildcard record to your DNS records.<br />
|
||||
This usually means adding a '*' hostname record pointing at your webserver in your DNS configuration tool. Matt has a more detailed <a href='http://ma.tt/2003/10/10/wildcard-dns-and-sub-domains/'>explanation</a> on his blog. If you still have problems, these <a href='http://mu.wordpress.org/forums/tags/wildcard'>forum messages</a> may help.</blockquote></p>";
|
||||
$msg .= "<p>You can still use your site but any subdomain you create may not be accessible. This check is not foolproof so ignore if you know your dns is correct.</p>";
|
||||
}
|
||||
}
|
||||
return $msg;
|
||||
}
|
||||
?>
|
||||
|
@ -1713,4 +1713,108 @@ function pre_schema_upgrade() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Install Network.
|
||||
*
|
||||
* @since 3.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->sitecategories (
|
||||
cat_ID bigint(20) NOT NULL auto_increment,
|
||||
cat_name varchar(55) NOT NULL default '',
|
||||
category_nicename varchar(200) NOT NULL default '',
|
||||
last_updated timestamp NOT NULL,
|
||||
PRIMARY KEY (cat_ID),
|
||||
KEY category_nicename (category_nicename),
|
||||
KEY last_updated (last_updated)
|
||||
) $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;
|
||||
?>
|
||||
|
116
wp-admin/includes/wp-config.ms
Normal file
116
wp-admin/includes/wp-config.ms
Normal file
@ -0,0 +1,116 @@
|
||||
<?php
|
||||
/**
|
||||
* The base configuration of WordPress.
|
||||
*
|
||||
* This file has the following configurations: MySQL settings, Table Prefix,
|
||||
* Secret Keys, WordPress Language, and ABSPATH. You can find more information by
|
||||
* visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing
|
||||
* wp-config.php} Codex page. You can get the MySQL settings from your web host.
|
||||
*
|
||||
* This file is used by the wp-config.php creation script during the
|
||||
* installation.
|
||||
*
|
||||
* @package WordPress
|
||||
*/
|
||||
|
||||
// ** MySQL settings - You can get this info from your web host ** //
|
||||
/** The name of the database for WordPress */
|
||||
define('DB_NAME', 'wordpress');
|
||||
|
||||
/** MySQL database username */
|
||||
define('DB_USER', 'username');
|
||||
|
||||
/** MySQL database password */
|
||||
define('DB_PASSWORD', 'password');
|
||||
|
||||
/** MySQL hostname */
|
||||
define('DB_HOST', 'localhost');
|
||||
|
||||
/** Database Charset to use in creating database tables. */
|
||||
define('DB_CHARSET', 'utf8');
|
||||
|
||||
/** The Database Collate type. Don't change this if in doubt. */
|
||||
define('DB_COLLATE', '');
|
||||
|
||||
/** Network settings - added by the network settings installer */
|
||||
define('MULTISITE', true);
|
||||
define('VHOST', 'VHOSTSETTING');
|
||||
$base = 'BASE';
|
||||
define('DOMAIN_CURRENT_SITE', 'current_site_domain' );
|
||||
define('PATH_CURRENT_SITE', 'current_site_path' );
|
||||
define('SITE_ID_CURRENT_SITE', 1);
|
||||
define('BLOGID_CURRENT_SITE', '1' );
|
||||
|
||||
/* Uncomment to allow blog admins to edit their users. See http://trac.mu.wordpress.org/ticket/1169 */
|
||||
//define( "EDIT_ANY_USER", true );
|
||||
/* Uncomment to enable post by email options. See http://trac.mu.wordpress.org/ticket/1084 */
|
||||
//define( "POST_BY_EMAIL", true );
|
||||
|
||||
/**#@+
|
||||
* Authentication Unique Keys.
|
||||
*
|
||||
* Change these to different unique phrases!
|
||||
* You can generate these using the {@link http://api.wordpress.org/secret-key/1.1/wpmu/salt WordPress.org secret-key service}
|
||||
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
|
||||
*
|
||||
* @since 2.6.0
|
||||
*/
|
||||
define('AUTH_KEY', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_KEY', 'put your unique phrase here');
|
||||
define('LOGGED_IN_KEY', 'put your unique phrase here');
|
||||
define('NONCE_KEY', 'put your unique phrase here');
|
||||
define('AUTH_SALT', 'put your unique phrase here');
|
||||
define('LOGGED_IN_SALT', 'put your unique phrase here');
|
||||
define('SECURE_AUTH_SALT', 'put your unique phrase here');
|
||||
/**#@-*/
|
||||
|
||||
/**
|
||||
* WordPress Database Table prefix.
|
||||
*
|
||||
* You can have multiple installations in one database if you give each a unique
|
||||
* prefix. Only numbers, letters, and underscores please!
|
||||
*/
|
||||
$table_prefix = 'wp_';
|
||||
|
||||
/**
|
||||
* WordPress Localized Language, defaults to English.
|
||||
*
|
||||
* Change this to localize WordPress. A corresponding MO file for the chosen
|
||||
* language must be installed to wp-content/languages. For example, install
|
||||
* de.mo to wp-content/languages and set WPLANG to 'de' to enable German
|
||||
* language support.
|
||||
*/
|
||||
define ('WPLANG', '');
|
||||
|
||||
// double check $base
|
||||
if( $base == 'BASE' )
|
||||
die( 'Problem in wp-config.php - $base is set to BASE when it should be the path like "/" or "/blogs/"! Please fix it!' );
|
||||
|
||||
// uncomment this to enable WP_CONTENT_DIR/sunrise.php support
|
||||
//define( 'SUNRISE', 'on' );
|
||||
|
||||
// uncomment to move wp-content/blogs.dir to another relative path
|
||||
// remember to change WP_CONTENT too.
|
||||
// define( "UPLOADBLOGSDIR", "fileserver" );
|
||||
|
||||
// If VHOST is 'yes' uncomment and set this to a URL to redirect if a blog does not exist or is a 404 on the main blog. (Useful if signup is disabled)
|
||||
// For example, the browser will redirect to http://examples.com/ for the following: define( 'NOBLOGREDIRECT', 'http://example.com/' );
|
||||
// Set this value to %siteurl% to redirect to the root of the site
|
||||
// define( 'NOBLOGREDIRECT', '' );
|
||||
// On a directory based install you must use the theme 404 handler.
|
||||
|
||||
// Location of mu-plugins
|
||||
// define( 'WPMU_PLUGIN_DIR', '' );
|
||||
// define( 'WPMU_PLUGIN_URL', '' );
|
||||
// define( 'MUPLUGINDIR', 'wp-content/mu-plugins' );
|
||||
|
||||
define( "WP_USE_MULTIPLE_DB", false );
|
||||
|
||||
/* That's all, stop editing! Happy blogging. */
|
||||
|
||||
/** Absolute path to the WordPress directory. */
|
||||
if ( !defined('ABSPATH') )
|
||||
define('ABSPATH', dirname(__FILE__) . '/');
|
||||
|
||||
/** Sets up WordPress vars and included files. */
|
||||
require_once(ABSPATH . 'wp-settings.php');
|
Loading…
Reference in New Issue
Block a user