X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/f9001779751f83dc8a10e478bfecb4d8dd5f964c..899389d1e4043331309c0433543419258b230b60:/wp-admin/includes/upgrade.php
diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php
index f29f594e..495d5b43 100644
--- a/wp-admin/includes/upgrade.php
+++ b/wp-admin/includes/upgrade.php
@@ -2,7 +2,7 @@
/**
* WordPress Upgrade API
*
- * Most of the functions are pluggable and can be overwritten
+ * Most of the functions are pluggable and can be overwritten.
*
* @package WordPress
* @subpackage Administration
@@ -20,23 +20,23 @@ require_once(ABSPATH . 'wp-admin/includes/schema.php');
if ( !function_exists('wp_install') ) :
/**
- * Installs the blog
+ * Installs the site.
*
- * {@internal Missing Long Description}}
+ * Runs the required functions to set up and populate the database,
+ * including primary admin user and initial options.
*
* @since 2.1.0
*
- * @param string $blog_title Blog title.
- * @param string $user_name User's username.
- * @param string $user_email User's email.
- * @param bool $public Whether blog is public.
- * @param null $deprecated Optional. Not used.
- * @param string $user_password Optional. User's chosen password. Will default to a random password.
- * @return array Array keys 'url', 'user_id', 'password', 'password_message'.
+ * @param string $blog_title Blog title.
+ * @param string $user_name User's username.
+ * @param string $user_email User's email.
+ * @param bool $public Whether blog is public.
+ * @param string $deprecated Optional. Not used.
+ * @param string $user_password Optional. User's chosen password. Default empty (random password).
+ * @param string $language Optional. Language chosen. Default empty.
+ * @return array Array keys 'url', 'user_id', 'password', and 'password_message'.
*/
-function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated = '', $user_password = '' ) {
- global $wp_rewrite;
-
+function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated = '', $user_password = '', $language = '' ) {
if ( !empty( $deprecated ) )
_deprecated_argument( __FUNCTION__, '2.6' );
@@ -50,6 +50,10 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated
update_option('admin_email', $user_email);
update_option('blog_public', $public);
+ if ( $language ) {
+ update_option( 'WPLANG', $language );
+ }
+
$guessurl = wp_guess_url();
update_option('siteurl', $guessurl);
@@ -58,8 +62,10 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated
if ( ! $public )
update_option('default_pingback_flag', 0);
- // Create default user. If the user already exists, the user tables are
- // being shared among blogs. Just set the role in that case.
+ /*
+ * Create default user. If the user already exists, the user tables are
+ * being shared among blogs. Just set the role in that case.
+ */
$user_id = username_exists($user_name);
$user_password = trim($user_password);
$email_password = false;
@@ -69,12 +75,12 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated
$user_id = wp_create_user($user_name, $user_password, $user_email);
update_user_option($user_id, 'default_password_nag', true, true);
$email_password = true;
- } else if ( !$user_id ) {
+ } elseif ( ! $user_id ) {
// Password has been provided
$message = ''.__('Your chosen password.').'';
$user_id = wp_create_user($user_name, $user_password, $user_email);
} else {
- $message = __('User already exists. Password inherited.');
+ $message = __('User already exists. Password inherited.');
}
$user = new WP_User($user_id);
@@ -82,28 +88,40 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated
wp_install_defaults($user_id);
- $wp_rewrite->flush_rules();
+ wp_install_maybe_enable_pretty_permalinks();
+
+ flush_rewrite_rules();
wp_new_blog_notification($blog_title, $guessurl, $user_id, ($email_password ? $user_password : __('The password you chose during the install.') ) );
wp_cache_flush();
+ /**
+ * Fires after a site is fully installed.
+ *
+ * @since 3.9.0
+ *
+ * @param WP_User $user The site owner.
+ */
+ do_action( 'wp_install', $user );
+
return array('url' => $guessurl, 'user_id' => $user_id, 'password' => $user_password, 'password_message' => $message);
}
endif;
if ( !function_exists('wp_install_defaults') ) :
/**
- * {@internal Missing Short Description}}
+ * Creates the initial content for a newly-installed site.
*
- * {@internal Missing Long Description}}
+ * Adds the default "Uncategorized" category, the first post (with comment),
+ * first page, and default widgets for default theme for the current version.
*
* @since 2.1.0
*
* @param int $user_id User ID.
*/
-function wp_install_defaults($user_id) {
- global $wpdb, $wp_rewrite, $current_site, $table_prefix;
+function wp_install_defaults( $user_id ) {
+ global $wpdb, $wp_rewrite, $table_prefix;
// Default category
$cat_name = __('Uncategorized');
@@ -125,81 +143,19 @@ function wp_install_defaults($user_id) {
$wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $cat_id, 'taxonomy' => 'category', 'description' => '', 'parent' => 0, 'count' => 1));
$cat_tt_id = $wpdb->insert_id;
- // Default link category
- $cat_name = __('Blogroll');
- /* translators: Default link category slug */
- $cat_slug = sanitize_title(_x('Blogroll', 'Default link category slug'));
-
- if ( global_terms_enabled() ) {
- $blogroll_id = $wpdb->get_var( $wpdb->prepare( "SELECT cat_ID FROM {$wpdb->sitecategories} WHERE category_nicename = %s", $cat_slug ) );
- if ( $blogroll_id == null ) {
- $wpdb->insert( $wpdb->sitecategories, array('cat_ID' => 0, 'cat_name' => $cat_name, 'category_nicename' => $cat_slug, 'last_updated' => current_time('mysql', true)) );
- $blogroll_id = $wpdb->insert_id;
- }
- update_option('default_link_category', $blogroll_id);
- } else {
- $blogroll_id = 2;
- }
-
- $wpdb->insert( $wpdb->terms, array('term_id' => $blogroll_id, 'name' => $cat_name, 'slug' => $cat_slug, 'term_group' => 0) );
- $wpdb->insert( $wpdb->term_taxonomy, array('term_id' => $blogroll_id, 'taxonomy' => 'link_category', 'description' => '', 'parent' => 0, 'count' => 7));
- $blogroll_tt_id = $wpdb->insert_id;
-
- // Now drop in some default links
- $default_links = array();
- $default_links[] = array( 'link_url' => 'http://codex.wordpress.org/',
- 'link_name' => 'Documentation',
- 'link_rss' => '',
- 'link_notes' => '');
-
- $default_links[] = array( 'link_url' => 'http://wordpress.org/news/',
- 'link_name' => 'WordPress Blog',
- 'link_rss' => 'http://wordpress.org/news/feed/',
- 'link_notes' => '');
-
- $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/ideas/',
- 'link_name' => 'Suggest Ideas',
- 'link_rss' => '',
- 'link_notes' =>'');
-
- $default_links[] = array( 'link_url' => 'http://wordpress.org/support/',
- 'link_name' => 'Support Forum',
- 'link_rss' => '',
- 'link_notes' =>'');
-
- $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/plugins/',
- 'link_name' => 'Plugins',
- 'link_rss' => '',
- 'link_notes' =>'');
-
- $default_links[] = array( 'link_url' => 'http://wordpress.org/extend/themes/',
- 'link_name' => 'Themes',
- 'link_rss' => '',
- 'link_notes' =>'');
-
- $default_links[] = array( 'link_url' => 'http://planet.wordpress.org/',
- 'link_name' => 'WordPress Planet',
- 'link_rss' => '',
- 'link_notes' =>'');
-
- foreach ( $default_links as $link ) {
- $wpdb->insert( $wpdb->links, $link);
- $wpdb->insert( $wpdb->term_relationships, array('term_taxonomy_id' => $blogroll_tt_id, 'object_id' => $wpdb->insert_id) );
- }
-
// First post
- $now = date('Y-m-d H:i:s');
- $now_gmt = gmdate('Y-m-d H:i:s');
- $first_post_guid = get_option('home') . '/?p=1';
+ $now = current_time( 'mysql' );
+ $now_gmt = current_time( 'mysql', 1 );
+ $first_post_guid = get_option( 'home' ) . '/?p=1';
if ( is_multisite() ) {
$first_post = get_site_option( 'first_post' );
if ( empty($first_post) )
- $first_post = stripslashes( __( 'Welcome to SITE_NAME. This is your first post. Edit or delete it, then start blogging!' ) );
+ $first_post = __( 'Welcome to SITE_NAME. This is your first post. Edit or delete it, then start blogging!' );
$first_post = str_replace( "SITE_URL", esc_url( network_home_url() ), $first_post );
- $first_post = str_replace( "SITE_NAME", $current_site->site_name, $first_post );
+ $first_post = str_replace( "SITE_NAME", get_current_site()->site_name, $first_post );
} else {
$first_post = __('Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!');
}
@@ -225,8 +181,9 @@ function wp_install_defaults($user_id) {
// Default comment
$first_comment_author = __('Mr WordPress');
- $first_comment_url = 'http://wordpress.org/';
- $first_comment = __('Hi, this is a comment.
To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.');
+ $first_comment_url = 'https://wordpress.org/';
+ $first_comment = __('Hi, this is a comment.
+To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.');
if ( is_multisite() ) {
$first_comment_author = get_site_option( 'first_comment_author', $first_comment_author );
$first_comment_url = get_site_option( 'first_comment_url', network_home_url() );
@@ -249,7 +206,7 @@ function wp_install_defaults($user_id) {
...or something like this:
-
The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickies to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.+
The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!" ), admin_url() ); if ( is_multisite() ) @@ -281,7 +238,12 @@ As a new WordPress user, you should go to your dashboard to d update_option( 'widget_archives', array ( 2 => array ( 'title' => '', 'count' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); update_option( 'widget_categories', array ( 2 => array ( 'title' => '', 'count' => 0, 'hierarchical' => 0, 'dropdown' => 0 ), '_multiwidget' => 1 ) ); update_option( 'widget_meta', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) ); - update_option( 'sidebars_widgets', array ( 'wp_inactive_widgets' => array ( ), 'primary-widget-area' => array ( 0 => 'search-2', 1 => 'recent-posts-2', 2 => 'recent-comments-2', 3 => 'archives-2', 4 => 'categories-2', 5 => 'meta-2', ), 'secondary-widget-area' => array ( ), 'first-footer-widget-area' => array ( ), 'second-footer-widget-area' => array ( ), 'third-footer-widget-area' => array ( ), 'fourth-footer-widget-area' => array ( ), 'array_version' => 3 ) ); + update_option( 'sidebars_widgets', array ( 'wp_inactive_widgets' => array (), 'sidebar-1' => array ( 0 => 'search-2', 1 => 'recent-posts-2', 2 => 'recent-comments-2', 3 => 'archives-2', 4 => 'categories-2', 5 => 'meta-2', ), 'array_version' => 3 ) ); + + if ( ! is_multisite() ) + update_user_meta( $user_id, 'show_welcome_panel', 1 ); + elseif ( ! is_super_admin( $user_id ) && ! metadata_exists( 'user', $user_id, 'show_welcome_panel' ) ) + update_user_meta( $user_id, 'show_welcome_panel', 2 ); if ( is_multisite() ) { // Flush rules to pick up the new page. @@ -297,29 +259,105 @@ As a new WordPress user, you should go to your dashboard to d // Delete any caps that snuck into the previously active blog. (Hardcoded to blog 1 for now.) TODO: Get previous_blog_id. if ( !is_super_admin( $user_id ) && $user_id != 1 ) - $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $wpdb->base_prefix.'1_capabilities') ); + $wpdb->delete( $wpdb->usermeta, array( 'user_id' => $user_id , 'meta_key' => $wpdb->base_prefix.'1_capabilities' ) ); } } endif; +/** + * Maybe enable pretty permalinks on install. + * + * If after enabling pretty permalinks don't work, fallback to query-string permalinks. + * + * @since 4.2.0 + * + * @global WP_Rewrite $wp_rewrite WordPress rewrite component. + * + * @return bool Whether pretty permalinks are enabled. False otherwise. + */ +function wp_install_maybe_enable_pretty_permalinks() { + global $wp_rewrite; + + // Bail if a permalink structure is already enabled. + if ( get_option( 'permalink_structure' ) ) { + return true; + } + + /* + * The Permalink structures to attempt. + * + * The first is designed for mod_rewrite or nginx rewriting. + * + * The second is PATHINFO-based permalinks for web server configurations + * without a true rewrite module enabled. + */ + $permalink_structures = array( + '/%year%/%monthnum%/%day%/%postname%/', + '/index.php/%year%/%monthnum%/%day%/%postname%/' + ); + + foreach ( (array) $permalink_structures as $permalink_structure ) { + $wp_rewrite->set_permalink_structure( $permalink_structure ); + + /* + * Flush rules with the hard option to force refresh of the web-server's + * rewrite config file (e.g. .htaccess or web.config). + */ + $wp_rewrite->flush_rules( true ); + + // Test against a real WordPress Post, or if none were created, a random 404 page. + $test_url = get_permalink( 1 ); + + if ( ! $test_url ) { + $test_url = home_url( '/wordpress-check-for-rewrites/' ); + } + + /* + * Send a request to the site, and check whether + * the 'x-pingback' header is returned as expected. + * + * Uses wp_remote_get() instead of wp_remote_head() because web servers + * can block head requests. + */ + $response = wp_remote_get( $test_url, array( 'timeout' => 5 ) ); + $x_pingback_header = wp_remote_retrieve_header( $response, 'x-pingback' ); + $pretty_permalinks = $x_pingback_header && $x_pingback_header === get_bloginfo( 'pingback_url' ); + + if ( $pretty_permalinks ) { + return true; + } + } + + /* + * If it makes it this far, pretty permalinks failed. + * Fallback to query-string permalinks. + */ + $wp_rewrite->set_permalink_structure( '' ); + $wp_rewrite->flush_rules( true ); + + return false; +} + if ( !function_exists('wp_new_blog_notification') ) : /** - * {@internal Missing Short Description}} + * Notifies the site admin that the setup is complete. * - * {@internal Missing Long Description}} + * Sends an email with wp_mail to the new administrator that the site setup is complete, + * and provides them with a record of their login credentials. * * @since 2.1.0 * * @param string $blog_title Blog title. - * @param string $blog_url Blog url. - * @param int $user_id User ID. - * @param string $password User's Password. + * @param string $blog_url Blog url. + * @param int $user_id User ID. + * @param string $password User's Password. */ function wp_new_blog_notification($blog_title, $blog_url, $user_id, $password) { - $user = new WP_User($user_id); + $user = new WP_User( $user_id ); $email = $user->user_email; $name = $user->user_login; - $message = sprintf(__("Your new WordPress site has been successfully set up at: + $login_url = wp_login_url(); + $message = sprintf( __( "Your new WordPress site has been successfully set up at: %1\$s @@ -327,12 +365,13 @@ You can log in to the administrator account with the following information: Username: %2\$s Password: %3\$s +Log in here: %4\$s We hope you enjoy your new site. Thanks! --The WordPress Team -http://wordpress.org/ -"), $blog_url, $name, $password); +https://wordpress.org/ +"), $blog_url, $name, $password, $login_url ); @wp_mail($email, __('New WordPress Site'), $message); } @@ -340,20 +379,20 @@ endif; if ( !function_exists('wp_upgrade') ) : /** - * Run WordPress Upgrade functions. + * Runs WordPress Upgrade functions. * - * {@internal Missing Long Description}} + * Upgrades the database if needed during a site update. * * @since 2.1.0 * - * @return null + * @return null If no update is necessary or site isn't completely installed, null. */ function wp_upgrade() { global $wp_current_db_version, $wp_db_version, $wpdb; $wp_current_db_version = __get_option('db_version'); - // We are up-to-date. Nothing to do. + // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; @@ -375,21 +414,34 @@ function wp_upgrade() { else $wpdb->query( "INSERT INTO {$wpdb->blog_versions} ( `blog_id` , `db_version` , `last_updated` ) VALUES ( '{$wpdb->blogid}', '{$wp_db_version}', NOW());" ); } + + /** + * Fires after a site is fully upgraded. + * + * @since 3.9.0 + * + * @param int $wp_db_version The new $wp_db_version. + * @param int $wp_current_db_version The old (current) $wp_db_version. + */ + do_action( 'wp_upgrade', $wp_db_version, $wp_current_db_version ); } endif; /** * Functions to be called in install and upgrade scripts. * - * {@internal Missing Long Description}} + * Contains conditional checks to determine which upgrade scripts to run, + * based on database version and WP version being updated-to. * * @since 1.0.1 + * + * @return null If no update is necessary, null. */ function upgrade_all() { - global $wp_current_db_version, $wp_db_version, $wp_rewrite; + global $wp_current_db_version, $wp_db_version; $wp_current_db_version = __get_option('db_version'); - // We are up-to-date. Nothing to do. + // We are up-to-date. Nothing to do. if ( $wp_db_version == $wp_current_db_version ) return; @@ -451,6 +503,38 @@ function upgrade_all() { if ( $wp_current_db_version < 15260 ) upgrade_300(); + if ( $wp_current_db_version < 19389 ) + upgrade_330(); + + if ( $wp_current_db_version < 20080 ) + upgrade_340(); + + if ( $wp_current_db_version < 22422 ) + upgrade_350(); + + if ( $wp_current_db_version < 25824 ) + upgrade_370(); + + if ( $wp_current_db_version < 26148 ) + upgrade_372(); + + if ( $wp_current_db_version < 26691 ) + upgrade_380(); + + if ( $wp_current_db_version < 29630 ) + upgrade_400(); + + // Don't harsh my mellow. upgrade_422() must be called before + // upgrade_420() to catch bad comments prior to any auto-expansion of + // MySQL column widths. + if ( $wp_current_db_version < 31534 ) + upgrade_422(); + + if ( $wp_current_db_version < 31351 ) + upgrade_420(); + + maybe_disable_link_manager(); + maybe_disable_automattic_widgets(); update_option( 'db_version', $wp_db_version ); @@ -480,16 +564,19 @@ function upgrade_100() { foreach ($categories as $category) { if ('' == $category->category_nicename) { $newtitle = sanitize_title($category->cat_name); - $wpdb>update( $wpdb->categories, array('category_nicename' => $newtitle), array('cat_ID' => $category->cat_ID) ); + $wpdb->update( $wpdb->categories, array('category_nicename' => $newtitle), array('cat_ID' => $category->cat_ID) ); } } - $wpdb->query("UPDATE $wpdb->options SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') - WHERE option_name LIKE 'links_rating_image%' - AND option_value LIKE 'wp-links/links-images/%'"); + $sql = "UPDATE $wpdb->options + SET option_value = REPLACE(option_value, 'wp-links/links-images/', 'wp-images/links/') + WHERE option_name LIKE %s + AND option_value LIKE %s"; + $wpdb->query( $wpdb->prepare( $sql, $wpdb->esc_like( 'links_rating_image' ) . '%', $wpdb->esc_like( 'wp-links/links-images/' ) . '%' ) ); $done_ids = $wpdb->get_results("SELECT DISTINCT post_id FROM $wpdb->post2cat"); if ($done_ids) : + $done_posts = array(); foreach ($done_ids as $done_id) : $done_posts[] = $done_id->post_id; endforeach; @@ -557,12 +644,12 @@ function upgrade_110() { $time_difference = $all_options->time_difference; - $server_time = time()+date('Z'); - $weblogger_time = $server_time + $time_difference*3600; + $server_time = time()+date('Z'); + $weblogger_time = $server_time + $time_difference * HOUR_IN_SECONDS; $gmt_time = time(); - $diff_gmt_server = ($gmt_time - $server_time) / 3600; - $diff_weblogger_server = ($weblogger_time - $server_time) / 3600; + $diff_gmt_server = ($gmt_time - $server_time) / HOUR_IN_SECONDS; + $diff_weblogger_server = ($weblogger_time - $server_time) / HOUR_IN_SECONDS; $diff_gmt_weblogger = $diff_gmt_server - $diff_weblogger_server; $gmt_offset = -$diff_gmt_weblogger; @@ -576,7 +663,7 @@ function upgrade_110() { if (!$got_gmt_fields) { - // Add or substract time to all dates, to get GMT dates + // Add or subtract time to all dates, to get GMT dates $add_hours = intval($diff_gmt_weblogger); $add_minutes = intval(60 * ($diff_gmt_weblogger - $add_hours)); $wpdb->query("UPDATE $wpdb->posts SET post_date_gmt = DATE_ADD(post_date, INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE)"); @@ -637,8 +724,10 @@ function upgrade_130() { $active_plugins = __get_option('active_plugins'); - // If plugins are not stored in an array, they're stored in the old - // newline separated format. Convert to new format. + /* + * If plugins are not stored in an array, they're stored in the old + * newline separated format. Convert to new format. + */ if ( !is_array( $active_plugins ) ) { $active_plugins = explode("\n", trim($active_plugins)); update_option('active_plugins', $active_plugins); @@ -683,23 +772,23 @@ function upgrade_160() { $users = $wpdb->get_results("SELECT * FROM $wpdb->users"); foreach ( $users as $user ) : if ( !empty( $user->user_firstname ) ) - update_user_meta( $user->ID, 'first_name', $wpdb->escape($user->user_firstname) ); + update_user_meta( $user->ID, 'first_name', wp_slash($user->user_firstname) ); if ( !empty( $user->user_lastname ) ) - update_user_meta( $user->ID, 'last_name', $wpdb->escape($user->user_lastname) ); + update_user_meta( $user->ID, 'last_name', wp_slash($user->user_lastname) ); if ( !empty( $user->user_nickname ) ) - update_user_meta( $user->ID, 'nickname', $wpdb->escape($user->user_nickname) ); + update_user_meta( $user->ID, 'nickname', wp_slash($user->user_nickname) ); if ( !empty( $user->user_level ) ) update_user_meta( $user->ID, $wpdb->prefix . 'user_level', $user->user_level ); if ( !empty( $user->user_icq ) ) - update_user_meta( $user->ID, 'icq', $wpdb->escape($user->user_icq) ); + update_user_meta( $user->ID, 'icq', wp_slash($user->user_icq) ); if ( !empty( $user->user_aim ) ) - update_user_meta( $user->ID, 'aim', $wpdb->escape($user->user_aim) ); + update_user_meta( $user->ID, 'aim', wp_slash($user->user_aim) ); if ( !empty( $user->user_msn ) ) - update_user_meta( $user->ID, 'msn', $wpdb->escape($user->user_msn) ); + update_user_meta( $user->ID, 'msn', wp_slash($user->user_msn) ); if ( !empty( $user->user_yim ) ) - update_user_meta( $user->ID, 'yim', $wpdb->escape($user->user_icq) ); + update_user_meta( $user->ID, 'yim', wp_slash($user->user_icq) ); if ( !empty( $user->user_description ) ) - update_user_meta( $user->ID, 'description', $wpdb->escape($user->user_description) ); + update_user_meta( $user->ID, 'description', wp_slash($user->user_description) ); if ( isset( $user->user_idmode ) ): $idmode = $user->user_idmode; @@ -728,14 +817,16 @@ function upgrade_160() { $wpdb->query("ALTER TABLE $wpdb->users DROP $old"); $wpdb->show_errors(); - // populate comment_count field of posts table + // Populate comment_count field of posts table. $comments = $wpdb->get_results( "SELECT comment_post_ID, COUNT(*) as c FROM $wpdb->comments WHERE comment_approved = '1' GROUP BY comment_post_ID" ); if ( is_array( $comments ) ) foreach ($comments as $comment) $wpdb->update( $wpdb->posts, array('comment_count' => $comment->c), array('ID' => $comment->comment_post_ID) ); - // Some alpha versions used a post status of object instead of attachment and put - // the mime type in post_type instead of post_mime_type. + /* + * Some alpha versions used a post status of object instead of attachment + * and put the mime type in post_type instead of post_mime_type. + */ if ( $wp_current_db_version > 2541 && $wp_current_db_version <= 3091 ) { $objects = $wpdb->get_results("SELECT ID, post_type FROM $wpdb->posts WHERE post_status = 'object'"); foreach ($objects as $object) { @@ -770,7 +861,7 @@ function upgrade_210() { if ( 'static' == $status ) { $status = 'publish'; $type = 'page'; - } else if ( 'attachment' == $status ) { + } elseif ( 'attachment' == $status ) { $status = 'inherit'; $type = 'attachment'; } @@ -890,10 +981,12 @@ function upgrade_230() { $wpdb->insert( $wpdb->term_relationships, array('object_id' => $post_id, 'term_taxonomy_id' => $tt_id) ); } - // < 3570 we used linkcategories. >= 3570 we used categories and link2cat. + // < 3570 we used linkcategories. >= 3570 we used categories and link2cat. if ( $wp_current_db_version < 3570 ) { - // Create link_category terms for link categories. Create a map of link cat IDs - // to link_category terms. + /* + * Create link_category terms for link categories. Create a map of link + * cat IDs to link_category terms. + */ $link_cat_id_map = array(); $default_link_cat = 0; $tt_ids = array(); @@ -901,7 +994,7 @@ function upgrade_230() { foreach ( $link_cats as $category) { $cat_id = (int) $category->cat_id; $term_id = 0; - $name = $wpdb->escape($category->cat_name); + $name = wp_slash($category->cat_name); $slug = sanitize_title($name); $term_group = 0; @@ -1001,7 +1094,7 @@ function upgrade_230_old_tables() { * @since 2.2.0 */ function upgrade_old_slugs() { - // upgrade people who were using the Redirect Old Slugs plugin + // Upgrade people who were using the Redirect Old Slugs plugin. global $wpdb; $wpdb->query("UPDATE $wpdb->postmeta SET meta_key = '_wp_old_slug' WHERE meta_key = 'old_slug'"); } @@ -1041,11 +1134,6 @@ function upgrade_260() { if ( $wp_current_db_version < 8000 ) populate_roles_260(); - - if ( $wp_current_db_version < 8201 ) { - update_option('enable_app', 1); - update_option('enable_xmlrpc', 1); - } } /** @@ -1122,38 +1210,318 @@ function upgrade_300() { if ( $wp_current_db_version < 14139 && is_multisite() && is_main_site() && ! defined( 'MULTISITE' ) && get_site_option( 'siteurl' ) === false ) add_site_option( 'siteurl', '' ); - // 3.0-alpha nav menu postmeta changes. can be removed before release. // r13802 - if ( $wp_current_db_version >= 13226 && $wp_current_db_version < 13974 ) - $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key IN( 'menu_type', 'object_id', 'menu_new_window', 'menu_link', '_menu_item_append', 'menu_item_append', 'menu_item_type', 'menu_item_object_id', 'menu_item_target', 'menu_item_classes', 'menu_item_xfn', 'menu_item_url' )" ); + // 3.0 screen options key name changes. + if ( is_main_site() && !defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) { + $sql = "DELETE FROM $wpdb->usermeta + WHERE meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key LIKE %s + OR meta_key = 'manageedittagscolumnshidden' + OR meta_key = 'managecategoriescolumnshidden' + OR meta_key = 'manageedit-tagscolumnshidden' + OR meta_key = 'manageeditcolumnshidden' + OR meta_key = 'categories_per_page' + OR meta_key = 'edit_tags_per_page'"; + $prefix = $wpdb->esc_like( $wpdb->base_prefix ); + $wpdb->query( $wpdb->prepare( $sql, + $prefix . '%' . $wpdb->esc_like( 'meta-box-hidden' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'closedpostboxes' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'manage-' ) . '%' . $wpdb->esc_like( '-columns-hidden' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'meta-box-order' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'metaboxorder' ) . '%', + $prefix . '%' . $wpdb->esc_like( 'screen_layout' ) . '%' + ) ); + } + +} - // 3.0-beta1 remove_user primitive->meta cap. can be removed before release. r13956 - if ( $wp_current_db_version >= 12751 && $wp_current_db_version < 13974 ) { - $role =& get_role( 'administrator' ); - if ( ! empty( $role ) ) - $role->remove_cap( 'remove_user' ); +/** + * Execute changes made in WordPress 3.3. + * + * @since 3.3.0 + */ +function upgrade_330() { + global $wp_current_db_version, $wpdb, $wp_registered_widgets, $sidebars_widgets; + + if ( $wp_current_db_version < 19061 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('show_admin_bar_admin', 'plugins_last_view')" ); } - // 3.0-beta1 nav menu postmeta changes. can be removed before release. r13974 - if ( $wp_current_db_version >= 13802 && $wp_current_db_version < 13974 ) - $wpdb->update( $wpdb->postmeta, array( 'meta_value' => '' ), array( 'meta_key' => '_menu_item_target', 'meta_value' => '_self' ) ); + if ( $wp_current_db_version >= 11548 ) + return; - // 3.0 screen options key name changes. - if ( is_main_site() && !defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) { - $prefix = like_escape($wpdb->base_prefix); - $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key LIKE '{$prefix}%meta-box-hidden%' OR meta_key LIKE '{$prefix}%closedpostboxes%' OR meta_key LIKE '{$prefix}%manage-%-columns-hidden%' OR meta_key LIKE '{$prefix}%meta-box-order%' OR meta_key LIKE '{$prefix}%metaboxorder%' OR meta_key LIKE '{$prefix}%screen_layout%' - OR meta_key = 'manageedittagscolumnshidden' OR meta_key='managecategoriescolumnshidden' OR meta_key = 'manageedit-tagscolumnshidden' OR meta_key = 'manageeditcolumnshidden' OR meta_key = 'categories_per_page' OR meta_key = 'edit_tags_per_page'" ); + $sidebars_widgets = get_option( 'sidebars_widgets', array() ); + $_sidebars_widgets = array(); + + if ( isset($sidebars_widgets['wp_inactive_widgets']) || empty($sidebars_widgets) ) + $sidebars_widgets['array_version'] = 3; + elseif ( !isset($sidebars_widgets['array_version']) ) + $sidebars_widgets['array_version'] = 1; + + switch ( $sidebars_widgets['array_version'] ) { + case 1 : + foreach ( (array) $sidebars_widgets as $index => $sidebar ) + if ( is_array($sidebar) ) + foreach ( (array) $sidebar as $i => $name ) { + $id = strtolower($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; + } + $id = sanitize_title($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; + } + + $found = false; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( strtolower($widget['name']) == strtolower($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } + } + + if ( $found ) + continue; + + unset($_sidebars_widgets[$index][$i]); + } + $_sidebars_widgets['array_version'] = 2; + $sidebars_widgets = $_sidebars_widgets; + unset($_sidebars_widgets); + + case 2 : + $sidebars_widgets = retrieve_widgets(); + $sidebars_widgets['array_version'] = 3; + update_option( 'sidebars_widgets', $sidebars_widgets ); + } +} + +/** + * Execute changes made in WordPress 3.4. + * + * @since 3.4.0 + */ +function upgrade_340() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 19798 ) { + $wpdb->hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->options DROP COLUMN blog_id" ); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 19799 ) { + $wpdb->hide_errors(); + $wpdb->query("ALTER TABLE $wpdb->comments DROP INDEX comment_approved"); + $wpdb->show_errors(); + } + + if ( $wp_current_db_version < 20022 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key = 'themes_last_view'" ); + } + + if ( $wp_current_db_version < 20080 ) { + if ( 'yes' == $wpdb->get_var( "SELECT autoload FROM $wpdb->options WHERE option_name = 'uninstall_plugins'" ) ) { + $uninstall_plugins = get_option( 'uninstall_plugins' ); + delete_option( 'uninstall_plugins' ); + add_option( 'uninstall_plugins', $uninstall_plugins, null, 'no' ); + } + } +} + +/** + * Execute changes made in WordPress 3.5. + * + * @since 3.5.0 + */ +function upgrade_350() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 22006 && $wpdb->get_var( "SELECT link_id FROM $wpdb->links LIMIT 1" ) ) + update_option( 'link_manager_enabled', 1 ); // Previously set to 0 by populate_options() + + if ( $wp_current_db_version < 21811 && is_main_site() && ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $meta_keys = array(); + foreach ( array_merge( get_post_types(), get_taxonomies() ) as $name ) { + if ( false !== strpos( $name, '-' ) ) + $meta_keys[] = 'edit_' . str_replace( '-', '_', $name ) . '_per_page'; + } + if ( $meta_keys ) { + $meta_keys = implode( "', '", $meta_keys ); + $wpdb->query( "DELETE FROM $wpdb->usermeta WHERE meta_key IN ('$meta_keys')" ); + } + } + + if ( $wp_current_db_version < 22422 && $term = get_term_by( 'slug', 'post-format-standard', 'post_format' ) ) + wp_delete_term( $term->term_id, 'post_format' ); +} + +/** + * Execute changes made in WordPress 3.7. + * + * @since 3.7.0 + */ +function upgrade_370() { + global $wp_current_db_version; + if ( $wp_current_db_version < 25824 ) + wp_clear_scheduled_hook( 'wp_auto_updates_maybe_update' ); +} + +/** + * Execute changes made in WordPress 3.7.2. + * + * @since 3.7.2 + * @since 3.8.0 + */ +function upgrade_372() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26148 ) + wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); +} + +/** + * Execute changes made in WordPress 3.8.0. + * + * @since 3.8.0 + */ +function upgrade_380() { + global $wp_current_db_version; + if ( $wp_current_db_version < 26691 ) { + deactivate_plugins( array( 'mp6/mp6.php' ), true ); + } +} + +/** + * Execute changes made in WordPress 4.0.0. + * + * @since 4.0.0 + */ +function upgrade_400() { + global $wp_current_db_version; + if ( $wp_current_db_version < 29630 ) { + if ( ! is_multisite() && false === get_option( 'WPLANG' ) ) { + if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && in_array( WPLANG, get_available_languages() ) ) { + update_option( 'WPLANG', WPLANG ); + } else { + update_option( 'WPLANG', '' ); + } + } + } +} + +/** + * Execute changes made in WordPress 4.2.0. + * + * @since 4.2.0 + */ +function upgrade_420() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 31351 && $wpdb->charset === 'utf8mb4' ) { + if ( is_multisite() ) { + $tables = $wpdb->tables( 'blog' ); + } else { + $tables = $wpdb->tables( 'all' ); + } + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } } +} + +/** + * Execute changes made in WordPress 4.2.1. + * + * @since 4.2.1 + */ +function upgrade_421() { +} + +/** + * Execute changes made in WordPress 4.2.2. + * + * @since 4.2.2 + */ +function upgrade_422() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 31534 ) { + $content_length = $wpdb->get_col_length( $wpdb->comments, 'comment_content' ); + + if ( is_wp_error( $content_length ) ) { + return; + } + + if ( false === $content_length ) { + $content_length = array( + 'type' => 'byte', + 'length' => 65535, + ); + } elseif ( ! is_array( $content_length ) ) { + $length = (int) $content_length > 0 ? (int) $content_length : 65535; + $content_length = array( + 'type' => 'byte', + 'length' => $length + ); + } + if ( 'byte' !== $content_length['type'] || 0 === $content_length['length'] ) { + // Sites with malformed DB schemas are on their own. + return; + } + + $allowed_length = intval( $content_length['length'] ) - 10; + + $comments = $wpdb->get_results( + "SELECT `comment_ID` FROM `{$wpdb->comments}` + WHERE `comment_date_gmt` > '2015-04-26' + AND LENGTH( `comment_content` ) >= {$allowed_length} + AND ( `comment_content` LIKE '%<%' OR `comment_content` LIKE '%>%' )" + ); + + foreach ( $comments as $comment ) { + wp_delete_comment( $comment->comment_ID, true ); + } + } } /** - * Execute network level changes + * Executes network-level upgrade routines. * * @since 3.0.0 */ function upgrade_network() { global $wp_current_db_version, $wpdb; - // 2.8 + + // Always. + if ( is_main_network() ) { + /* + * Deletes all expired transients. The multi-table delete syntax is used + * to delete the transient record from table a, and the corresponding + * transient_timeout record from table b. + */ + $time = time(); + $sql = "DELETE a, b FROM $wpdb->sitemeta a, $wpdb->sitemeta b + WHERE a.meta_key LIKE %s + AND a.meta_key NOT LIKE %s + AND b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) ) + AND b.meta_value < %d"; + $wpdb->query( $wpdb->prepare( $sql, $wpdb->esc_like( '_site_transient_' ) . '%', $wpdb->esc_like ( '_site_transient_timeout_' ) . '%', $time ) ); + } + + // 2.8. if ( $wp_current_db_version < 11549 ) { $wpmu_sitewide_plugins = get_site_option( 'wpmu_sitewide_plugins' ); $active_sitewide_plugins = get_site_option( 'active_sitewide_plugins' ); @@ -1181,19 +1549,96 @@ function upgrade_network() { $start += 20; } } + // 3.0 if ( $wp_current_db_version < 13576 ) update_site_option( 'global_terms_enabled', '1' ); -} -// The functions we use to actually do stuff + // 3.3 + if ( $wp_current_db_version < 19390 ) + update_site_option( 'initial_db_version', $wp_current_db_version ); + + if ( $wp_current_db_version < 19470 ) { + if ( false === get_site_option( 'active_sitewide_plugins' ) ) + update_site_option( 'active_sitewide_plugins', array() ); + } + + // 3.4 + if ( $wp_current_db_version < 20148 ) { + // 'allowedthemes' keys things by stylesheet. 'allowed_themes' keyed things by name. + $allowedthemes = get_site_option( 'allowedthemes' ); + $allowed_themes = get_site_option( 'allowed_themes' ); + if ( false === $allowedthemes && is_array( $allowed_themes ) && $allowed_themes ) { + $converted = array(); + $themes = wp_get_themes(); + foreach ( $themes as $stylesheet => $theme_data ) { + if ( isset( $allowed_themes[ $theme_data->get('Name') ] ) ) + $converted[ $stylesheet ] = true; + } + update_site_option( 'allowedthemes', $converted ); + delete_site_option( 'allowed_themes' ); + } + } + + // 3.5 + if ( $wp_current_db_version < 21823 ) + update_site_option( 'ms_files_rewriting', '1' ); + + // 3.5.2 + if ( $wp_current_db_version < 24448 ) { + $illegal_names = get_site_option( 'illegal_names' ); + if ( is_array( $illegal_names ) && count( $illegal_names ) === 1 ) { + $illegal_name = reset( $illegal_names ); + $illegal_names = explode( ' ', $illegal_name ); + update_site_option( 'illegal_names', $illegal_names ); + } + } + + // 4.2 + if ( $wp_current_db_version < 31351 && $wpdb->charset === 'utf8mb4' ) { + if ( ! ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) && DO_NOT_UPGRADE_GLOBAL_TABLES ) ) { + $wpdb->query( "ALTER TABLE $wpdb->usermeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->site DROP INDEX domain, ADD INDEX domain(domain(140),path(51))" ); + $wpdb->query( "ALTER TABLE $wpdb->sitemeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain_path, ADD INDEX domain_path(domain(140),path(51))" ); -// General + $tables = $wpdb->tables( 'global' ); + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } + } + + // 4.2.2 + if ( $wp_current_db_version < 31535 && 'utf8mb4' === $wpdb->charset ) { + if ( ! ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) && DO_NOT_UPGRADE_GLOBAL_TABLES ) ) { + $upgrade = false; + $indexes = $wpdb->get_results( "SHOW INDEXES FROM $wpdb->signups" ); + foreach( $indexes as $index ) { + if ( 'domain_path' == $index->Key_name && 'domain' == $index->Column_name && 140 != $index->Sub_part ) { + $upgrade = true; + break; + } + } + + if ( $upgrade ) { + $wpdb->query( "ALTER TABLE $wpdb->signups DROP INDEX domain_path, ADD INDEX domain_path(domain(140),path(51))" ); + } + } + } +} + +// +// General functions we use to actually do stuff +// /** - * {@internal Missing Short Description}} + * Creates a table in the database if it doesn't already exist. * - * {@internal Missing Long Description}} + * This method checks for an existing database and creates a new one if it's not + * already present. It doesn't rely on MySQL's "IF NOT EXISTS" statement, but chooses + * to query all tables first and then run the SQL statement creating the table. * * @since 1.0.0 * @@ -1203,20 +1648,25 @@ function upgrade_network() { */ function maybe_create_table($table_name, $create_ddl) { global $wpdb; - if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) + + $query = $wpdb->prepare( "SHOW TABLES LIKE %s", $wpdb->esc_like( $table_name ) ); + + if ( $wpdb->get_var( $query ) == $table_name ) { return true; - //didn't find it try to create it. - $q = $wpdb->query($create_ddl); - // we cannot directly tell that whether this succeeded! - if ( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name ) + } + + // Didn't find it try to create it.. + $wpdb->query($create_ddl); + + // We cannot directly tell that whether this succeeded! + if ( $wpdb->get_var( $query ) == $table_name ) { return true; + } return false; } /** - * {@internal Missing Short Description}} - * - * {@internal Missing Long Description}} + * Drops a specified index from a table. * * @since 1.0.1 * @@ -1237,9 +1687,7 @@ function drop_index($table, $index) { } /** - * {@internal Missing Short Description}} - * - * {@internal Missing Long Description}} + * Adds an index to a specified table. * * @since 1.0.1 * @@ -1255,22 +1703,27 @@ function add_clean_index($table, $index) { } /** - ** maybe_add_column() - ** Add column to db table if it doesn't exist. - ** Returns: true if already exists or on successful completion - ** false on error + * Adds column to a database table if it doesn't already exist. + * + * @since 1.3.0 + * + * @param string $table_name The table name to modify. + * @param string $column_name The column name to add to the table. + * @param string $create_ddl The SQL statement used to add the column. + * @return True if already exists or on successful completion, false on error. */ function maybe_add_column($table_name, $column_name, $create_ddl) { - global $wpdb, $debug; + global $wpdb; foreach ($wpdb->get_col("DESC $table_name", 0) as $column ) { - if ($debug) echo("checking $column == $column_name
\n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."
\n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."
{$table}:\n"; - } - //else echo "
Found index:".$index_string."
{$table}:\n"; - } + // For every index in the table. + foreach ($tableindices as $tableindex) { + + // Add the index to the index data array. + $keyname = $tableindex->Key_name; + $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part); + $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false; + } + + // For each actual index in the index array. + foreach ($index_ary as $index_name => $index_data) { + + // Build a create string to compare to the query. + $index_string = ''; + if ($index_name == 'PRIMARY') { + $index_string .= 'PRIMARY '; + } elseif ( $index_data['unique'] ) { + $index_string .= 'UNIQUE '; } + $index_string .= 'KEY '; + if ($index_name != 'PRIMARY') { + $index_string .= $index_name; + } + $index_columns = ''; + + // For each column in the index. + foreach ($index_data['columns'] as $column_data) { + if ($index_columns != '') $index_columns .= ','; - // For every remaining index specified for the table - foreach ( (array) $indices as $index ) { - // Push a query line into $cqueries that adds the index to that table - $cqueries[] = "ALTER TABLE {$table} ADD $index"; - $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index; + // Add the field to the column list string. + $index_columns .= $column_data['fieldname']; + if ($column_data['subpart'] != '') { + $index_columns .= '('.$column_data['subpart'].')'; + } } - // Remove the original table creation query from processing - unset($cqueries[strtolower($table)]); - unset($for_update[strtolower($table)]); - } else { - // This table exists in the database, but not in the creation queries? + // The alternative index string doesn't care about subparts + $alt_index_columns = preg_replace( '/\([^)]*\)/', '', $index_columns ); + + // Add the column list to the index create string. + $index_strings = array( + "$index_string ($index_columns)", + "$index_string ($alt_index_columns)", + ); + + foreach( $index_strings as $index_string ) { + if ( ! ( ( $aindex = array_search( $index_string, $indices ) ) === false ) ) { + unset( $indices[ $aindex ] ); + break; + // todo: Remove this? + //echo "
Did not find index:".$index_string."
".print_r($indices, true)."
{$table}:\n"; + } + } + // todo: Remove this? + //else echo "
Found index:".$index_string."
{$table}:\n"; } } + + // For every remaining index specified for the table. + foreach ( (array) $indices as $index ) { + // Push a query line into $cqueries that adds the index to that table. + $cqueries[] = "ALTER TABLE {$table} ADD $index"; + $for_update[] = 'Added index ' . $table . ' ' . $index; + } + + // Remove the original table creation query from processing. + unset( $cqueries[ $table ], $for_update[ $table ] ); } $allqueries = array_merge($cqueries, $iqueries); if ($execute) { foreach ($allqueries as $query) { + // todo: Remove this? //echo "
Did not find index:".$index_string."
".print_r($indices, true)."
".print_r($query, true)."\n"; $wpdb->query($query); } @@ -1571,44 +2107,50 @@ function dbDelta($queries, $execute = true) { } /** - * {@internal Missing Short Description}} + * Updates the database tables to a new schema. * - * {@internal Missing Long Description}} + * By default, updates all the tables to use the latest defined schema, but can also + * be used to update a specific set of tables in wp_get_db_schema(). * * @since 1.5.0 + * + * @uses dbDelta + * + * @param string $tables Optional. Which set of tables to update. Default is 'all'. */ -function make_db_current() { - global $wp_queries; - - $alterations = dbDelta($wp_queries); +function make_db_current( $tables = 'all' ) { + $alterations = dbDelta( $tables ); echo "