WordPress.org

Make WordPress Core

Ticket #11750: 11750-full-incl-valid-plugins-function.patch

File 11750-full-incl-valid-plugins-function.patch, 8.6 KB (added by hakre, 5 years ago)
  • wp-admin/includes/plugin.php

     
    258258 * @param string $plugin Base plugin path from plugins directory. 
    259259 * @return bool True, if in the active plugins list. False, not in the list. 
    260260 */ 
    261 function is_plugin_active($plugin) { 
    262         return in_array( $plugin, apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ); 
     261function is_plugin_active( $plugin ) { 
     262        return in_array( $plugin, apply_filters( 'active_plugins', get_option( 'active_plugins', array() ) ) ); 
    263263} 
    264264 
    265265/** 
     
    286286 * @param string $redirect Optional. URL to redirect to. 
    287287 * @return WP_Error|null WP_Error on invalid file or null on success. 
    288288 */ 
    289 function activate_plugin($plugin, $redirect = '') { 
    290         $current = get_option('active_plugins'); 
    291         $plugin = plugin_basename(trim($plugin)); 
     289function activate_plugin( $plugin, $redirect = '' ) { 
     290        $current = get_option( 'active_plugins', array() ); 
     291        $plugin  = plugin_basename( trim( $plugin ) ); 
    292292 
    293293        $valid = validate_plugin($plugin); 
    294294        if ( is_wp_error($valid) ) 
     
    322322 * @param string|array $plugins Single plugin or list of plugins to deactivate. 
    323323 * @param bool $silent Optional, default is false. Prevent calling deactivate hook. 
    324324 */ 
    325 function deactivate_plugins($plugins, $silent= false) { 
    326         $current = get_option('active_plugins'); 
     325function deactivate_plugins( $plugins, $silent = false ) { 
     326        $current = get_option( 'active_plugins', array() ); 
    327327 
    328         if ( !is_array($plugins) ) 
    329                 $plugins = array($plugins); 
    330  
    331         foreach ( $plugins as $plugin ) { 
     328        foreach ( (array) $plugins as $plugin ) { 
    332329                $plugin = plugin_basename($plugin); 
    333330                if( ! is_plugin_active($plugin) ) 
    334331                        continue; 
     
    475472        return true; 
    476473} 
    477474 
     475/** 
     476 * validate active plugins 
     477 *  
     478 * validate all active plugins, deactivates invalid and  
     479 * returns an array of deactived ones. 
     480 *  
     481 * @since unknown 
     482 * @return array invalid plugins, plugin as key, error as value 
     483 */ 
    478484function validate_active_plugins() { 
    479         $check_plugins = apply_filters( 'active_plugins', get_option('active_plugins') ); 
     485        $plugins = apply_filters( 'active_plugins', get_option( 'active_plugins', array() ) ); 
    480486 
    481         // Sanity check.  If the active plugin list is not an array, make it an 
    482         // empty array. 
    483         if ( !is_array($check_plugins) ) { 
     487        // validate vartype: array 
     488        if ( !is_array( $plugins ) ) { 
    484489                update_option('active_plugins', array()); 
    485490                return; 
    486491        } 
    487492 
    488         //Invalid is any plugin that is deactivated due to error. 
    489493        $invalid = array(); 
    490494 
    491         // If a plugin file does not exist, remove it from the list of active 
    492         // plugins. 
    493         foreach ( $check_plugins as $check_plugin ) { 
    494                 $result = validate_plugin($check_plugin); 
     495        // invalid plugins get deactivated 
     496        foreach ( $plugins as $plugin ) { 
     497                $result = validate_plugin( $plugin ); 
    495498                if ( is_wp_error( $result ) ) { 
    496                         $invalid[$check_plugin] = $result; 
    497                         deactivate_plugins( $check_plugin, true); 
     499                        $invalid[$plugin] = $result; 
     500                        deactivate_plugins( $plugin, true ); 
    498501                } 
    499502        } 
    500503        return $invalid; 
  • wp-admin/plugin-editor.php

     
    208208                <div id="documentation"><label for="docs-list"><?php _e('Documentation:') ?></label> <?php echo $docs_select ?> <input type="button" class="button" value="<?php esc_attr_e( 'Lookup' ) ?> " onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'http://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_locale() ) ?>&amp;version=<?php echo urlencode( $wp_version ) ?>&amp;redirect=true'); }" /></div> 
    209209                <?php endif; ?> 
    210210<?php if ( is_writeable($real_file) ) : ?> 
    211         <?php if ( in_array($file, (array) get_option('active_plugins')) ) { ?> 
     211        <?php if ( in_array( $file, (array) get_option( 'active_plugins', array() ) ) ) { ?> 
    212212                <p><?php _e('<strong>Warning:</strong> Making changes to active plugins is not recommended.  If your changes cause a fatal error, the plugin will be automatically deactivated.'); ?></p> 
    213213        <?php } ?> 
    214214        <p class="submit"> 
  • wp-includes/plugin.php

     
    707707        } 
    708708} 
    709709 
    710 ?> 
     710 
     711/** 
     712 * valid plugins 
     713 *  
     714 * filter a/the active list of plugins to filenames that are valid to 
     715 * include. 
     716 *  
     717 * Examples: 
     718 *  
     719 *    valid_plugins();  
     720 *    return array of standard plugin files to include 
     721 *     
     722 *    valid_plugins( WPMU_PLUGIN_DIR ) 
     723 *    return array of WPMU plugin files to include 
     724 *  
     725 * @param array|string $plugins (optional) list of plugins, will take  
     726 *                              active_plugins option as default.  
     727 *                              additionally the path of a directory can  
     728 *                              be passed as string which will be iterated  
     729 *                              for valid plugin files then (WPMU Plugins  
     730 *                              flat style). 
     731 * @param string $dir (optional) plugin directory, defaults to WP_PLUGIN_DIR or 
     732 *                              to $plugins if used as string. 
     733 * @return array list of plugin files (full, absolute path) ripe to be included 
     734 * @since 3.0 
     735 */ 
     736function valid_plugins( $plugins = null, $dir = null ) { 
     737 
     738        if ( is_null( $plugins ) ) 
     739                $plugins = apply_filters( 'active_plugins', get_option( 'active_plugins', array() ) ); 
     740                 
     741        if ( is_string( $plugins ) && is_dir( $plugins ) && $dh = opendir( $plugins ) ) { 
     742                $dir = is_null( $dir ) ? $plugins : $dir; 
     743                $plugins = array(); 
     744                while ( ( $plugins[] = readdir( $dh ) ) !== false ); 
     745        } 
     746         
     747        if ( !is_array( $plugins ) ) 
     748                return array(); 
     749                 
     750        if ( is_null( $dir ) ) 
     751                $dir = WP_PLUGIN_DIR; 
     752                 
     753        // check the $plugin name/filename 
     754        $valid = array(); 
     755        foreach( $plugins as $plugin ) { 
     756                if ( validate_file( $plugin ) // $plugin must validate as file 
     757                        || '.php' != substr( $plugin, -4 ) // $plugin must end with '.php' 
     758                        || !file_exists( $path = $dir . '/' . $plugin ) // $plugin must exist 
     759                        ) continue; 
     760                $valid[] = $path;  
     761        } 
     762        return $valid; 
     763} 
     764 
     765?> 
     766 No newline at end of file 
  • wp-includes/update.php

     
    112112                require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); 
    113113 
    114114        $plugins = get_plugins(); 
    115         $active  = get_option( 'active_plugins' ); 
     115        $active  = get_option( 'active_plugins', array() ); 
    116116        $current = get_transient( 'update_plugins' ); 
    117117        if ( ! is_object($current) ) 
    118118                $current = new stdClass; 
     
    147147        $current->last_checked = time(); 
    148148        set_transient( 'update_plugins', $current ); 
    149149 
    150         $to_send = (object)compact('plugins', 'active'); 
     150        $to_send = (object) compact('plugins', 'active'); 
    151151 
    152152        $options = array( 
    153153                'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3), 
  • wp-settings.php

     
    439439if ( !defined( 'MUPLUGINDIR' ) ) 
    440440        define( 'MUPLUGINDIR', 'wp-content/mu-plugins' ); // Relative to ABSPATH.  For back compat. 
    441441 
    442 if ( is_dir( WPMU_PLUGIN_DIR ) ) { 
    443         if ( $dh = opendir( WPMU_PLUGIN_DIR ) ) { 
    444                 while ( ( $plugin = readdir( $dh ) ) !== false ) { 
    445                         if ( substr( $plugin, -4 ) == '.php' ) { 
    446                                 include_once( WPMU_PLUGIN_DIR . '/' . $plugin ); 
    447                         } 
    448                 } 
    449         } 
    450 } 
     442foreach ( valid_plugins( WPMU_PLUGIN_DIR ) as $plugin ) 
     443        include_once( $plugin );         
    451444do_action('muplugins_loaded'); 
    452445 
    453446/** 
     
    581574                require(ABSPATH . 'my-hacks.php'); 
    582575} 
    583576 
    584 $current_plugins = apply_filters( 'active_plugins', get_option( 'active_plugins' ) ); 
    585 if ( is_array($current_plugins) && !defined('WP_INSTALLING') ) { 
    586         foreach ( $current_plugins as $plugin ) { 
    587                 // check the $plugin filename 
    588                 // Validate plugin filename 
    589                 if ( validate_file($plugin) // $plugin must validate as file 
    590                         || '.php' != substr($plugin, -4) // $plugin must end with '.php' 
    591                         || !file_exists(WP_PLUGIN_DIR . '/' . $plugin)  // $plugin must exist 
    592                         ) 
    593                         continue; 
    594  
    595                 include_once(WP_PLUGIN_DIR . '/' . $plugin); 
    596         } 
     577// include valid plugin files / load plugins into global namespace 
     578if ( !defined('WP_INSTALLING') ) { 
     579        foreach ( valid_plugins() as $plugin ) 
     580                include_once($plugin); 
    597581        unset($plugin); 
    598582} 
    599 unset($current_plugins); 
    600583 
    601584require (ABSPATH . WPINC . '/pluggable.php'); 
    602585