aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorNils Adermann <naderman@naderman.de>2011-09-29 17:20:42 +0200
committerNils Adermann <naderman@naderman.de>2011-09-29 17:20:42 +0200
commitfbc2442ccdb8f448f0211ff547536ddcade229fb (patch)
treec6c7c46814126db8475f420413468e19113fa076 /phpBB
parent77f42969ab4e7ba40e3397244158ca7c98480bee (diff)
downloadforums-fbc2442ccdb8f448f0211ff547536ddcade229fb.tar
forums-fbc2442ccdb8f448f0211ff547536ddcade229fb.tar.gz
forums-fbc2442ccdb8f448f0211ff547536ddcade229fb.tar.bz2
forums-fbc2442ccdb8f448f0211ff547536ddcade229fb.tar.xz
forums-fbc2442ccdb8f448f0211ff547536ddcade229fb.zip
[feature/extension-manager] Correctly detect and handle directories in finder
PHPBB3-10323
Diffstat (limited to 'phpBB')
-rw-r--r--phpBB/includes/extension/finder.php24
1 files changed, 16 insertions, 8 deletions
diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php
index af01bfdde6..d599dfb86d 100644
--- a/phpBB/includes/extension/finder.php
+++ b/phpBB/includes/extension/finder.php
@@ -326,22 +326,30 @@ class phpbb_extension_finder
}
$directory_pattern = '#' . $directory_pattern . '#';
- $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file_info)
{
if ($file_info->isDir() == $is_dir)
{
- $relative_path = ($is_dir) ? $iterator->getInnerIterator()->getSubPath() . DIRECTORY_SEPARATOR:
- $iterator->getInnerIterator()->getSubPathname();
-
- $item_name = ($is_dir) ? basename($iterator->getInnerIterator()->getSubPath()) :
- $file_info->getFilename();
+ if ($is_dir)
+ {
+ $relative_path = $iterator->getInnerIterator()->getSubPath() . DIRECTORY_SEPARATOR . basename($file_info->getFilename()) . DIRECTORY_SEPARATOR;
+ if ($relative_path[0] !== DIRECTORY_SEPARATOR)
+ {
+ $relative_path = DIRECTORY_SEPARATOR . $relative_path;
+ }
+ }
+ else
+ {
+ $relative_path = DIRECTORY_SEPARATOR . $iterator->getInnerIterator()->getSubPathname();
+ }
+ $item_name = $file_info->getFilename();
if ((!$suffix || substr($relative_path, -strlen($suffix)) === $suffix) &&
(!$prefix || substr($item_name, 0, strlen($prefix)) === $prefix) &&
- (!$directory || preg_match($directory_pattern, DIRECTORY_SEPARATOR . $relative_path)))
+ (!$directory || preg_match($directory_pattern, $relative_path)))
{
- $files[] = str_replace(DIRECTORY_SEPARATOR, '/', $location . $name . $relative_path);
+ $files[] = str_replace(DIRECTORY_SEPARATOR, '/', $location . $name . substr($relative_path, 1));
}
}
}