WordPress.org

Make WordPress Core

Ticket #10728: 10728.diff

File 10728.diff, 5.4 KB (added by ryan, 9 years ago)
  • wp-includes/functions.php

     
    17711771        $installed = !empty( $installed );
    17721772        wp_cache_set( 'is_blog_installed', $installed );
    17731773
    1774         return $installed;
     1774        if ( $installed )
     1775                return true;
     1776
     1777        $suppress = $wpdb->suppress_errors();
     1778        $tables = $wpdb->get_col('SHOW TABLES');
     1779        $wpdb->suppress_errors( $suppress );
     1780
     1781        // Loop over the WP tables.  If none exist, then scratch install is allowed.
     1782        // If one or more exist, suggest table repair since we got here because the options
     1783        // table could not be accessed.
     1784        foreach ($wpdb->tables as $table) {
     1785                // If one of the WP tables exist, then we are in an insane state.
     1786                if ( in_array($wpdb->prefix . $table, $tables) ) {
     1787                        // If visiting repair.php, return true and let it take over.
     1788                        if ( defined('WP_REPAIRING') )
     1789                                return true;
     1790                        // Die with a DB error.
     1791                        $wpdb->error = __('One or more database tables are unavailable.  The database may need to be <a href="maint/repair.php?referrer=is_blog_installed">repaired</a>.');
     1792                        dead_db();
     1793                }
     1794        }
     1795
     1796        wp_cache_set( 'is_blog_installed', false );
     1797
     1798        return false;
    17751799}
    17761800
    17771801/**
  • wp-includes/wp-db.php

     
    255255                        'postmeta', 'terms', 'term_taxonomy', 'term_relationships');
    256256
    257257        /**
     258         * List of deprecated WordPress tables
     259         *
     260         * @since 2.9.0
     261         * @access private
     262         * @var array
     263         */
     264        var $old_tables = array('categories', 'post2cat', 'link2cat');
     265
     266       
     267        /**
    258268         * Format specifiers for DB columns. Columns not listed here default to %s.  Initialized in wp-settings.php.
    259269         *
    260270         * Keys are colmn names, values are format types: 'ID' => '%d'
  • wp-admin/maint/repair.php

     
     1<?php
     2
     3define('WP_REPAIRING', true);
     4
     5require_once('../../wp-load.php');
     6
     7header( 'Content-Type: text/html; charset=utf-8' );
     8?>
     9<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     10<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
     11<head>
     12        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     13        <title><?php _e('WordPress &rsaquo; Database Repair'); ?></title>
     14        <?php wp_admin_css( 'install', true ); ?>
     15</head>
     16<body>
     17<h1 id="logo"><img alt="WordPress" src="../images/wordpress-logo.png" /></h1>
     18
     19<?php
     20
     21if ( !defined('REPAIR') ) {
     22        _e("<p>To allow use of this page to automatically repair database problems, please add the following line to your wp-config.php file.  Once this line is added to your config, reload this page.</p><code>define('REPAIR', true);</code>");
     23} elseif ( isset($_GET['repair']) ) {
     24        $problems = array();
     25        check_admin_referer('repair_db');
     26
     27        // Loop over the WP tables, checking and repairing as needed.
     28        foreach ($wpdb->tables as $table) {
     29                if ( in_array($table, $wpdb->old_tables) )
     30                        continue;
     31
     32                $check = $wpdb->get_row("CHECK TABLE {$wpdb->prefix}$table");
     33                if ( 'OK' == $check->Msg_text ) {
     34                        echo "<p>The {$wpdb->prefix}$table table is okay.</p>";
     35                } else {
     36                        echo "<p>The {$wpdb->prefix}$table table is not okay. It is reporting the following error: <code>$check->Msg_text</code>.  WordPress will attempt to repair this table&hellip;<br/>";
     37                        $repair = $wpdb->get_row("REPAIR TABLE {$wpb->prefix}$table");
     38                        if ( 'OK' == $check->Msg_text ) {
     39                                echo "&nbsp;&nbsp;&nbsp;&nbsp;Sucessfully repaired the {$wpb->prefix}$table table.<br />";
     40                        } else {
     41                                echo "&nbsp;&nbsp;&nbsp;&nbsp;Failed to repair the {$wpdb->prefix}$table table. Error: $check->Msg_text<br />";
     42                                $problems["{$wpdb->prefix}$table"] = $check->Msg_text;
     43                        }
     44                }
     45        }
     46
     47        if ( !empty($problems) ) {
     48                printf(__('<p>Some database problems could not be repaired. Please copy-and-paste the following list of errors to the <a href="%s">WordPress support forums</a> to get additional assistance.</p>'), 'http://wordpress.org/support/forum/3');
     49                $problem_output = array();
     50                foreach ( $problems as $table => $problem )
     51                        $problem_output[] = "$table: $problem";
     52                echo '<textarea name="errors" id="errors" rows="20" cols="60">' . format_to_edit(implode("\n", $problem_output)) . '</textarea>';
     53        } else {
     54                _e("<p>Repairs complete.  Please remove the following line from wp-config.php to prevent this page from being used by unauthorized users.</p><code>define('REPAIR', true);</code>");
     55        }
     56} else {
     57        if ( isset($_GET['referrer']) && 'is_blog_installed' == $_GET['referrer'] )
     58                _e('One or more database tables is unavailable.  To allow WordPress to attempt to repair these tables, press the "Repair Database" button. Repairing can take awhile, so please be patient.');
     59        else
     60                _e('WordPress can automatically look for some common database problems and repair them.  Repairing can take awhile, so please be patient.')
     61?>
     62        <p class="step"><a class="button" href="<?php echo wp_nonce_url('repair.php?repair=1', 'repair_db') ?>"><?php _e( 'Repair Database' ); ?></a></p>
     63<?php
     64}
     65
     66?>
     67</body>
     68</html>
     69 No newline at end of file