WordPress.org

Make WordPress Core

Ticket #13208: 13208.patch

File 13208.patch, 3.9 KB (added by hakre, 8 years ago)
  • wp-admin/includes/plugin.php

     
    274274 * @return array Key is the mu-plugin file path and the value is an array of the mu-plugin data.
    275275 */
    276276function get_mu_plugins() {
    277         $wp_plugins = array();
     277
    278278        // Files in wp-content/mu-plugins directory
    279279        $plugin_files = array();
    280280
    281281        if ( ! is_dir( WPMU_PLUGIN_DIR ) )
    282                 return $wp_plugins;
     282                return array();
     283               
    283284        if ( $plugins_dir = @ opendir( WPMU_PLUGIN_DIR ) ) {
    284285                while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
    285286                        if ( substr( $file, -4 ) == '.php' )
     
    290291        @closedir( $plugins_dir );
    291292
    292293        if ( !$plugins_dir || empty($plugin_files) )
    293                 return $wp_plugins;
     294                return array();
    294295
    295         foreach ( $plugin_files as $plugin_file ) {
    296                 if ( !is_readable( WPMU_PLUGIN_DIR . "/$plugin_file" ) )
    297                         continue;
    298 
    299                 $plugin_data = get_plugin_data( WPMU_PLUGIN_DIR . "/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached.
    300 
    301                 if ( empty ( $plugin_data['Name'] ) )
    302                         $plugin_data['Name'] = $plugin_file;
    303 
    304                 $wp_plugins[ $plugin_file ] = $plugin_data;
    305         }
    306 
    307         if ( isset( $wp_plugins['index.php'] ) && filesize( WPMU_PLUGIN_DIR . '/index.php') <= 30 ) // silence is golden
    308                 unset( $wp_plugins['index.php'] );
    309 
    310         uasort( $wp_plugins, create_function( '$a, $b', 'return strnatcasecmp( $a["Name"], $b["Name"] );' ));
    311 
    312         return $wp_plugins;
     296        return _filter_plugins_by_dir( $plugin_files, WPMU_PLUGIN_DIR, true );
    313297}
    314298
    315299/**
     
    319303 * @return array Key is the file path and the value is an array of the plugin data.
    320304 */
    321305function get_dropins() {
    322         $dropins = array();
     306
     307        // Files in various dropin locations
    323308        $plugin_files = array();
    324309
    325310        $_dropins = _get_dropins();
     
    329314                while ( ( $file = readdir( $plugins_dir ) ) !== false ) {
    330315                        if ( isset( $_dropins[ $file ] ) )
    331316                                $plugin_files[] = $file;
    332                         }
     317                }
    333318        }
    334319
    335320        @closedir( $plugins_dir );
    336321
    337322        if ( !$plugins_dir || empty($plugin_files) )
    338                         return $dropins;
     323                return array();
    339324
    340         foreach ( $plugin_files as $plugin_file ) {
    341                         if ( !is_readable( WP_CONTENT_DIR . "/$plugin_file" ) )
    342                                         continue;
    343                         $plugin_data = get_plugin_data( WP_CONTENT_DIR . "/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached.
    344                         if ( empty ( $plugin_data['Name'] ) )
    345                                 $plugin_data['Name'] = $plugin_file;
    346                         $dropins[ $plugin_file ] = $plugin_data;
    347         }
    348 
    349         uksort( $dropins, create_function( '$a, $b', 'return strnatcasecmp( $a, $b );' ));
    350 
    351         return $dropins;
     325        return _filter_plugins_by_dir( $plugin_files, WP_CONTENT_DIR );
    352326}
    353327
    354328/**
     
    382356}
    383357
    384358/**
     359 * filter plugins  based on their folder
     360 *
     361 * used for mu-plugins, dropins
     362 *
     363 * @param array $plugins plugin filenames
     364 * @param string $folder folder to verify plugins in
     365 * @param bool $test_golden wether or not to test for a directory listing preventing 'silence is golden' (small) index.php file.
     366 * @return array filtered plugins
     367 */
     368function _filter_plugins_by_dir($plugin_files, $folder, $test_golden = false) {
     369        $wp_plugins = array();
     370       
     371        foreach ( $plugin_files as $plugin_file ) {
     372                $plugin_path = $folder . '/' . $plugin_file;
     373                if ( !is_readable( $plugin_path ) )
     374                        continue;
     375                       
     376                if ( $test_golden && 'index.php' == $plugin_file && filesize( $plugin_path ) <= 30 ) // silence is golden
     377                        continue;
     378
     379                $plugin_data = get_plugin_data( $plugin_path, false, false ); //Do not apply markup/translate as it'll be cached.
     380
     381                if ( empty ( $plugin_data['Name'] ) )
     382                        $plugin_data['Name'] = $plugin_file;
     383
     384                $wp_plugins[ $plugin_file ] = $plugin_data;
     385        }
     386
     387        uasort( $wp_plugins, create_function( '$a, $b', 'return strnatcasecmp( $a["Name"], $b["Name"] );' ));
     388
     389        return $wp_plugins;
     390}
     391
     392/**
    385393 * Check whether the plugin is active by checking the active_plugins list.
    386394 *
    387395 * @since 2.5.0