From 3becbd89973a80fd9053aa24b6467c0003416d8e Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Tue, 8 Mar 2005 22:06:11 +0000 Subject: [PATCH] - Patch #16914 by chx: avoid that putting a .theme file directly in './themes' breaks your Drupal. Only themes in './themes/subdir' are picked up now. --- includes/file.inc | 14 +++++++++++--- modules/system.module | 8 +++++--- modules/system/system.module | 8 +++++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/includes/file.inc b/includes/file.inc index 9b48cc136d93..312d5f198c43 100644 --- a/includes/file.inc +++ b/includes/file.inc @@ -488,13 +488,19 @@ function file_download() { * values are "filename", for the path starting with $dir, * "basename", for the basename of the file, and "name" for the name * of the file without an extension. + * @param $min_depth + * Minimum depth of directories to return files from. + * @param $max_depth + * Maximum recursion depth. + * @param $depth + * Current depth of recursion. This parameter is only used interally and should not be passed. * * @return * An associative array (keyed on the provided key) of objects with * "path", "basename", and "name" members corresponding to the * matching files. */ -function file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse = TRUE, $key = 'filename') { +function file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0, $max_depth = 9, $depth = 0) { $key = (in_array($key, array('filename', 'basename', 'name')) ? $key : 'filename'); $files = array(); @@ -502,9 +508,11 @@ function file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $ca while ($file = readdir($handle)) { if (!in_array($file, $nomask)) { if (is_dir("$dir/$file") && $recurse) { - $files = array_merge($files, file_scan_directory("$dir/$file", $mask, $nomask, $callback, $recurse, $key)); + if ($depth < $max_depth) { + $files = array_merge($files, file_scan_directory("$dir/$file", $mask, $nomask, $callback, $recurse, $key, $min_depth, $max_depth, $depth + 1)); + } } - elseif (ereg($mask, $file)) { + elseif ($depth >= $min_depth && ereg($mask, $file)) { $filename = "$dir/$file"; $basename = basename($file); $name = substr($basename, 0, strrpos($basename, '.')); diff --git a/modules/system.module b/modules/system.module index 5f38a895cda2..3583100fe293 100644 --- a/modules/system.module +++ b/modules/system.module @@ -395,11 +395,13 @@ function system_theme_data() { * sites/somesite/modules/. * @param $key * The key to be passed to file_scan_directory(). + * @param $min_depth + * Minimum depth of directories to return files from. * * @return * An array of file objects of the specified type. */ -function system_listing($mask, $directory, $key = 'name') { +function system_listing($mask, $directory, $key = 'name', $min_depth = 1) { $config = conf_init(); $searchdir = array($directory); $files = array(); @@ -410,7 +412,7 @@ function system_listing($mask, $directory, $key = 'name') { // Get current list of items foreach ($searchdir as $dir) { - $files = array_merge($files, file_scan_directory($dir, $mask, array('.', '..', 'CVS'), 0, TRUE, $key)); + $files = array_merge($files, file_scan_directory($dir, $mask, array('.', '..', 'CVS'), 0, TRUE, $key, $min_depth)); } return $files; @@ -456,7 +458,7 @@ function system_theme_listing() { */ function system_module_listing() { // Get current list of modules - $files = system_listing('\.module$', 'modules'); + $files = system_listing('\.module$', 'modules', 'name', 0); // Extract current files from database. system_get_files_database($files, 'module'); diff --git a/modules/system/system.module b/modules/system/system.module index 5f38a895cda2..3583100fe293 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -395,11 +395,13 @@ function system_theme_data() { * sites/somesite/modules/. * @param $key * The key to be passed to file_scan_directory(). + * @param $min_depth + * Minimum depth of directories to return files from. * * @return * An array of file objects of the specified type. */ -function system_listing($mask, $directory, $key = 'name') { +function system_listing($mask, $directory, $key = 'name', $min_depth = 1) { $config = conf_init(); $searchdir = array($directory); $files = array(); @@ -410,7 +412,7 @@ function system_listing($mask, $directory, $key = 'name') { // Get current list of items foreach ($searchdir as $dir) { - $files = array_merge($files, file_scan_directory($dir, $mask, array('.', '..', 'CVS'), 0, TRUE, $key)); + $files = array_merge($files, file_scan_directory($dir, $mask, array('.', '..', 'CVS'), 0, TRUE, $key, $min_depth)); } return $files; @@ -456,7 +458,7 @@ function system_theme_listing() { */ function system_module_listing() { // Get current list of modules - $files = system_listing('\.module$', 'modules'); + $files = system_listing('\.module$', 'modules', 'name', 0); // Extract current files from database. system_get_files_database($files, 'module'); -- GitLab