WordPress.org

Make WordPress Core

Changeset 25272


Ignore:
Timestamp:
09/06/2013 01:32:09 AM (5 years ago)
Author:
dd32
Message:

Upgrader: Make clearing the Plugin and Theme update caches optional during install and upgrade proceedures. See #22704

Location:
trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-wp-upgrader.php

    r25254 r25272  
    164164    }
    165165
    166     function install_package($args = array()) {
     166    function install_package( $args = array() ) {
    167167        global $wp_filesystem, $wp_theme_directories;
    168168
    169         $defaults = array( 'source' => '', 'destination' => '', //Please always pass these
    170                         'clear_destination' => false, 'clear_working' => false,
    171                         'abort_if_destination_exists' => true,
    172                         'hook_extra' => array());
     169        $defaults = array(
     170            'source' => '', // Please always pass this
     171            'destination' => '', // and this
     172            'clear_destination' => false,
     173            'clear_working' => false,
     174            'abort_if_destination_exists' => true,
     175            'hook_extra' => array()
     176        );
    173177
    174178        $args = wp_parse_args($args, $defaults);
     
    278282    function run($options) {
    279283
    280         $defaults = array(  'package' => '', //Please always pass this.
    281                             'destination' => '', //And this
    282                             'clear_destination' => false,
    283                             'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
    284                             'clear_working' => true,
    285                             'is_multi' => false,
    286                             'hook_extra' => array() //Pass any extra $hook_extra args here, this will be passed to any hooked filters.
    287                         );
     284        $defaults = array(
     285            'package' => '', // Please always pass this.
     286            'destination' => '', // And this
     287            'clear_destination' => false,
     288            'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
     289            'clear_working' => true,
     290            'is_multi' => false,
     291            'hook_extra' => array() // Pass any extra $hook_extra args here, this will be passed to any hooked filters.
     292        );
    288293
    289294        $options = wp_parse_args($options, $defaults);
     
    325330        //With the given options, this installs it to the destination directory.
    326331        $result = $this->install_package( array(
    327                                             'source' => $working_dir,
    328                                             'destination' => $destination,
    329                                             'clear_destination' => $clear_destination,
    330                                             'abort_if_destination_exists' => $abort_if_destination_exists,
    331                                             'clear_working' => $clear_working,
    332                                             'hook_extra' => $hook_extra
    333                                         ) );
     332            'source' => $working_dir,
     333            'destination' => $destination,
     334            'clear_destination' => $clear_destination,
     335            'abort_if_destination_exists' => $abort_if_destination_exists,
     336            'clear_working' => $clear_working,
     337            'hook_extra' => $hook_extra
     338        ) );
     339
    334340        $this->skin->set_result($result);
    335341        if ( is_wp_error($result) ) {
     
    399405    }
    400406
    401     function install($package) {
     407    function install( $package, $args = array() ) {
     408
     409        $defaults = array(
     410            'clear_update_cache' => true,
     411        );
     412        $parsed_args = wp_parse_args( $defaults, $args );
    402413
    403414        $this->init();
     
    406417        add_filter('upgrader_source_selection', array($this, 'check_package') );
    407418
    408         $this->run(array(
    409                     'package' => $package,
    410                     'destination' => WP_PLUGIN_DIR,
    411                     'clear_destination' => false, //Do not overwrite files.
    412                     'clear_working' => true,
    413                     'hook_extra' => array()
    414                     ));
     419        $this->run( array(
     420            'package' => $package,
     421            'destination' => WP_PLUGIN_DIR,
     422            'clear_destination' => false, // Do not overwrite files.
     423            'clear_working' => true,
     424            'hook_extra' => array()
     425        ) );
    415426
    416427        remove_filter('upgrader_source_selection', array($this, 'check_package') );
     
    420431
    421432        // Force refresh of plugin update information
    422         delete_site_transient('update_plugins');
    423         wp_cache_delete( 'plugins', 'plugins' );
     433        wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
     434
    424435        do_action( 'upgrader_process_complete', $this, array( 'action' => 'install', 'type' => 'plugin' ), $package );
    425436
     
    427438    }
    428439
    429     function upgrade($plugin) {
     440    function upgrade( $plugin, $args = array() ) {
     441
     442        $defaults = array(
     443            'clear_update_cache' => true,
     444        );
     445        $parsed_args = wp_parse_args( $defaults, $args );
    430446
    431447        $this->init();
     
    448464        //'source_selection' => array($this, 'source_selection'), //there's a trac ticket to move up the directory for zip's which are made a bit differently, useful for non-.org plugins.
    449465
    450         $this->run(array(
    451                     'package' => $r->package,
    452                     'destination' => WP_PLUGIN_DIR,
    453                     'clear_destination' => true,
    454                     'clear_working' => true,
    455                     'hook_extra' => array(
    456                                 'plugin' => $plugin
    457                     )
    458                 ));
     466        $this->run( array(
     467            'package' => $r->package,
     468            'destination' => WP_PLUGIN_DIR,
     469            'clear_destination' => true,
     470            'clear_working' => true,
     471            'hook_extra' => array(
     472                'plugin' => $plugin
     473            ),
     474        ) );
    459475
    460476        // Cleanup our hooks, in case something else does a upgrade on this connection.
     
    466482
    467483        // Force refresh of plugin update information
    468         delete_site_transient('update_plugins');
    469         wp_cache_delete( 'plugins', 'plugins' );
     484        wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
     485
    470486        do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'plugin' ), $plugin );
    471487
     
    473489    }
    474490
    475     function bulk_upgrade($plugins) {
     491    function bulk_upgrade( $plugins, $args = array() ) {
     492
     493        $defaults = array(
     494            'clear_update_cache' => true,
     495        );
     496        $parsed_args = wp_parse_args( $defaults, $args );
    476497
    477498        $this->init();
     
    526547            $this->skin->plugin_active = is_plugin_active($plugin);
    527548
    528             $result = $this->run(array(
    529                         'package' => $r->package,
    530                         'destination' => WP_PLUGIN_DIR,
    531                         'clear_destination' => true,
    532                         'clear_working' => true,
    533                         'is_multi' => true,
    534                         'hook_extra' => array(
    535                                     'plugin' => $plugin
    536                         )
    537                     ));
     549            $result = $this->run( array(
     550                'package' => $r->package,
     551                'destination' => WP_PLUGIN_DIR,
     552                'clear_destination' => true,
     553                'clear_working' => true,
     554                'is_multi' => true,
     555                'hook_extra' => array(
     556                    'plugin' => $plugin
     557                )
     558            ) );
    538559
    539560            $results[$plugin] = $this->result;
     
    554575
    555576        // Force refresh of plugin update information
    556         delete_site_transient('update_plugins');
    557         wp_cache_delete( 'plugins', 'plugins' );
     577        wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
     578
    558579        do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'plugin', 'bulk' => true ), $plugins );
    559580
     
    756777    }
    757778
    758     function install($package) {
     779    function install( $package, $args = array() ) {
     780
     781        $defaults = array(
     782            'clear_update_cache' => true,
     783        );
     784        $parsed_args = wp_parse_args( $defaults, $args );
    759785
    760786        $this->init();
     
    764790        add_filter('upgrader_post_install', array($this, 'check_parent_theme_filter'), 10, 3);
    765791
    766         $options = array(
     792        $this->run( array(
    767793            'package' => $package,
    768794            'destination' => get_theme_root(),
    769795            'clear_destination' => false, //Do not overwrite files.
    770796            'clear_working' => true
    771         );
    772 
    773         $this->run($options);
     797        ) );
    774798
    775799        remove_filter('upgrader_source_selection', array($this, 'check_package') );
     
    779803            return $this->result;
    780804
    781         // Force refresh of theme update information
    782         wp_clean_themes_cache();
     805        // Refresh the Theme Update information
     806        wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
     807
    783808        do_action( 'upgrader_process_complete', $this, array( 'action' => 'install', 'type' => 'theme' ), $package );
    784809
     
    786811    }
    787812
    788     function upgrade($theme) {
     813    function upgrade( $theme, $args = array() ) {
     814
     815        $defaults = array(
     816            'clear_update_cache' => true,
     817        );
     818        $parsed_args = wp_parse_args( $defaults, $args );
    789819
    790820        $this->init();
     
    807837        add_filter('upgrader_clear_destination', array($this, 'delete_old_theme'), 10, 4);
    808838
    809         $options = array(
     839        $this->run( array(
    810840            'package' => $r['package'],
    811841            'destination' => get_theme_root( $theme ),
     
    815845                'theme' => $theme
    816846            ),
    817         );
    818 
    819         $this->run($options);
     847        ) );
    820848
    821849        remove_filter('upgrader_pre_install', array($this, 'current_before'));
     
    826854            return $this->result;
    827855
    828         // Force refresh of theme update information
    829         wp_clean_themes_cache();
     856        wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
     857
    830858        do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'theme' ), $theme );
    831859
     
    833861    }
    834862
    835     function bulk_upgrade($themes) {
     863    function bulk_upgrade( $themes, $args = array() ) {
     864
     865        $defaults = array(
     866            'clear_update_cache' => true,
     867        );
     868        $parsed_args = wp_parse_args( $defaults, $args );
    836869
    837870        $this->init();
     
    887920            $r = $current->response[ $theme ];
    888921
    889             $options = array(
     922            $result = $this->run( array(
    890923                'package' => $r['package'],
    891924                'destination' => get_theme_root( $theme ),
     
    895928                    'theme' => $theme
    896929                ),
    897             );
    898 
    899             $result = $this->run($options);
     930            ) );
    900931
    901932            $results[$theme] = $this->result;
     
    917948        remove_filter('upgrader_clear_destination', array($this, 'delete_old_theme'));
    918949
    919         // Force refresh of theme update information
    920         wp_clean_themes_cache();
     950        // Refresh the Theme Update information
     951        wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
     952
    921953        do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'theme', 'bulk' => true ), $themes );
    922954
     
    10391071    }
    10401072
    1041     function upgrade($current) {
     1073    function upgrade( $current, $args = array() ) {
    10421074        global $wp_filesystem, $wp_version;
     1075
     1076        $defaults = array(
     1077        );
     1078        $parsed_args = wp_parse_args( $defaults, $args );
    10431079
    10441080        $this->init();
  • trunk/src/wp-admin/includes/plugin.php

    r25081 r25272  
    17651765    wp_nonce_field("$option_group-options");
    17661766}
     1767
     1768/**
     1769 * Clears the Plugins cache used by get_plugins() and by default, the Plugin Update cache.
     1770 *
     1771 * @since 3.7.0
     1772 *
     1773 * @param bool $clear_update_cache Whether to clear the Plugin updates cache
     1774 */
     1775function wp_clean_plugins_cache( $clear_update_cache = true ) {
     1776    if ( $clear_update_cache )
     1777        delete_site_transient( 'update_plugins' );
     1778    wp_cache_delete( 'plugins', 'plugins' );
     1779}
  • trunk/src/wp-includes/theme.php

    r25235 r25272  
    111111 *
    112112 * @since 3.5.0
    113  */
    114 function wp_clean_themes_cache() {
    115     delete_site_transient('update_themes');
     113 * @param bool $clear_update_cache Whether to clear the Theme updates cache
     114 */
     115function wp_clean_themes_cache( $clear_update_cache = true ) {
     116    if ( $clear_update_cache )
     117        delete_site_transient( 'update_themes' );
    116118    search_theme_directories( true );
    117119    foreach ( wp_get_themes( array( 'errors' => null ) ) as $theme )
Note: See TracChangeset for help on using the changeset viewer.