Index: includes/theme.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/theme.inc,v retrieving revision 1.409 diff -u -p -r1.409 theme.inc --- includes/theme.inc 9 Jan 2008 22:01:29 -0000 1.409 +++ includes/theme.inc 9 Jan 2008 23:27:26 -0000 @@ -757,13 +757,14 @@ function drupal_find_theme_templates($ca // Escape the periods in the extension. $regex = str_replace('.', '\.', $extension) .'$'; - // Collect sub-themes for the current theme. This allows base themes to have - // sub-themes in its folder hierarchy without affecting the base theme. + // Collect a list of themes directories not owned by the current theme. + // This is to prevent the active base theme from reading sub-theme templates + // when they are placed in a sub-directory of the base theme. global $theme; - $sub_themes = array(); + $filter_list = array(); foreach (list_themes() as $theme_info) { if (!empty($theme_info->base_theme) && $theme_info->base_theme == $theme) { - $sub_themes[] = dirname($theme_info->filename); + $filter_list[] = dirname($theme_info->filename) . '/'; } } @@ -771,8 +772,8 @@ function drupal_find_theme_templates($ca // templates separately from checking for patterns. $files = drupal_system_listing($regex, $path, 'name', 0); foreach ($files as $template => $file) { // Catch sub-themes and skip. - if (strpos($file->filename, str_replace($sub_themes, '', $file->filename)) !== 0) { + if (in_array(dirname($file->filename) . '/', $filter_list)) { continue; } // Chop off the remaining extensions if there are any. $template already