Commit 3becbd89 authored by Dries's avatar Dries

- 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.
parent 9d8badb8
......@@ -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, '.'));
......
......@@ -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');
......
......@@ -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');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment