WordPress.org

Make WordPress Core

Ticket #7519: 7519.diff

File 7519.diff, 12.8 KB (added by DD32, 6 years ago)
  • wp-admin/includes/schema.php

     
    456456 
    457457        if ( !empty( $role ) ) { 
    458458                $role->add_cap( 'install_plugins' ); 
     459                $role->add_cap( 'update_themes' ); 
    459460        } 
    460461} 
    461462 
  • wp-admin/includes/update.php

     
    170170        // Copy new version of plugin into place. 
    171171        $result = copy_dir($working_dir, $plugins_dir); 
    172172        if ( is_wp_error($result) ) { 
    173                 //$wp_filesystem->delete($working_dir, true); //TODO: Uncomment? This DOES mean that the new files are available in the upgrade folder if it fails. 
     173                $wp_filesystem->delete($working_dir, true); 
    174174                return $result; 
    175175        } 
    176176 
     
    193193        return  $folder . '/' . $pluginfiles[0]; 
    194194} 
    195195 
     196function wp_update_theme($theme, $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_themes' ); 
     204        if ( !isset( $current->response[ $theme ] ) ) 
     205                return new WP_Error('up_to_date', __('The theme is at the latest version.')); 
     206 
     207        $r = $current->response[ $theme ]; 
     208         
     209        $themes = get_themes(); 
     210        foreach ( (array) $themes as $this_theme ) { 
     211                if ( $this_theme['Stylesheet'] == $theme ) { 
     212                        $theme_directory = preg_replace('!^/themes/!i', '', $this_theme['Stylesheet Dir']); 
     213                        break; 
     214                } 
     215        } 
     216        unset($themes); 
     217 
     218        if ( empty($theme_directory) ) 
     219                return new WP_Error('theme_non_existant', __('Theme does not exist.')); 
     220 
     221        // Is a filesystem accessor setup? 
     222        if ( ! $wp_filesystem || ! is_object($wp_filesystem) ) 
     223                WP_Filesystem(); 
     224 
     225        if ( ! is_object($wp_filesystem) ) 
     226                return new WP_Error('fs_unavailable', __('Could not access filesystem.')); 
     227 
     228        if ( $wp_filesystem->errors->get_error_code() ) 
     229                return new WP_Error('fs_error', __('Filesystem error'), $wp_filesystem->errors); 
     230 
     231        //Get the base plugin folder 
     232        $themes_dir = $wp_filesystem->wp_themes_dir(); 
     233        if ( empty($themes_dir) ) 
     234                return new WP_Error('fs_no_themes_dir', __('Unable to locate WordPress Theme directory.')); 
     235 
     236        //And the same for the Content directory. 
     237        $content_dir = $wp_filesystem->wp_content_dir(); 
     238        if( empty($content_dir) ) 
     239                return new WP_Error('fs_no_content_dir', __('Unable to locate WordPress Content directory (wp-content).')); 
     240 
     241        $themes_dir = trailingslashit( $themes_dir ); 
     242        $content_dir = trailingslashit( $content_dir ); 
     243 
     244        if ( empty($r->package) ) 
     245                return new WP_Error('no_package', __('Upgrade package not available.')); 
     246 
     247        // Download the package 
     248        apply_filters('update_feedback', sprintf(__('Downloading update from %s'), $r['package'])); 
     249        $download_file = download_url($r['package']); 
     250 
     251        if ( is_wp_error($download_file) ) 
     252                return new WP_Error('download_failed', __('Download failed.'), $download_file->get_error_message()); 
     253 
     254        $working_dir = $content_dir . 'upgrade/' . basename($theme_directory); 
     255 
     256        // Clean up working directory 
     257        if ( $wp_filesystem->is_dir($working_dir) ) 
     258                $wp_filesystem->delete($working_dir, true); 
     259 
     260        apply_filters('update_feedback', __('Unpacking the update')); 
     261        // Unzip package to working directory 
     262        $result = unzip_file($download_file, $working_dir); 
     263 
     264        // Once extracted, delete the package 
     265        unlink($download_file); 
     266 
     267        if ( is_wp_error($result) ) { 
     268                $wp_filesystem->delete($working_dir, true); 
     269                return $result; 
     270        } 
     271 
     272        //TODO: Is theme currently active? If so, set default theme 
     273        /* 
     274        if ( is_plugin_active($plugin) ) { 
     275                //Deactivate the plugin silently, Prevent deactivation hooks from running. 
     276                apply_filters('update_feedback', __('Deactivating the plugin')); 
     277                deactivate_plugins($plugin, true); 
     278        }*/ 
     279 
     280        // Remove the existing plugin. 
     281        apply_filters('update_feedback', __('Removing the old version of the theme')); 
     282        $deleted = $wp_filesystem->delete($themes_dir . $theme_directory, true); 
     283 
     284        if ( ! $deleted ) { 
     285                $wp_filesystem->delete($working_dir, true); 
     286                return new WP_Error('delete_failed', __('Could not remove the old plugin')); 
     287        } 
     288 
     289        apply_filters('update_feedback', __('Installing the latest version')); 
     290        // Copy new version of plugin into place. 
     291        $result = copy_dir($working_dir, $themes_dir); 
     292        if ( is_wp_error($result) ) { 
     293                $wp_filesystem->delete($working_dir, true); 
     294                return $result; 
     295        } 
     296 
     297        //Get a list of the directories in the working directory before we delete it, We need to know the new folder for the plugin 
     298        //$filelist = array_keys( $wp_filesystem->dirlist($working_dir) ); 
     299 
     300        // Remove working directory 
     301        $wp_filesystem->delete($working_dir, true); 
     302 
     303        // Force refresh of plugin update information 
     304        delete_option('update_themes'); 
     305 
     306        /*if( empty($filelist) ) 
     307                return false; //We couldnt find any files in the working dir, therefor no plugin installed? Failsafe backup. 
     308 
     309        $folder = $filelist[0]; 
     310        $plugin = get_plugins('/' . $folder); //Ensure to pass with leading slash 
     311        $pluginfiles = array_keys($plugin); //Assume the requested plugin is the first in the list 
     312 
     313        return  $folder . '/' . $pluginfiles[0];*/ 
     314} 
     315 
     316 
    196317function wp_update_core($feedback = '') { 
    197318        global $wp_filesystem; 
    198319 
  • wp-admin/includes/upgrade.php

     
    210210        if ( $wp_current_db_version < 8201 ) 
    211211                upgrade_260(); 
    212212 
    213         if ( $wp_current_db_version < 8921 ) 
     213        if ( $wp_current_db_version < 8980 ) 
    214214                upgrade_270(); 
    215215 
    216216        maybe_disable_automattic_widgets(); 
     
    766766function upgrade_270() { 
    767767        global $wpdb, $wp_current_db_version; 
    768768 
    769         if ( $wp_current_db_version < 8530 ) 
     769        if ( $wp_current_db_version < 8980 ) 
    770770                populate_roles_270(); 
    771771 
    772772        // Update post_date for unpublished posts with empty timestamp 
  • wp-admin/themes.php

     
    5959 
    6060$themes = array_slice( $themes, $start, $per_page ); 
    6161 
     62function theme_update_available( $theme ) { 
     63        static $themes_update; 
     64        if ( !isset($themes_update) ) 
     65                $themes_update = get_option('update_themes'); 
     66 
     67        if ( isset($theme->stylesheet) ) 
     68                $stylesheet = $theme->stylesheet; 
     69        elseif ( isset($theme['Stylesheet']) ) 
     70                $stylesheet = $theme['Stylesheet']; 
     71        else 
     72                return false; //No valid info passed. 
     73 
     74        if ( isset($themes_update->response[ $stylesheet ]) ) { 
     75                $update = $themes_update->response[ $stylesheet ]; 
     76                $details_url = add_query_arg(array('TB_iframe' => 'true', 'width' => 1024, 'height' => 800), $update['url']); //Theme browser inside WP? replace this, Also, theme preview JS will override this on the available list. 
     77                $update_url = wp_nonce_url('update.php?action=upgrade-theme&amp;theme=' . urlencode($stylesheet), 'upgrade-theme_' . $stylesheet); 
     78 
     79                if ( ! current_user_can('update_themes') ) 
     80                        printf( __('<p>There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s Details</a>.</p>'), $ct->name, $details_url, $update['new_version']); 
     81                else if ( empty($update->package) ) 
     82                        printf( __('<p>There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s Details</a> <em>automatic upgrade unavailable for this theme</em>.</p>'), $ct->name, $details_url, $update['new_version']); 
     83                else 
     84                        printf( __('<p>There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s Details</a> or <a href="%4$s">upgrade automatically</a>.</p>'), $ct->name, $details_url, $update['new_version'], $update_url ); 
     85        } 
     86} 
     87 
    6288?> 
    6389 
    6490<div class="wrap"> 
     
    77103<?php if ( $ct->tags ) : ?> 
    78104<p><?php _e('Tags:'); ?> <?php echo join(', ', $ct->tags); ?></p> 
    79105<?php endif; ?> 
     106<?php theme_update_available($ct); ?> 
     107 
    80108</div> 
    81109 
    82110<h2><?php _e('Available Themes'); ?></h2> 
     
    141169                <p><?php echo $description; ?></p> 
    142170<?php if ( $tags ) : ?> 
    143171                <p><?php _e('Tags:'); ?> <?php echo join(', ', $tags); ?></p> 
     172<?php endif; ?> 
     173                <?php theme_update_available( $themes[$theme_name] ); ?> 
    144174                <noscript><p class="themeactions"><a href="<?php echo $preview_link; ?>" title="<?php echo $preview_text; ?>"><?php _e('Preview'); ?></a> <a href="<?php echo $activate_link; ?>" title="<?php echo $activate_text; ?>"><?php _e('Activate'); ?></a></p></noscript> 
    145 <?php endif; ?> 
    146175                <div style="display:none;"><a class="previewlink" href="<?php echo $preview_link; ?>"><?php echo $preview_text; ?></a> <a class="activatelink" href="<?php echo $activate_link; ?>"><?php echo $activate_text; ?></a></div> 
    147176<?php endif; // end if not empty theme_name ?> 
    148177        </td> 
  • wp-admin/update.php

     
    6262} 
    6363 
    6464/** 
     65 * Theme upgrade display. 
     66 * 
     67 * @since 2.5 
     68 * 
     69 * @param string $plugin Plugin 
     70 */ 
     71function do_theme_upgrade($theme) { 
     72        global $wp_filesystem; 
     73 
     74        $url = wp_nonce_url('update.php?action=upgrade-theme&theme=' . urlencode($theme), 'upgrade-plugin_' . urlencode($theme)); 
     75        if ( false === ($credentials = request_filesystem_credentials($url)) ) 
     76                return; 
     77 
     78        if ( ! WP_Filesystem($credentials) ) { 
     79                $error = true; 
     80                if ( is_object($wp_filesystem) && $wp_filesystem->errors->get_error_code() ) 
     81                        $error = $wp_filesystem->errors; 
     82                request_filesystem_credentials($url, '', $error); //Failed to connect, Error and request again 
     83                return; 
     84        } 
     85 
     86        echo '<div class="wrap">'; 
     87        echo '<h2>' . __('Upgrade Theme') . '</h2>'; 
     88        if ( $wp_filesystem->errors->get_error_code() ) { 
     89                foreach ( $wp_filesystem->errors->get_error_messages() as $message ) 
     90                        show_message($message); 
     91                echo '</div>'; 
     92                return; 
     93        } 
     94 
     95        //TODO: Is theme currently active? 
     96        $was_current = false; //is_plugin_active($plugin); //Check now, It'll be deactivated by the next line if it is 
     97 
     98        $result = wp_update_theme($theme, 'show_message'); 
     99 
     100        if ( is_wp_error($result) ) { 
     101                show_message($result); 
     102                show_message( __('Installation Failed') ); 
     103        } else { 
     104                //Result is the new plugin file relative to WP_PLUGIN_DIR 
     105                show_message( __('Theme upgraded successfully') ); 
     106                if( $result && $was_current ){ 
     107                        show_message(__('Setting theme as Current')); 
     108                        //TODO: Actually set it as active again. 
     109                        //echo '<iframe style="border:0" width="100%" height="170px" src="' . wp_nonce_url('update.php?action=activate-plugin&plugin=' . $result, 'activate-plugin_' . $result) .'"></iframe>'; 
     110                } 
     111        } 
     112        echo '</div>'; 
     113} 
     114 
     115/** 
    65116 * Display upgrade WordPress for downloading latest or upgrading automatically form. 
    66117 * 
    67118 * @since 2.7 
     
    144195 
    145196if ( isset($_GET['action']) ) { 
    146197        $plugin = isset($_GET['plugin']) ? trim($_GET['plugin']) : ''; 
    147  
    148         if ( 'upgrade-plugin' == $_GET['action'] ) { 
     198        $theme = isset($_REQUEST['theme']) ? urldecode($_REQUEST['theme']) : ''; 
     199        $action = isset($_GET['action']) ? $_GET['action'] : ''; 
     200         
     201        if ( 'upgrade-plugin' == $action ) { 
    149202                check_admin_referer('upgrade-plugin_' . $plugin); 
    150203                $title = __('Upgrade Plugin'); 
    151204                $parent_file = 'plugins.php'; 
    152205                require_once('admin-header.php'); 
    153206                do_plugin_upgrade($plugin); 
    154207                include('admin-footer.php'); 
    155         } elseif ('activate-plugin' == $_GET['action'] ) { 
     208        } elseif ('activate-plugin' == $action ) { 
    156209                check_admin_referer('activate-plugin_' . $plugin); 
    157210                if( ! isset($_GET['failure']) && ! isset($_GET['success']) ) { 
    158211                        wp_redirect( 'update.php?action=activate-plugin&failure=true&plugin=' . $plugin . '&_wpnonce=' . $_GET['_wpnonce'] ); 
     
    182235                        include(WP_PLUGIN_DIR . '/' . $plugin); 
    183236                } 
    184237                echo "</body></html>"; 
    185         } elseif ( 'upgrade-core' == $_GET['action'] ) { 
     238        } elseif ( 'upgrade-core' == $action ) { 
    186239                $title = __('Upgrade WordPress'); 
    187240                $parent_file = 'index.php'; 
    188241                require_once('admin-header.php'); 
    189242                core_upgrade_preamble(); 
    190243                include('admin-footer.php'); 
    191         } elseif ( 'do-core-upgrade' ) { 
     244        } elseif ( 'do-core-upgrade' == $action ) { 
    192245                check_admin_referer('upgrade-core'); 
    193246                $title = __('Upgrade WordPress'); 
    194247                $parent_file = 'index.php'; 
    195248                require_once('admin-header.php'); 
    196249                do_core_upgrade(); 
    197250                include('admin-footer.php'); 
     251        } elseif ( 'upgrade-theme' == $action ) {        
     252                check_admin_referer('upgrade-theme_' . $theme); 
     253                $title = __('Upgrade Theme'); 
     254                $parent_file = 'themes.php'; 
     255                require_once('admin-header.php'); 
     256                do_theme_upgrade($theme); 
     257                include('admin-footer.php'); 
    198258        } 
    199259} 
    200260 
  • wp-includes/version.php

     
    1515 * 
    1616 * @global int $wp_db_version 
    1717 */ 
    18 $wp_db_version = 8921; 
     18$wp_db_version = 8980; 
    1919 
    2020?>