Back to FileStorage class

Method _folders

protected array
_folders
(mixed $path, mixed $filter = '.', mixed $recurse = false, mixed $fullpath = false, mixed $exclude = array('.svn', 'CVS', '.DS_Store', '__MACOSX'), mixed $excludefilter = array('^\\..*'))
Utility function to read the folders in a folder.
Parameters
  • string $path The path of the folder to read.
  • string $filter A filter for folder names.
  • mixed $recurse True to recursively search into sub-folders, or an integer to specify the maximum depth.
  • bool $fullpath True to return the full path to the folders.
  • array $exclude Array with names of folders which should not be shown in the result.
  • array $excludefilter Array with regular expressions matching folders which should not be shown in the result.
Returns
  • array Folders in the given folder.
Since
  • 1.7.0
Class: FileStorage
Project: Joomla

Method _folders - Source code

/**
 * Utility function to read the folders in a folder.
 *
 * @param   string   $path           The path of the folder to read.
 * @param   string   $filter         A filter for folder names.
 * @param   mixed    $recurse        True to recursively search into sub-folders, or an integer to specify the maximum depth.
 * @param   boolean  $fullpath       True to return the full path to the folders.
 * @param   array    $exclude        Array with names of folders which should not be shown in the result.
 * @param   array    $excludefilter  Array with regular expressions matching folders which should not be shown in the result.
 *
 * @return  array  Folders in the given folder.
 *
 * @since   1.7.0
 */
protected function _folders($path, $filter = '.', $recurse = false, $fullpath = false, $exclude = array('.svn', 'CVS', '.DS_Store', '__MACOSX'), $excludefilter = array('^\\..*'))
{
    $arr = array();
    // Check to make sure the path valid and clean
    $path = $this->_cleanPath($path);
    // Is the path a folder?
    if (!is_dir($path)) {
        Log::add(__METHOD__ . ' ' . Text::sprintf('JLIB_FILESYSTEM_ERROR_PATH_IS_NOT_A_FOLDER', __METHOD__, $path), Log::WARNING, 'jerror');
        return false;
    }
    // Read the source directory
    if (!($handle = @opendir($path))) {
        return $arr;
    }
    if (\count($excludefilter)) {
        $excludefilter_string = '/(' . implode('|', $excludefilter) . ')/';
    } else {
        $excludefilter_string = '';
    }
    while (($file = readdir($handle)) !== false) {
        if ($file != '.' && $file != '..' && !\in_array($file, $exclude) && (empty($excludefilter_string) || !preg_match($excludefilter_string, $file))) {
            $dir = $path . '/' . $file;
            $isDir = is_dir($dir);
            if ($isDir) {
                // Removes filtered directories
                if (preg_match("/{$filter}/", $file)) {
                    if ($fullpath) {
                        $arr[] = $dir;
                    } else {
                        $arr[] = $file;
                    }
                }
                if ($recurse) {
                    if (\is_int($recurse)) {
                        $arr2 = $this->_folders($dir, $filter, $recurse - 1, $fullpath, $exclude, $excludefilter);
                    } else {
                        $arr2 = $this->_folders($dir, $filter, $recurse, $fullpath, $exclude, $excludefilter);
                    }
                    $arr = array_merge($arr, $arr2);
                }
            }
        }
    }
    closedir($handle);
    return $arr;
}