Make Folder::tree use SPL Iterators.

This commit is contained in:
mark_story 2011-08-26 22:38:34 -04:00
parent 7656feb0bb
commit 682dc5e24b

View file

@ -393,28 +393,41 @@ class Folder {
} }
return array(); return array();
} }
$this->_files = array(); $files = array();
$this->_directories = array($this->realpath($path)); $directories = array($path);
$directories = array(); $skipHidden = false;
if ($exceptions === false) { if ($exceptions === false) {
$exceptions = true; $skipHidden = true;
} }
while (!empty($this->_directories)) { if (is_array($exceptions)) {
$dir = array_pop($this->_directories); $exceptions = array_flip($exceptions);
$this->_tree($dir, $exceptions);
$directories[] = $dir;
} }
try {
$directory = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST);
} catch (UnexpectedValueException $e) {
return array();
}
foreach ($iterator as $item) {
$name = $item->getFileName();
if ($skipHidden && $name[0] === '.' || isset($exceptions[$name])) {
continue;
}
if ($item->isFile()) {
$files[] = $item->getPathName();
} else if ($item->isDir()) {
$directories[] = $item->getPathName();
}
}
if ($type === null) { if ($type === null) {
return array($directories, $this->_files); return array($directories, $files);
} }
if ($type === 'dir') { if ($type === 'dir') {
return $directories; return $directories;
} }
$this->cd($original); return $files;
return $this->_files;
} }
/** /**