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, 8 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