WordPress.org

Make WordPress Core

Ticket #20103: 20103.diff

File 20103.diff, 4.1 KB (added by nacin, 5 years ago)
  • wp-includes/theme.php

     
    578578        if ( empty( $wp_theme_directories ) ) 
    579579                return false; 
    580580 
    581         $theme_files = array(); 
    582         $wp_broken_themes = array(); 
     581        $found_themes = $wp_broken_themes = array(); 
    583582 
    584583        /* Loop the registered theme directories and extract all themes */ 
    585584        foreach ( (array) $wp_theme_directories as $theme_root ) { 
     
    590589                        $theme_loc = str_replace(WP_CONTENT_DIR, '', $theme_root); 
    591590 
    592591                /* Files in the root of the current theme directory and one subdir down */ 
    593                 $themes_dir = @ opendir($theme_root); 
     592                $themes_directory = @ scandir( $theme_root ); 
    594593 
    595                 if ( !$themes_dir ) 
     594                if ( ! $themes_directory ) 
    596595                        return false; 
    597596 
    598                 while ( ($theme_dir = readdir($themes_dir)) !== false ) { 
    599                         if ( is_dir($theme_root . '/' . $theme_dir) && is_readable($theme_root . '/' . $theme_dir) ) { 
    600                                 if ( $theme_dir[0] == '.' || $theme_dir == 'CVS' ) 
    601                                         continue; 
     597                $found_theme = false; 
     598                foreach ( $themes_directory as $theme_dir ) { 
     599                        if ( is_dir( $theme_root . '/' . $theme_dir ) && ( $theme_dir[0] == '.' || $theme_dir == 'CVS' ) ) 
     600                                continue; 
     601                        if ( ! file_exists( $theme_root . '/' . $theme_dir . '/style.css' ) ) 
     602                                continue; 
     603                        $found_themes[ $theme_dir ] = array( 
     604                                'theme_file' => $theme_dir . '/style.css', 
     605                                'theme_root' => $theme_root, 
     606                        ); 
     607                        $found_theme = true; 
     608                } 
    602609 
    603                                 $stylish_dir = @opendir($theme_root . '/' . $theme_dir); 
    604                                 $found_stylesheet = false; 
     610                if ( ! $found_theme ) { 
     611                        $sub_theme_dir = $theme_dir; 
     612                        $sub_theme_root = $theme_root . '/' . $sub_theme_dir; 
     613                        $themes_directory = @ scandir( $sub_theme_root ); 
    605614 
    606                                 while ( ($theme_file = readdir($stylish_dir)) !== false ) { 
    607                                         if ( $theme_file == 'style.css' ) { 
    608                                                 $theme_files[$theme_dir] = array( 'theme_file' => $theme_dir . '/' . $theme_file, 'theme_root' => $theme_root ); 
    609                                                 $found_stylesheet = true; 
    610                                                 break; 
    611                                         } 
    612                                 } 
    613                                 @closedir($stylish_dir); 
     615                        if ( ! $themes_directory ) 
     616                                return false; 
    614617 
    615                                 if ( !$found_stylesheet ) { // look for themes in that dir 
    616                                         $subdir = "$theme_root/$theme_dir"; 
    617                                         $subdir_name = $theme_dir; 
    618                                         $theme_subdirs = @opendir( $subdir ); 
     618                        $found_theme = false; 
     619                        foreach ( $themes_directory as $theme_dir ) { 
     620                                if ( is_dir( $sub_theme_root . '/' . $theme_dir ) && ( $theme_dir[0] == '.' || $theme_dir == 'CVS' ) ) 
     621                                        continue; 
     622                                if ( ! file_exists( $sub_theme_root . '/' . $theme_dir . '/style.css' ) ) 
     623                                        continue; 
     624                                $found_themes[ $sub_theme_dir . '/' . $theme_dir ] = array( 
     625                                        'theme_file' => $sub_theme_dir . '/' . $theme_dir . '/style.css', 
     626                                        'theme_root' => $theme_root, 
     627                                ); 
     628                                $found_theme = true; 
     629                        } 
    619630 
    620                                         $found_subdir_themes = false; 
    621                                         while ( ($theme_subdir = readdir($theme_subdirs)) !== false ) { 
    622                                                 if ( is_dir( $subdir . '/' . $theme_subdir) && is_readable($subdir . '/' . $theme_subdir) ) { 
    623                                                         if ( $theme_subdir[0] == '.' || $theme_subdir == 'CVS' ) 
    624                                                                 continue; 
    625  
    626                                                         $stylish_dir = @opendir($subdir . '/' . $theme_subdir); 
    627                                                         $found_stylesheet = false; 
    628  
    629                                                         while ( ($theme_file = readdir($stylish_dir)) !== false ) { 
    630                                                                 if ( $theme_file == 'style.css' ) { 
    631                                                                         $theme_files["$theme_dir/$theme_subdir"] = array( 'theme_file' => $subdir_name . '/' . $theme_subdir . '/' . $theme_file, 'theme_root' => $theme_root ); 
    632                                                                         $found_stylesheet = true; 
    633                                                                         $found_subdir_themes = true; 
    634                                                                         break; 
    635                                                                 } 
    636                                                         } 
    637                                                         @closedir($stylish_dir); 
    638                                                 } 
    639                                         } 
    640                                         @closedir($theme_subdirs); 
    641                                         if ( !$found_subdir_themes ) 
    642                                                 $wp_broken_themes[$theme_dir] = array('Name' => $theme_dir, 'Title' => $theme_dir, 'Description' => __('Stylesheet is missing.')); 
    643                                 } 
     631                        if ( ! $found_theme ) { 
     632                                $wp_broken_themes[ $sub_theme_dir ] = array( 
     633                                        'Name' => $sub_theme_dir, 
     634                                        'Title' => $theme_dir, 
     635                                        'Description' => __( 'Stylesheet is missing.' ), 
     636                                ); 
    644637                        } 
    645638                } 
    646                 @closedir( $themes_dir ); 
    647639        } 
    648         return $theme_files; 
     640 
     641        return $found_themes; 
    649642} 
    650643 
    651644/**