WordPress.org

Make WordPress Core

Ticket #10728: 10728.diff

File 10728.diff, 5.4 KB (added by ryan, 6 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