Make WordPress Core

Changeset 8595


Ignore:
Timestamp:
08/08/2008 10:49:35 PM (15 years ago)
Author:
ryan
Message:

Automatic upgrade, first cut. see #5560

Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/file.php

    r8580 r8595  
    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) )
  • trunk/wp-admin/includes/update.php

    r8589 r8595  
    1616    switch ( $cur->response ) {
    1717    case 'development' :
    18         return sprintf( '| '.__( 'You are using a development version (%s). Cool! Please <a href="%s">stay updated</a>.' ), $GLOBALS['wp_version'], $cur->url, $cur->current );
     18        return sprintf( '| '.__( 'You are using a development version (%1$s). Cool! Please <a href="%2$s">stay updated</a>.' ), $GLOBALS['wp_version'], wp_nonce_url('update.php?action=upgrade-core', 'upgrade-core'));
    1919    break;
    2020
    2121    case 'upgrade' :
    2222        if ( current_user_can('manage_options') ) {
    23             return sprintf( '| <strong>'.__( '<a href="%2$s">Get Version %3$s</a>' ).'</strong>', $GLOBALS['wp_version'], $cur->url, $cur->current );
     23            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);
    2424            break;
    2525        }
     
    2727    case 'latest' :
    2828    default :
    29         return sprintf( '| '.__( 'Version %s' ), $GLOBALS['wp_version'], $cur->url, $cur->current );
     29        return sprintf( '| '.__( 'Version %s' ), $GLOBALS['wp_version'] );
    3030    break;
    3131    }
     
    4040
    4141    if ( current_user_can('manage_options') )
    42         $msg = sprintf( __('WordPress %2$s is available! <a href="%1$s">Please update now</a>.'), $cur->url, $cur->current );
     42        $msg = sprintf( __('WordPress %1$s is available! <a href="%2$s">Please update now</a>.'), $cur->current, wp_nonce_url('update.php?action=upgrade-core', 'upgrade-core') );
    4343    else
    44         $msg = sprintf( __('WordPress %2$s is available! Please notify the site administrator.'), $cur->url, $cur->current );
     44        $msg = sprintf( __('WordPress %1$s is available! Please notify the site administrator.'), $cur->current );
    4545
    4646    echo "<div id='update-nag'>$msg</div>";
     
    5454    $msg = sprintf( __('This is WordPress version %s.'), $GLOBALS['wp_version'] );
    5555    if ( isset( $cur->response ) && $cur->response == 'upgrade' && current_user_can('manage_options') )
    56         $msg .= " <a href='$cur->url' class='rbutton'>" . sprintf( __('Update to %s'), $cur->current ? $cur->current : __( 'Latest' ) ) . '</a>';
     56        $msg .= " <a href='" . wp_nonce_url('update.php?action=upgrade-core', 'upgrade-core') . "' class='rbutton'>" . sprintf( __('Update to %s'), $cur->current ? $cur->current : __( 'Latest' ) ) . '</a>';
    5757
    5858    echo "<span id='wp-version-message'>$msg</span>";
     
    194194}
    195195
     196function wp_update_core($feedback = '') {
     197    global $wp_filesystem;
     198
     199    if ( !empty($feedback) )
     200        add_filter('update_feedback', $feedback);
     201
     202    // Is an update available?
     203    $current = get_option( 'update_core' );
     204    if ( !isset( $current->response ) || $current->response == 'latest' )
     205        return new WP_Error('up_to_date', __('WordPress is at the latest version.'));
     206
     207    // Is a filesystem accessor setup?
     208    if ( ! $wp_filesystem || ! is_object($wp_filesystem) )
     209        WP_Filesystem();
     210
     211    if ( ! is_object($wp_filesystem) )
     212        return new WP_Error('fs_unavailable', __('Could not access filesystem.'));
     213
     214    if ( $wp_filesystem->errors->get_error_code() )
     215        return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors);
     216
     217    // Get the base WP folder
     218    $wp_dir = $wp_filesystem->abspath();
     219    if ( empty($wp_dir) )
     220        return new WP_Error('fs_no_wp_dir', __('Unable to locate WordPress directory.'));
     221
     222    // And the same for the Content directory.
     223    $content_dir = $wp_filesystem->wp_content_dir();
     224    if( empty($content_dir) )
     225        return new WP_Error('fs_no_content_dir', __('Unable to locate WordPress Content directory (wp-content).'));
     226   
     227    $wp_dir = trailingslashit( $wp_dir );
     228    $content_dir = trailingslashit( $content_dir );
     229
     230    // Get the URL to the zip file
     231    $package = $current->package;
     232
     233    // Download the package
     234    apply_filters('update_feedback', sprintf(__('Downloading update from %s'), $package));
     235    $download_file = download_url($package);
     236
     237    if ( is_wp_error($download_file) )
     238        return new WP_Error('download_failed', __('Download failed.'), $download_file->get_error_message());
     239
     240    $working_dir = $content_dir . 'upgrade/core';
     241
     242    // Clean up working directory
     243    if ( $wp_filesystem->is_dir($working_dir) )
     244        $wp_filesystem->delete($working_dir, true);
     245
     246    apply_filters('update_feedback', __('Unpacking the update'));
     247    // Unzip package to working directory
     248    $result = unzip_file($download_file, $working_dir);
     249
     250    // Once extracted, delete the package
     251    unlink($download_file);
     252
     253    if ( is_wp_error($result) ) {
     254        $wp_filesystem->delete($working_dir, true);
     255        return $result;
     256    }
     257
     258    // Copy update-core.php from the new version into place.
     259    if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) {
     260        $wp_filesystem->delete($working_dir, true);
     261        return new WP_Error('copy_failed', __('Could not copy files'));
     262    }
     263
     264    require(ABSPATH . 'wp-admin/includes/update-core.php');
     265
     266    return update_core($working_dir, $wp_dir);
     267}
     268
    196269?>
  • trunk/wp-admin/update.php

    r8540 r8595  
    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']) : '';
     
    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}
  • trunk/wp-includes/update.php

    r8516 r8595  
    4141    $new_option->version_checked = $wp_version;
    4242
    43     $url = "http://api.wordpress.org/core/version-check/1.1/?version=$wp_version&php=$php_version&locale=$locale";
     43    $url = "http://api.wordpress.org/core/version-check/1.2/?version=$wp_version&php=$php_version&locale=$locale";
    4444    $options = array('timeout' => 3);
    4545
     
    5151    $response = wp_remote_request($url, $options, $headers);
    5252
    53     if( 200 != $response['response']['code'] )
     53    if ( 200 != $response['response']['code'] )
    5454        return false;
    5555
    5656    $body = $response['body'];
    57 
    58     $body = trim( $response[1] );
     57    $body = trim( $body );
    5958    $body = str_replace(array("\r\n", "\r"), "\n", $body);
    60 
    6159    $returns = explode("\n", $body);
    6260
     
    6563        $new_option->url = clean_url( $returns[1] );
    6664    if ( isset( $returns[2] ) )
    67         $new_option->current = attribute_escape( $returns[2] );
     65        $new_option->package = clean_url( $returns[2] );
     66    if ( isset( $returns[3] ) )
     67        $new_option->current = attribute_escape( $returns[3] );
     68    if ( isset( $returns[4] ) )
     69        $new_option->locale = attribute_escape( $returns[4] );
    6870
    6971    update_option( 'update_core', $new_option );
  • trunk/wp-settings.php

    r8565 r8595  
    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
     109
     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}
    109136
    110137if ( !extension_loaded('mysql') && !file_exists(WP_CONTENT_DIR . '/db.php') )
Note: See TracChangeset for help on using the changeset viewer.