WordPress.org

Make WordPress Core

Ticket #5560: 5560.2.diff

File 5560.2.diff, 9.3 KB (added by ryan, 7 years ago)

update-core.php and maintenance mode

  • wp-settings.php

     
    107107if ( !defined('WP_CONTENT_DIR') ) 
    108108        define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); // no trailing slash, full paths only - WP_CONTENT_URL is defined further down 
    109109 
     110if ( file_exists(ABSPATH . '.maintenance') ) { 
     111        if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) { 
     112                require_once( WP_CONTENT_DIR . '/maintenance.php' ); 
     113                die(); 
     114        } 
     115 
     116        $protocol = $_SERVER["SERVER_PROTOCOL"]; 
     117        if ( 'HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol ) 
     118                $protocol = 'HTTP/1.0'; 
     119        header( "$protocol 503 Service Unavailable", true, 503 ); 
     120        header( 'Content-Type: text/html; charset=utf-8' ); 
     121?> 
     122<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
     123<html xmlns="http://www.w3.org/1999/xhtml"> 
     124<head> 
     125<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
     126        <title>Maintenance</title> 
     127 
     128</head> 
     129<body> 
     130        <h1>Briefly unavailable for scheduled maintenance. Check back in a minute.</h1> 
     131</body> 
     132</html> 
     133<?php 
     134die(); 
     135} 
     136 
    110137if ( !extension_loaded('mysql') && !file_exists(WP_CONTENT_DIR . '/db.php') ) 
    111138        die( /*WP_I18N_OLD_MYSQL*/'Your PHP installation appears to be missing the MySQL extension which is required by WordPress.'/*/WP_I18N_OLD_MYSQL*/ ); 
    112139 
  • wp-admin/includes/update-core.php

     
     1<?php 
     2 
     3function update_core($from, $to) { 
     4        global $wp_filesystem; 
     5 
     6        // Sanity check the unzipped distribution 
     7        apply_filters('update_feedback', __('Verifying the unpacked files')); 
     8        if ( !file_exists($from . '/wordpress/wp-settings.php') || !file_exists($from . '/wordpress/wp-admin/admin.php') || 
     9                !file_exists($from . '/wordpress/wp-includes/functions.php') ) { 
     10                $wp_filesystem->delete($from, true); 
     11                return new WP_Error('insane_distro', __('The update could not be unpacked') ); 
     12        } 
     13         
     14        apply_filters('update_feedback', __('Installing the latest version')); 
     15 
     16        // Create maintenance file to signal that we are upgrading 
     17        $maintenance_string = '<?php $upgrading = ' . time() . '; ?>'; 
     18        $maintenance_file = $to . '.maintenance'; 
     19        $wp_filesystem->delete($maintenance_file); 
     20        $wp_filesystem->put_contents($maintenance_file, $maintenance_string, 0644); 
     21 
     22        // Copy new versions of WP files into place. 
     23        $result = copy_dir($from . '/wordpress', $to); 
     24        if ( is_wp_error($result) ) { 
     25                $wp_filesystem->delete($maintenance_file); 
     26                //$wp_filesystem->delete($working_dir, true); //TODO: Uncomment? This DOES mean that the new files are available in the upgrade folder if it fails. 
     27                return $result; 
     28        } 
     29 
     30        // Might have to do upgrade in a separate step. 
     31        apply_filters('update_feedback', __('Upgrading database')); 
     32        // Get new db version 
     33        global $wp_db_version; 
     34        require (ABSPATH . WPINC . '/version.php'); 
     35        // Upgrade db 
     36        define('WP_INSTALLING', true); 
     37        require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
     38        wp_upgrade(); 
     39 
     40        // Remove working directory 
     41        $wp_filesystem->delete($from, true); 
     42 
     43        // Remove maintenance file, we're done. 
     44        $wp_filesystem->delete($maintenance_file); 
     45 
     46        // Force refresh of update information 
     47        delete_option('update_core'); 
     48} 
     49 
     50?> 
     51 No newline at end of file 
  • wp-admin/includes/file.php

    Property changes on: wp-admin/includes/update-core.php
    ___________________________________________________________________
    Name: svn:eol-style
       + native
    
     
    408408                                return new WP_Error('copy_failed', __('Could not copy file'), $to . $filename); 
    409409                        $wp_filesystem->chmod($to . $filename, 0644); 
    410410                } elseif ( 'd' == $fileinfo['type'] ) { 
    411                         if ( !$wp_filesystem->mkdir($to . $filename, 0755) ) 
    412                                 return new WP_Error('mkdir_failed', __('Could not create directory'), $to . $filename); 
     411                        if ( !$wp_filesystem->is_dir($to . $filename) ) { 
     412                                if ( !$wp_filesystem->mkdir($to . $filename, 0755) ) 
     413                                        return new WP_Error('mkdir_failed', __('Could not create directory'), $to . $filename); 
     414                        } 
    413415                        $result = copy_dir($from . $filename, $to . $filename); 
    414416                        if ( is_wp_error($result) ) 
    415417                                return $result; 
  • wp-admin/includes/update.php

     
    1515 
    1616        case 'upgrade' : 
    1717                if ( current_user_can('manage_options') ) { 
    18                         return sprintf( '| <strong>'.__( '<a href="%2$s">Get Version %3$s</a>' ).'</strong>', $GLOBALS['wp_version'], $cur->url, $cur->current ); 
     18                        return sprintf( '| <strong>'.__( '<a href="%1$s">Get Version %2$s</a>' ).'</strong>', wp_nonce_url('update.php?action=upgrade-core', 'upgrade-core'), $cur->current); 
    1919                        break; 
    2020                } 
    2121 
     
    188188        return  $folder . '/' . $pluginfiles[0]; 
    189189} 
    190190 
     191function wp_update_core($feedback = '') { 
     192        global $wp_filesystem; 
     193 
     194        if ( !empty($feedback) ) 
     195                add_filter('update_feedback', $feedback); 
     196 
     197        // Is an update available? 
     198        $current = get_option( 'update_core' ); 
     199        //if ( !isset( $current->response ) || $current->response != 'upgrade' ) 
     200        //      return new WP_Error('up_to_date', __('WordPress is at the latest version.')); 
     201 
     202        // Is a filesystem accessor setup? 
     203        if ( ! $wp_filesystem || ! is_object($wp_filesystem) ) 
     204                WP_Filesystem(); 
     205 
     206        if ( ! is_object($wp_filesystem) ) 
     207                return new WP_Error('fs_unavailable', __('Could not access filesystem.')); 
     208 
     209        if ( $wp_filesystem->errors->get_error_code() ) 
     210                return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors); 
     211 
     212        // Get the base WP folder 
     213        $wp_dir = $wp_filesystem->abspath(); 
     214        if ( empty($wp_dir) ) 
     215                return new WP_Error('fs_no_wp_dir', __('Unable to locate WordPress directory.')); 
     216 
     217        // And the same for the Content directory. 
     218        $content_dir = $wp_filesystem->wp_content_dir(); 
     219        if( empty($content_dir) ) 
     220                return new WP_Error('fs_no_content_dir', __('Unable to locate WordPress Content directory (wp-content).')); 
     221         
     222        $wp_dir = trailingslashit( $wp_dir ); 
     223        $content_dir = trailingslashit( $content_dir ); 
     224 
     225        // Get the URL to the zip file 
     226        //$package = "http://wordpress.org/wordpress-{$current->current}.zip"; 
     227        //$package = "http://wordpress.org/wordpress-2.6.zip"; 
     228        $package = "http://localhost/wordpress.zip"; 
     229 
     230        // Download the package 
     231        apply_filters('update_feedback', sprintf(__('Downloading update from %s'), $package)); 
     232        $download_file = download_url($package); 
     233 
     234        if ( is_wp_error($download_file) ) 
     235                return new WP_Error('download_failed', __('Download failed.'), $download_file->get_error_message()); 
     236 
     237        $working_dir = $content_dir . 'upgrade/core'; 
     238 
     239        // Clean up working directory 
     240        if ( $wp_filesystem->is_dir($working_dir) ) 
     241                $wp_filesystem->delete($working_dir, true); 
     242 
     243        apply_filters('update_feedback', __('Unpacking the update')); 
     244        // Unzip package to working directory 
     245        $result = unzip_file($download_file, $working_dir); 
     246 
     247        // Once extracted, delete the package 
     248        unlink($download_file); 
     249 
     250        if ( is_wp_error($result) ) { 
     251                $wp_filesystem->delete($working_dir, true); 
     252                return $result; 
     253        } 
     254 
     255        // Copy update-core.php from the new version into place. 
     256        /* if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) { 
     257                $wp_filesystem->delete($working_dir, true); 
     258                return $result; 
     259        } */ 
     260 
     261        require(ABSPATH . 'wp-admin/includes/update-core.php'); 
     262 
     263        return update_core($working_dir, $wp_dir); 
     264} 
     265 
    191266?> 
  • wp-admin/update.php

     
    4444        echo '</div>'; 
    4545} 
    4646 
     47function do_core_upgrade() { 
     48        global $wp_filesystem; 
     49 
     50        $url = wp_nonce_url("update.php?action=upgrade-core", "upgrade-core"); 
     51        if ( false === ($credentials = request_filesystem_credentials($url)) ) 
     52                return; 
     53 
     54        if ( ! WP_Filesystem($credentials) ) { 
     55                request_filesystem_credentials($url, '', true); //Failed to connect, Error and request again 
     56                return; 
     57        } 
     58 
     59        echo '<div class="wrap">'; 
     60        echo '<h2>' . __('Upgrade WordPress') . '</h2>'; 
     61        if ( $wp_filesystem->errors->get_error_code() ) { 
     62                foreach ( $wp_filesystem->errors->get_error_messages() as $message ) 
     63                        show_message($message); 
     64                echo '</div>'; 
     65                return; 
     66        } 
     67 
     68        $result = wp_update_core('show_message'); 
     69 
     70        if ( is_wp_error($result) ) { 
     71                show_message($result); 
     72                if ('up_to_date' != $result->get_error_code() ) 
     73                        show_message( __('Installation Failed') ); 
     74        } else { 
     75                show_message( __('WordPress upgraded successfully') );   
     76        } 
     77        echo '</div>'; 
     78} 
     79 
    4780if ( isset($_GET['action']) ) { 
    4881        $plugin = isset($_GET['plugin']) ? trim($_GET['plugin']) : ''; 
    4982 
     
    84117                        include(WP_PLUGIN_DIR . '/' . $plugin); 
    85118                } 
    86119                echo "</body></html>"; 
     120        } elseif ( 'upgrade-core' == $_GET['action'] ) { 
     121                //check_admin_referer('upgrade-core'); 
     122                $title = __('Upgrade WordPress'); 
     123                $parent_file = 'index.php'; 
     124                require_once('admin-header.php'); 
     125                do_core_upgrade(); 
     126                include('admin-footer.php'); 
    87127        } 
    88128} 
    89129