ach ($paths as $folder) { $path = trim(Folder::getRelativePath($folder), '/'); if (is_file("{$folder}/{$filename}")) { $modified = filemtime("{$folder}/{$filename}"); } else { $modified = 0; } $basename = $this->base . $name; $list[$path] = [$basename => ['file' => "{$path}/{$filename}", 'modified' => $modified]]; } return $list; } /** * Detects all directories with a configuration file and returns them with last modification time. * * @param string $folder Location to look up from. * @param string $pattern Pattern to match the file. Pattern will also be removed from the key. * @param int $levels Maximum number of recursive directories. * @return array * @internal */ protected function detectRecursive($folder, $pattern, $levels) { $path = trim(Folder::getRelativePath($folder), '/'); if (is_dir($folder)) { // Find all system and user configuration files. $options = [ 'levels' => $levels, 'compare' => 'Filename', 'pattern' => $pattern, 'filters' => [ 'pre-key' => $this->base, 'key' => $pattern, 'value' => function (\RecursiveDirectoryIterator $file) use ($path) { return ['file' => "{$path}/{$file->getSubPathname()}", 'modified' => $file->getMTime()]; } ], 'key' => 'SubPathname' ]; $list = Folder::all($folder, $options); ksort($list); } else { $list = []; } return [$path => $list]; } /** * Detects all directories with the lookup file and returns them with last modification time. * * @param string $folder Location to look up from. * @param string $lookup Filename to be located (defaults to directory name). * @return array * @internal */ protected function detectInFolder($folder, $lookup = null) { $folder = rtrim($folder, '/'); $path = trim(Folder::getRelativePath($folder), '/'); if ($path === $folder) { $base = ''; } else { $base = $path ? substr($folder, 0, -strlen($path)) : $folder . '/'; } $list = []; if (is_dir($folder)) { $iterator = new \DirectoryIterator($folder); /** @var \DirectoryIterator $directory */ foreach ($iterator as $directory) { if (!$directory->isDir() || $directory->isDot()) { continue; } $name = $directory->getBasename(); $find = ($lookup ?: $name) . '.yaml'; $filename = "{$path}/{$name}/{$find}"; if (file_exists($base . $filename)) { $basename = $this->base . $name; $list[$basename] = ['file' => $filename, 'modified' => filemtime($base . $filename)]; } } } return $list; } /** * Detects all plugins with a configuration file and returns them with last modification time. * * @param string $folder Location to look up from. * @param string $pattern Pattern to match the file. Pattern will also be removed from the key. * @param int $levels Maximum number of recursive directories. * @return array * @internal */ protected function detectAll($folder, $pattern, $levels) { $path = trim(Folder::getRelativePath($folder), '/'); if (is_dir($folder)) { // Find all system and user configuration files. $options = [ 'levels' => $levels, 'compare' => 'Filename', 'pattern' => $pattern, 'filters' => [ 'pre-key' => $this->base, 'key' => $pattern, 'value' => static function (\RecursiveDirectoryIterator $file) use ($path) { return ["{$path}/{$file->getSubPathname()}" => $file->getMTime()]; } ], 'key' => 'SubPathname' ]; $list = Folder::all($folder, $options); ksort($list); } else { $list = []; } return $list; } }