Make WordPress Core

Changeset 12756


Ignore:
Timestamp:
01/19/2010 12:04:25 AM (17 years ago)
Author:
wpmuguru
Message:

implement multisite schema, upgrade, See #11644

Location:
trunk/wp-admin/includes
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/schema.php

    r12754 r12756  
    318318        );
    319319
     320        // 3.0 multisite
     321        if ( is_multisite() ) {
     322                 $options[ 'blogdescription' ] = sprintf(__('Just another %s site'), $current_site->site_name );
     323                 $options[ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/';
     324        }
     325
    320326        // Set autoload to no for these options
    321327        $fat_options = array( 'moderation_keys', 'recently_edited', 'blacklist_keys' );
    … …  
    607613}
    608614
     615/**
     616 * populate network settings
     617 *
     618 * @since 3.0
     619 *
     620 * @param int $network_id id of network to populate
     621 */
     622function populate_network( $network_id = 1, $domain = '', $email = '', $site_name = '', $path = '/', $vhost = 'no' ) {
     623        global $wpdb, $current_site, $wp_version, $wp_db_version, $wp_rewrite;
     624
     625        //@todo: turn these checks into returned messages
     626        if( $domain == '' )
     627                die( 'You must provide a domain name!' );
     628        if( $site_name == '' )
     629                die( 'You must provide a site name!' );
     630
     631        // check for network collision
     632        $existing_network = $wpdb->get_var( $wpdb->prepare( "SELECT id FROM {$wpdb->site} WHERE id = %d", $network_id ) );
     633        if( $existing_network == $network_id )
     634                die( 'That network already exists!' );
     635
     636        $site_user = get_user_by_email( $email );
     637        if( !$site_user )
     638                die( 'You must provide an email address!' );
     639        // set up site tables
     640        $template = get_option( 'template' );
     641        $stylesheet = get_option( 'stylesheet' );
     642        if ( $template != $stylesheet ) {
     643                $allowed_themes = array( $template, $stylesheet );
     644        } else {
     645                $allowed_themes = array( $stylesheet );
     646        }
     647        $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 ) );
     648        $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 ) );
     649        $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 ) );
     650        $wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'registration', 'none')", $network_id ) );
     651        $wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->site." ( id, domain, path ) VALUES ( %d, %s, %s )", $network_id, $domain, $path ) );
     652        if ( !is_multisite() ) {
     653                $wpdb->query( "INSERT INTO " . $wpdb->sitecategories . " ( cat_ID, cat_name, category_nicename, last_updated ) VALUES (1, 'Uncategorized', 'uncategorized', NOW())" );
     654                $wpdb->query( "INSERT INTO " . $wpdb->sitecategories . " ( cat_ID, cat_name, category_nicename, last_updated ) VALUES (2, 'Blogroll', 'blogroll', NOW())" );
     655        }
     656        $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 ) );
     657        $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 ) );
     658        $wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'fileupload_maxk', '1500' )", $network_id ) );
     659        if ( !is_multisite() ) {
     660                $site_admins = array( $site_user->user_login );
     661                $users = get_users_of_blog();
     662                if ( $users ) {
     663                        foreach ( $users as $user ) {
     664                                if ( is_super_admin( $user->ID ) && !in_array( $user->user_login, $site_admins ) ) {
     665                                        $site_admins[] = $user->user_login;
     666                                }
     667                        }
     668                }
     669        } else {
     670                $site_admins = get_site_option( 'site_admins' );
     671        }
     672        $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 ) );
     673        $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 ) );
     674        $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 ) );
     675        $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 ) );
     676        $wpdb->query( $wpdb->prepare( "INSERT INTO ".$wpdb->sitemeta." (meta_id, site_id, meta_key, meta_value) VALUES (NULL, %d, 'welcome_email', 'Dear User,
     677
     678Your new SITE_NAME blog has been successfully set up at:
     679BLOG_URL
     680
     681You can log in to the administrator account with the following information:
     682Username: USERNAME
     683Password: PASSWORD
     684Login Here: BLOG_URLwp-login.php
     685
     686We hope you enjoy your new blog.
     687Thanks!
     688
     689--The Team @ SITE_NAME')", $network_id ) );
     690        $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 ) );
     691        $weblog_title = stripslashes( $_POST[ 'weblog_title' ] );
     692
     693        $current_site->domain = $domain;
     694        $current_site->path = $base;
     695        $current_site->site_name = ucfirst( $domain );
     696
     697        if ( !is_multisite() ) {
     698                $wpdb->query( $wpdb->prepare( "INSERT INTO {$wpdb->blogs} (site_id, domain, path) VALUES (%s, %s, %s)", $network_id, $domain, $path ) );
     699                update_usermeta( $site_user->ID, 'source_domain', $domain );
     700                update_usermeta( $site_user->ID, 'primary_blog', 1 );
     701        }
     702
     703        if( $vhost == 'yes' ) {
     704                update_option( 'permalink_structure', '/%year%/%monthnum%/%day%/%postname%/');
     705        } else {
     706                update_option( 'permalink_structure', '/blog/%year%/%monthnum%/%day%/%postname%/');
     707        }
     708        $wp_rewrite->flush_rules();
     709
     710        if ( $vhost == 'yes' ) {
     711                $vhost_ok = false;
     712                $hostname = substr( md5( time() ), 0, 6 ) . '.' . $domain; // Very random hostname!
     713                $page = wp_remote_get( 'http://' . $hostname, array( 'timeout' => 5, 'httpversion' => '1.1' ) );
     714                if( is_object( $page ) && is_wp_error( $page ) ) {
     715                        foreach ( $page->get_error_messages() as $err )
     716                                $errstr = $err;
     717                } elseif( $page[ 'response' ][ 'code' ] == 200 ) {
     718                                $vhost_ok = true;
     719                }
     720                if( !$vhost_ok ) {
     721                        $msg = "<h2>Warning! Wildcard DNS may not be configured correctly!</h2>";
     722                        $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>";
     723                        $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 />
     724This 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>";
     725                        $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>";
     726                }
     727        }
     728        return $msg;
     729}
    609730?>
  • trunk/wp-admin/includes/upgrade.php

    r12753 r12756  
    17141714}
    17151715
     1716/**
     1717 * Install Network.
     1718 *
     1719 * @since 3.0
     1720 *
     1721 */
     1722if ( !function_exists( 'install_network' ) ) :
     1723function install_network() {
     1724        global $wpdb, $charset_collate;
     1725        $ms_queries = "
     1726CREATE TABLE $wpdb->users (
     1727  ID bigint(20) unsigned NOT NULL auto_increment,
     1728  user_login varchar(60) NOT NULL default '',
     1729  user_pass varchar(64) NOT NULL default '',
     1730  user_nicename varchar(50) NOT NULL default '',
     1731  user_email varchar(100) NOT NULL default '',
     1732  user_url varchar(100) NOT NULL default '',
     1733  user_registered datetime NOT NULL default '0000-00-00 00:00:00',
     1734  user_activation_key varchar(60) NOT NULL default '',
     1735  user_status int(11) NOT NULL default '0',
     1736  display_name varchar(250) NOT NULL default '',
     1737  spam tinyint(2) NOT NULL default '0',
     1738  deleted tinyint(2) NOT NULL default '0',
     1739  PRIMARY KEY  (ID),
     1740  KEY user_login_key (user_login),
     1741  KEY user_nicename (user_nicename)
     1742) $charset_collate;
     1743CREATE TABLE $wpdb->blogs (
     1744  blog_id bigint(20) NOT NULL auto_increment,
     1745  site_id bigint(20) NOT NULL default '0',
     1746  domain varchar(200) NOT NULL default '',
     1747  path varchar(100) NOT NULL default '',
     1748  registered datetime NOT NULL default '0000-00-00 00:00:00',
     1749  last_updated datetime NOT NULL default '0000-00-00 00:00:00',
     1750  public tinyint(2) NOT NULL default '1',
     1751  archived enum('0','1') NOT NULL default '0',
     1752  mature tinyint(2) NOT NULL default '0',
     1753  spam tinyint(2) NOT NULL default '0',
     1754  deleted tinyint(2) NOT NULL default '0',
     1755  lang_id int(11) NOT NULL default '0',
     1756  PRIMARY KEY  (blog_id),
     1757  KEY domain (domain(50),path(5)),
     1758  KEY lang_id (lang_id)
     1759) $charset_collate;
     1760CREATE TABLE $wpdb->blog_versions (
     1761  blog_id bigint(20) NOT NULL default '0',
     1762  db_version varchar(20) NOT NULL default '',
     1763  last_updated datetime NOT NULL default '0000-00-00 00:00:00',
     1764  PRIMARY KEY  (blog_id),
     1765  KEY db_version (db_version)
     1766) $charset_collate;
     1767CREATE TABLE $wpdb->registration_log (
     1768  ID bigint(20) NOT NULL auto_increment,
     1769  email varchar(255) NOT NULL default '',
     1770  IP varchar(30) NOT NULL default '',
     1771  blog_id bigint(20) NOT NULL default '0',
     1772  date_registered datetime NOT NULL default '0000-00-00 00:00:00',
     1773  PRIMARY KEY  (ID),
     1774  KEY IP (IP)
     1775) $charset_collate;
     1776CREATE TABLE $wpdb->site (
     1777  id bigint(20) NOT NULL auto_increment,
     1778  domain varchar(200) NOT NULL default '',
     1779  path varchar(100) NOT NULL default '',
     1780  PRIMARY KEY  (id),
     1781  KEY domain (domain,path)
     1782) $charset_collate;
     1783CREATE TABLE $wpdb->sitemeta (
     1784  meta_id bigint(20) NOT NULL auto_increment,
     1785  site_id bigint(20) NOT NULL default '0',
     1786  meta_key varchar(255) default NULL,
     1787  meta_value longtext,
     1788  PRIMARY KEY  (meta_id),
     1789  KEY meta_key (meta_key),
     1790  KEY site_id (site_id)
     1791) $charset_collate;
     1792CREATE TABLE $wpdb->sitecategories (
     1793  cat_ID bigint(20) NOT NULL auto_increment,
     1794  cat_name varchar(55) NOT NULL default '',
     1795  category_nicename varchar(200) NOT NULL default '',
     1796  last_updated timestamp NOT NULL,
     1797  PRIMARY KEY  (cat_ID),
     1798  KEY category_nicename (category_nicename),
     1799  KEY last_updated (last_updated)
     1800) $charset_collate;
     1801CREATE TABLE $wpdb->signups (
     1802  domain varchar(200) NOT NULL default '',
     1803  path varchar(100) NOT NULL default '',
     1804  title longtext NOT NULL,
     1805  user_login varchar(60) NOT NULL default '',
     1806  user_email varchar(100) NOT NULL default '',
     1807  registered datetime NOT NULL default '0000-00-00 00:00:00',
     1808  activated datetime NOT NULL default '0000-00-00 00:00:00',
     1809  active tinyint(1) NOT NULL default '0',
     1810  activation_key varchar(50) NOT NULL default '',
     1811  meta longtext,
     1812  KEY activation_key (activation_key),
     1813  KEY domain (domain)
     1814) $charset_collate;
     1815";
     1816// now create tables
     1817        dbDelta( $ms_queries );
     1818}
     1819endif;
    17161820?>
Note: See TracChangeset for help on using the changeset viewer.