diff --git a/lib/Pico.php b/lib/Pico.php index cf2ea44..53c2bde 100644 --- a/lib/Pico.php +++ b/lib/Pico.php @@ -650,13 +650,9 @@ class Pico } // merge $config of config/*.config.php files - $configFiles = glob($this->getConfigDir() . '?*.config.php', GLOB_MARK); - if ($configFiles) { - foreach ($configFiles as $configFile) { - if (substr($configFile, -1) !== '/') { - $this->config += $includeClosure($configFile); - } - } + $configFiles = $this->getFilesGlob($this->getConfigDir() . '?*.config.php'); + foreach ($configFiles as $configFile) { + $this->config += $includeClosure($configFile); } // merge default config @@ -1856,6 +1852,39 @@ class Pico return $result; } + /** + * Returns all files in a directory matching a libc glob() pattern + * + * @see https://secure.php.net/manual/en/function.glob.php + * PHP's glob() function + * @param string $pattern the pattern to search for; see PHP's glob() + * function for details + * @param int $order specify whether and how files should be sorted; + * use Pico::SORT_ASC for a alphabetical ascending order (this is the + * default behaviour), Pico::SORT_DESC for a descending order or + * Pico::SORT_NONE to leave the result unsorted + * @return array list of found files + */ + public function getFilesGlob($pattern, $order = self::SORT_ASC) + { + $result = array(); + $sortFlag = ($order === self::SORT_NONE) ? GLOB_NOSORT : 0; + + $files = glob($pattern, GLOB_MARK | $sortFlag); + if ($files) { + foreach ($files as $file) { + // exclude dirs and files ending with a ~ (vim/nano backup) or # (emacs backup) + if (in_array(substr($file, -1), array('/', '~', '#'))) { + continue; + } + + $result[] = $file; + } + } + + return ($order === self::SORT_DESC) ? array_reverse($result) : $result; + } + /** * Makes a relative path absolute to Pico's root dir *