Index: wp-includes/ms-functions.php =================================================================== --- wp-includes/ms-functions.php (revision 21496) +++ wp-includes/ms-functions.php (working copy) @@ -973,21 +973,20 @@ if ( ! $blog_id = insert_blog($domain, $path, $site_id) ) return new WP_Error('insert_blog', __('Could not create site.')); - switch_to_blog($blog_id); - install_blog($blog_id, $title); - wp_install_defaults($user_id); + switch_to_blog( $blog_id ); + install_blog( $blog_id, $title ); + wp_install_defaults( $user_id ); - add_user_to_blog($blog_id, $user_id, 'administrator'); + add_user_to_blog( $blog_id, $user_id, 'administrator' ); - if ( is_array($meta) ) foreach ($meta as $key => $value) { - if ( $key == 'public' || $key == 'archived' || $key == 'mature' || $key == 'spam' || $key == 'deleted' || $key == 'lang_id' ) + if ( is_array( $meta ) ) foreach ( $meta as $key => $value ) { + if ( in_array( $key, array( 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id' ) ) ) update_blog_status( $blog_id, $key, $value ); else update_option( $key, $value ); } - add_option( 'WPLANG', get_site_option( 'WPLANG' ) ); - update_option( 'blog_public', (int)$meta['public'] ); + update_option( 'blog_public', (int) $meta['public'] ); if ( ! is_super_admin( $user_id ) && ! get_user_meta( $user_id, 'primary_blog', true ) ) update_user_meta( $user_id, 'primary_blog', $blog_id ); @@ -1128,7 +1127,7 @@ * @param int $blog_id The value returned by insert_blog(). * @param string $blog_title The title of the new site. */ -function install_blog($blog_id, $blog_title = '') { +function install_blog( $blog_id, $blog_title = '') { global $wpdb, $table_prefix, $wp_roles; $wpdb->suppress_errors(); @@ -1142,24 +1141,14 @@ $wpdb->suppress_errors(false); - $url = get_blogaddress_by_id($blog_id); - // Set everything up make_db_current_silent( 'blog' ); populate_options(); populate_roles(); $wp_roles->_init(); - $url = untrailingslashit( $url ); - // fix url. - update_option('siteurl', $url); - update_option('home', $url); - update_option('fileupload_url', $url . "/files" ); - update_option('upload_path', UPLOADBLOGSDIR . "/$blog_id/files"); - update_option('blogname', stripslashes( $blog_title ) ); - update_option('admin_email', ''); - $wpdb->update( $wpdb->options, array('option_value' => ''), array('option_name' => 'admin_email') ); - + update_option( 'blogname', stripslashes( $blog_title ) ); + // remove all perms $wpdb->delete( $wpdb->usermeta, array( 'meta_key' => $table_prefix.'user_level' ) ); Index: wp-admin/includes/upgrade.php =================================================================== --- wp-admin/includes/upgrade.php (revision 21496) +++ wp-admin/includes/upgrade.php (working copy) @@ -44,13 +44,13 @@ populate_options(); populate_roles(); - update_option('blogname', $blog_title); - update_option('admin_email', $user_email); - update_option('blog_public', $public); + update_option( 'blogname', $blog_title ); + update_option( 'admin_email', $user_email ); + update_option( 'blog_public', $public ); $guessurl = wp_guess_url(); - update_option('siteurl', $guessurl); + update_option( 'siteurl', $guessurl ); // If not a public blog, don't ping. if ( ! $public ) Index: wp-admin/includes/schema.php =================================================================== --- wp-admin/includes/schema.php (revision 21496) +++ wp-admin/includes/schema.php (working copy) @@ -323,215 +323,53 @@ * @uses $wp_db_version */ function populate_options() { - global $wpdb, $wp_db_version, $current_site, $wp_current_db_version; + global $wpdb; - $guessurl = wp_guess_url(); - - do_action('populate_options'); - - if ( ini_get('safe_mode') ) { - // Safe mode can break mkdir() so use a flat structure by default. - $uploads_use_yearmonth_folders = 0; - } else { - $uploads_use_yearmonth_folders = 1; - } - - $template = WP_DEFAULT_THEME; - // If default theme is a child theme, we need to get its template - $theme = wp_get_theme( $template ); - if ( ! $theme->errors() ) - $template = $theme->get_template(); - - $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 http://us3.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 = $offset_or_tz; - elseif ( $offset_or_tz && in_array( $offset_or_tz, timezone_identifiers_list() ) ) - $timezone_string = $offset_or_tz; - - $options = array( - 'siteurl' => $guessurl, - 'blogname' => __('My Site'), - /* translators: blog 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, - 'default_post_edit_rows' => 20, - 'posts_per_page' => 10, - /* translators: default date format, see http://php.net/date */ - 'date_format' => __('F j, Y'), - /* translators: default time format, see http://php.net/date */ - 'time_format' => __('g:i a'), - /* translators: links last updated date format, see http://php.net/date */ - 'links_updated_date_format' => __('F j, Y g:i a'), - 'links_recently_updated_prepend' => '', - 'links_recently_updated_append' => '', - 'links_recently_updated_time' => 120, - 'comment_moderation' => 0, - 'moderation_notify' => 1, - 'permalink_structure' => '', - 'gzipcompression' => 0, - 'hack_file' => 0, - 'blog_charset' => 'UTF-8', - 'moderation_keys' => '', - 'active_plugins' => array(), - 'home' => $guessurl, - 'category_base' => '', - 'ping_sites' => 'http://rpc.pingomatic.com/', - 'advanced_edit' => 0, - 'comment_max_links' => 2, - 'gmt_offset' => $gmt_offset, - - // 1.5 - 'default_email_category' => 1, - 'recently_edited' => '', - 'template' => $template, - 'stylesheet' => WP_DEFAULT_THEME, - 'comment_whitelist' => 1, - 'blacklist_keys' => '', - 'comment_registration' => 0, - 'html_type' => 'text/html', - - // 1.5.1 - 'use_trackback' => 0, - - // 2.0 - 'default_role' => 'subscriber', - 'db_version' => $wp_db_version, - - // 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.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.6 - 'avatar_default' => 'mystery', - 'enable_app' => 0, - 'enable_xmlrpc' => 0, - - // 2.7 - 'large_size_w' => 1024, - 'large_size_h' => 1024, - 'image_default_link_type' => 'file', - '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.9 - 'embed_autourls' => 1, - 'embed_size_w' => '', - 'embed_size_h' => 600, - - // 3.0 - 'page_for_posts' => 0, - 'page_on_front' => 0, - - // 3.1 - 'default_post_format' => 0, - ); - - // 3.3 - if ( ! is_multisite() ) { - $options['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: blog tagline */ - $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', 'uninstall_plugins' ); - $existing_options = $wpdb->get_col("SELECT option_name FROM $wpdb->options"); + $existing_options = $wpdb->get_col( "SELECT option_name FROM $wpdb->options" ); $insert = ''; - foreach ( $options as $option => $value ) { - if ( in_array($option, $existing_options) ) + foreach ( ms_default_options() as $option => $value ) { + if ( in_array( $option, $existing_options ) ) continue; - if ( in_array($option, $fat_options) ) - $autoload = 'no'; - else - $autoload = 'yes'; + + $autoload = in_array( $option, ms_fat_options() ) ? 'no' : 'yes'; - $option = $wpdb->escape($option); - if ( is_array($value) ) - $value = serialize($value); - $value = $wpdb->escape($value); - if ( !empty($insert) ) + $option = $wpdb->escape( $option ); + if ( is_array( $value ) ) + $value = serialize( $value ); + $value = $wpdb->escape( $value ); + if ( ! empty( $insert ) ) $insert .= ', '; $insert .= "('$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 ); // in case it is set, but blank, update "home" - if ( !__get_option('home') ) update_option('home', $guessurl); + if ( ! __get_option( 'home' ) ) + update_option( 'home', wp_guess_url() ); // 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', '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'); + $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', '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' ); foreach ( $unusedoptions as $option ) - delete_option($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)?$'" ); + + $url = untrailingslashit( get_blogaddress_by_id( $wpdb->blogid ) ); + // fix url. + update_option( 'siteurl', $url ); + update_option( 'home', $url ); + update_option( 'fileupload_url', $url . "/files" ); + update_option( 'upload_path', UPLOADBLOGSDIR . "/$blog_id/files" ); + update_option( 'admin_email', '' ); + // no, really, empty this value + $wpdb->update( $wpdb->options, array( 'option_value' => '' ), array( 'option_name' => 'admin_email' ) ); } /** Index: wp-admin/includes/ms.php =================================================================== --- wp-admin/includes/ms.php (revision 21496) +++ wp-admin/includes/ms.php (working copy) @@ -803,3 +803,199 @@ $count = get_blog_count(); return apply_filters( 'wp_is_large_network', $count > 10000, 'sites', $count ); } + +/** + * Return all of the default options for a multisite blog + * + * @global int $wp_db_version + * @global object $current_site + * @global int $wp_current_db_version + * @return array filtered options map + */ +function ms_default_options() { + global $wp_db_version, $current_site, $wp_current_db_version; + + $guessurl = wp_guess_url(); + + do_action( 'populate_options' ); + + if ( ini_get('safe_mode') ) { + // Safe mode can break mkdir() so use a flat structure by default. + $uploads_use_yearmonth_folders = 0; + } else { + $uploads_use_yearmonth_folders = 1; + } + + $template = WP_DEFAULT_THEME; + // If default theme is a child theme, we need to get its template + $theme = wp_get_theme( $template ); + if ( ! $theme->errors() ) + $template = $theme->get_template(); + + $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 http://us3.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 = $offset_or_tz; + elseif ( $offset_or_tz && in_array( $offset_or_tz, timezone_identifiers_list() ) ) + $timezone_string = $offset_or_tz; + + $options = array( + 'siteurl' => $guessurl, + 'blogname' => __('My Site'), + /* translators: blog 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, + 'default_post_edit_rows' => 20, + 'posts_per_page' => 10, + /* translators: default date format, see http://php.net/date */ + 'date_format' => __('F j, Y'), + /* translators: default time format, see http://php.net/date */ + 'time_format' => __('g:i a'), + /* translators: links last updated date format, see http://php.net/date */ + 'links_updated_date_format' => __('F j, Y g:i a'), + 'links_recently_updated_prepend' => '', + 'links_recently_updated_append' => '', + 'links_recently_updated_time' => 120, + 'comment_moderation' => 0, + 'moderation_notify' => 1, + 'permalink_structure' => '', + 'gzipcompression' => 0, + 'hack_file' => 0, + 'blog_charset' => 'UTF-8', + 'moderation_keys' => '', + 'active_plugins' => array(), + 'home' => $guessurl, + 'category_base' => '', + 'ping_sites' => 'http://rpc.pingomatic.com/', + 'advanced_edit' => 0, + 'comment_max_links' => 2, + 'gmt_offset' => $gmt_offset, + + // 1.5 + 'default_email_category' => 1, + 'recently_edited' => '', + 'template' => $template, + 'stylesheet' => WP_DEFAULT_THEME, + 'comment_whitelist' => 1, + 'blacklist_keys' => '', + 'comment_registration' => 0, + 'html_type' => 'text/html', + + // 1.5.1 + 'use_trackback' => 0, + + // 2.0 + 'default_role' => 'subscriber', + 'db_version' => $wp_db_version, + + // 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.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.6 + 'avatar_default' => 'mystery', + 'enable_app' => 0, + 'enable_xmlrpc' => 0, + + // 2.7 + 'large_size_w' => 1024, + 'large_size_h' => 1024, + 'image_default_link_type' => 'file', + '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.9 + 'embed_autourls' => 1, + 'embed_size_w' => '', + 'embed_size_h' => 600, + + // 3.0 + 'page_for_posts' => 0, + 'page_on_front' => 0, + + // 3.1 + 'default_post_format' => 0, + ); + + // 3.3 + if ( ! is_multisite() ) { + $options['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: blog tagline */ + $options[ 'blogdescription' ] = sprintf( __( 'Just another %s site' ), $current_site->site_name ); + $options[ 'permalink_structure' ] = '/%year%/%monthnum%/%day%/%postname%/'; + $options[ 'WPLANG' ] = get_site_option( 'WPLANG' ); + } + + return apply_filters( 'network_default_options', $options ); +} + +/** + * Returns a list of Multisite options that aren't autoloaded + * + * @return array filtered option names + */ +function ms_fat_options() { + $option_names = array( 'moderation_keys', 'recently_edited', 'blacklist_keys', 'uninstall_plugins' ); + return apply_filters( 'network_fat_options', $option_names ); +} \ No newline at end of file Index: wp-admin/network/site-settings.php =================================================================== --- wp-admin/network/site-settings.php (revision 21496) +++ wp-admin/network/site-settings.php (working copy) @@ -113,12 +113,32 @@