X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/9e77185fafaf4e60e2b73821e0e4b9b1a11fb85f..refs/tags/wordpress-4.2.3:/wp-admin/includes/upgrade.php diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php index 02dfe093..cb2188b4 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,20 +20,21 @@ 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. - * @param string $language Optional. Language chosen. - * @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 = '', $language = '' ) { if ( !empty( $deprecated ) ) @@ -74,7 +75,7 @@ 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); @@ -87,6 +88,8 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated wp_install_defaults($user_id); + 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.') ) ); @@ -108,9 +111,10 @@ 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 * @@ -140,9 +144,9 @@ function wp_install_defaults( $user_id ) { $cat_tt_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' ); @@ -234,7 +238,7 @@ 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 (), 'sidebar-1' => array ( 0 => 'search-2', 1 => 'recent-posts-2', 2 => 'recent-comments-2', 3 => 'archives-2', 4 => 'categories-2', 5 => 'meta-2', ), 'sidebar-2' => array (), 'sidebar-3' => 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 ); @@ -260,24 +264,100 @@ As a new WordPress user, you should go to your dashboard to d } 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 ); $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 @@ -285,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 https://wordpress.org/ -"), $blog_url, $name, $password); +"), $blog_url, $name, $password, $login_url ); @wp_mail($email, __('New WordPress Site'), $message); } @@ -298,13 +379,13 @@ 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; @@ -349,9 +430,12 @@ 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; @@ -440,6 +524,12 @@ function upgrade_all() { if ( $wp_current_db_version < 29630 ) upgrade_400(); + if ( $wp_current_db_version < 31534 ) + upgrade_422(); + + if ( $wp_current_db_version < 31536 ) + upgrade_423(); + maybe_disable_link_manager(); maybe_disable_automattic_widgets(); @@ -483,6 +573,7 @@ function upgrade_100() { $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; @@ -767,7 +858,7 @@ function upgrade_210() { if ( 'static' == $status ) { $status = 'publish'; $type = 'page'; - } else if ( 'attachment' == $status ) { + } elseif ( 'attachment' == $status ) { $status = 'inherit'; $type = 'attachment'; } @@ -1327,7 +1418,96 @@ function upgrade_400() { } /** - * Execute network level changes + * Execute changes made in WordPress 4.2.0. + * + * @since 4.2.0 + */ +function upgrade_420() { +} + +/** + * 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 changes made in WordPress 4.2.0. + * + * @since 4.2.3 + */ +function upgrade_423() { + global $wp_current_db_version, $wpdb; + + if ( $wp_current_db_version < 31536 && $wpdb->charset === 'utf8mb4' ) { + if ( is_multisite() ) { + $tables = $wpdb->tables( 'blog' ); + } else { + $tables = $wpdb->tables( 'all' ); + if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $global_tables = $wpdb->tables( 'global' ); + $tables = array_diff_assoc( $tables, $global_tables ); + } + } + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } +} + +/** + * Executes network-level upgrade routines. * * @since 3.0.0 */ @@ -1422,16 +1602,63 @@ function upgrade_network() { update_site_option( 'illegal_names', $illegal_names ); } } -} -// The functions we use to actually do stuff + // 4.2 + if ( $wp_current_db_version < 31351 && $wpdb->charset === 'utf8mb4' ) { + if ( ! defined( '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))" ); + + $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' ) ) { + $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))" ); + } + } + } + + // 4.2.3 + if ( $wp_current_db_version < 31536 && $wpdb->charset === 'utf8mb4' ) { + if ( ! defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) { + $tables = $wpdb->tables( 'global' ); + + foreach ( $tables as $table ) { + maybe_convert_table_to_utf8mb4( $table ); + } + } + } +} -// General +// +// 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 * @@ -1459,9 +1686,7 @@ function maybe_create_table($table_name, $create_ddl) { } /** - * {@internal Missing Short Description}} - * - * {@internal Missing Long Description}} + * Drops a specified index from a table. * * @since 1.0.1 * @@ -1482,9 +1707,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 * @@ -1500,10 +1723,14 @@ 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; @@ -1525,12 +1752,53 @@ function maybe_add_column($table_name, $column_name, $create_ddl) { return false; } +/** + * If a table only contains utf8 or utf8mb4 columns, convert it to utf8mb4. + * + * @since 4.2.0 + * + * @param string $table The table to convert. + * @return bool true if the table was converted, false if it wasn't. + */ +function maybe_convert_table_to_utf8mb4( $table ) { + global $wpdb; + + $results = $wpdb->get_results( "SHOW FULL COLUMNS FROM `$table`" ); + if ( ! $results ) { + return false; + } + + foreach ( $results as $column ) { + if ( $column->Collation ) { + list( $charset ) = explode( '_', $column->Collation ); + $charset = strtolower( $charset ); + if ( 'utf8' !== $charset && 'utf8mb4' !== $charset ) { + // Don't upgrade tables that have non-utf8 columns. + return false; + } + } + } + + $table_details = $wpdb->get_row( "SHOW TABLE STATUS LIKE '$table'" ); + if ( ! $table_details ) { + return false; + } + + list( $table_charset ) = explode( '_', $table_details->Collation ); + $table_charset = strtolower( $table_charset ); + if ( 'utf8mb4' === $table_charset ) { + return true; + } + + return $wpdb->query( "ALTER TABLE $table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci" ); +} + /** * Retrieve all options as it was for 1.2. * * @since 1.2.0 * - * @return array List of options. + * @return stdClass List of options. */ function get_alloptions_110() { global $wpdb; @@ -1546,8 +1814,9 @@ function get_alloptions_110() { } /** - * Version of get_option that is private to install/upgrade. + * Utility version of get_option that is private to install/upgrade. * + * @ignore * @since 1.5.1 * @access private * @@ -1575,14 +1844,12 @@ function __get_option($setting) { } /** - * {@internal Missing Short Description}} - * - * {@internal Missing Long Description}} + * Filters for content to remove unnecessary slashes. * * @since 1.5.0 * - * @param string $content - * @return string + * @param string $content The content to modify. + * @return string The de-slashed content. */ function deslash($content) { // Note: \\\ inside a regex denotes a single backslash. @@ -1606,15 +1873,18 @@ function deslash($content) { } /** - * {@internal Missing Short Description}} + * Modifies the database based on specified SQL statements. * - * {@internal Missing Long Description}} + * Useful for creating new tables and updating existing tables to a new structure. * * @since 1.5.0 * - * @param unknown_type $queries - * @param unknown_type $execute - * @return unknown + * @param string|array $queries Optional. The query to run. Can be multiple queries + * in an array, or a string of queries separated by + * semicolons. Default empty. + * @param bool $execute Optional. Whether or not to execute the query right away. + * Default true. + * @return array Strings containing the results of the various update queries. */ function dbDelta( $queries = '', $execute = true ) { global $wpdb; @@ -1643,14 +1913,14 @@ function dbDelta( $queries = '', $execute = true ) { // Create a tablename index for an array ($cqueries) of queries foreach($queries as $qry) { - if (preg_match("|CREATE TABLE ([^ ]*)|", $qry, $matches)) { + if ( preg_match( "|CREATE TABLE ([^ ]*)|", $qry, $matches ) ) { $cqueries[ trim( $matches[1], '`' ) ] = $qry; $for_update[$matches[1]] = 'Created table '.$matches[1]; - } else if (preg_match("|CREATE DATABASE ([^ ]*)|", $qry, $matches)) { - array_unshift($cqueries, $qry); - } else if (preg_match("|INSERT INTO ([^ ]*)|", $qry, $matches)) { + } elseif ( preg_match( "|CREATE DATABASE ([^ ]*)|", $qry, $matches ) ) { + array_unshift( $cqueries, $qry ); + } elseif ( preg_match( "|INSERT INTO ([^ ]*)|", $qry, $matches ) ) { $iqueries[] = $qry; - } else if (preg_match("|UPDATE ([^ ]*)|", $qry, $matches)) { + } elseif ( preg_match( "|UPDATE ([^ ]*)|", $qry, $matches ) ) { $iqueries[] = $qry; } else { // Unrecognized query type @@ -1784,7 +2054,7 @@ function dbDelta( $queries = '', $execute = true ) { if ($tableindices) { // Clear the index array. - unset($index_ary); + $index_ary = array(); // For every index in the table. foreach ($tableindices as $tableindex) { @@ -1802,7 +2072,7 @@ function dbDelta( $queries = '', $execute = true ) { $index_string = ''; if ($index_name == 'PRIMARY') { $index_string .= 'PRIMARY '; - } else if($index_data['unique']) { + } elseif ( $index_data['unique'] ) { $index_string .= 'UNIQUE '; } $index_string .= 'KEY '; @@ -1821,12 +2091,23 @@ function dbDelta( $queries = '', $execute = true ) { $index_columns .= '('.$column_data['subpart'].')'; } } + + // 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_string .= ' ('.$index_columns.')'; - if (!(($aindex = array_search($index_string, $indices)) === false)) { - unset($indices[$aindex]); - // todo: Remove this? - //echo "
{$table}:
Found index:".$index_string."
\n"; + $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 "
{$table}:
Found index:".$index_string."
\n"; + } } // todo: Remove this? //else echo "
{$table}:
Did not find index:".$index_string."
".print_r($indices, true)."
\n"; @@ -1857,11 +2138,16 @@ 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( $tables = 'all' ) { $alterations = dbDelta( $tables ); @@ -1871,26 +2157,31 @@ function make_db_current( $tables = 'all' ) { } /** - * {@internal Missing Short Description}} + * Updates the database tables to a new schema, but without displaying results. * - * {@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 + * + * @see make_db_current() + * + * @param string $tables Optional. Which set of tables to update. Default is 'all'. */ function make_db_current_silent( $tables = 'all' ) { dbDelta( $tables ); } /** - * {@internal Missing Short Description}} + * Creates a site theme from an existing theme. * * {@internal Missing Long Description}} * * @since 1.5.0 * - * @param unknown_type $theme_name - * @param unknown_type $template - * @return unknown + * @param string $theme_name The name of the theme. + * @param string $template The directory name of the theme. + * @return bool */ function make_site_theme_from_oldschool($theme_name, $template) { $home_path = get_home_path(); @@ -1965,15 +2256,15 @@ function make_site_theme_from_oldschool($theme_name, $template) { } /** - * {@internal Missing Short Description}} + * Creates a site theme from the default theme. * * {@internal Missing Long Description}} * * @since 1.5.0 * - * @param unknown_type $theme_name - * @param unknown_type $template - * @return unknown + * @param string $theme_name The name of the theme. + * @param string $template The directory name of the theme. + * @return null|false */ function make_site_theme_from_default($theme_name, $template) { $site_dir = WP_CONTENT_DIR . "/themes/$template"; @@ -2029,15 +2320,14 @@ function make_site_theme_from_default($theme_name, $template) { @closedir($images_dir); } -// Create a site theme from the default theme. /** - * {@internal Missing Short Description}} + * Creates a site theme. * * {@internal Missing Long Description}} * * @since 1.5.0 * - * @return unknown + * @return false|string */ function make_site_theme() { // Name the theme after the blog. @@ -2110,9 +2400,7 @@ function translate_level_to_role($level) { } /** - * {@internal Missing Short Description}} - * - * {@internal Missing Long Description}} + * Checks the version of the installed MySQL binary. * * @since 2.1.0 */ @@ -2141,7 +2429,7 @@ function maybe_disable_automattic_widgets() { } /** - * Disables the Link Manager on upgrade, if at the time of upgrade, no links exist in the DB. + * Disables the Link Manager on upgrade if, at the time of upgrade, no links exist in the DB. * * @since 3.5.0 */ @@ -2188,6 +2476,18 @@ function pre_schema_upgrade() { $wpdb->query( "ALTER TABLE $wpdb->blogs CHANGE COLUMN archived archived tinyint(2) NOT NULL default 0" ); } } + + // Upgrade versions prior to 4.2. + if ( $wp_current_db_version < 31351 ) { + if ( ! is_multisite() && ! defined( '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->terms DROP INDEX slug, ADD INDEX slug(slug(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->terms DROP INDEX name, ADD INDEX name(name(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->commentmeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->postmeta DROP INDEX meta_key, ADD INDEX meta_key(meta_key(191))" ); + $wpdb->query( "ALTER TABLE $wpdb->posts DROP INDEX post_name, ADD INDEX post_name(post_name(191))" ); + } } /**