/** * @param Project $project */ function __construct(Project &$project) { $this->project = $project; $this->finders = ['findBookDirs' => function ($books_path) { $dirs = []; if (is_dir($books_path)) { foreach (new DirectoryIterator($books_path) as $dir) { if (!$dir->isDot() && $dir->isDir()) { $dirs[] = $dir->getPathname(); } } } return $dirs; }, 'findBookPageFiles' => function ($pages_path) { $files = []; if (is_dir($pages_path)) { foreach (new DirectoryIterator($pages_path) as $file) { if ($file->isFile() && $file->getExtension() == 'md') { $files[] = $file->getPathname(); } } sort($files); } return $files; }, 'findVideoFiles' => function ($videos_path) { $files = []; if (is_dir($videos_path)) { foreach (new DirectoryIterator($videos_path) as $file) { if ($file->isFile() && $file->getExtension() == 'md') { $files[] = $file->getPathname(); } } sort($files); } return $files; }, 'findReleaseFiles' => function ($releases_path) { $files = []; if (is_dir($releases_path)) { foreach (new DirectoryIterator($releases_path) as $file) { if ($file->isFile() && $file->getExtension() == 'md') { $version_number = substr($file->getFilename(), 0, strlen($file->getFilename()) - 3); if (Shade::isValidVersionNumber($version_number)) { $files[$version_number] = $file->getPathname(); } } } uksort($files, function ($a, $b) { return version_compare($b, $a); }); } return $files; }, 'findWhatsNewFiles' => function ($whats_new_articles_path) { $files = []; if (is_dir($whats_new_articles_path)) { foreach (new DirectoryIterator($whats_new_articles_path) as $version_dir) { if (!$version_dir->isDot() && $version_dir->isDir() && Shade::isValidVersionNumber($version_dir->getFilename())) { $version_num = $version_dir->getFilename(); foreach (new DirectoryIterator($version_dir->getPathname()) as $file) { if ($file->isFile() && $file->getExtension() == 'md') { $files[$version_num][] = $file->getPathname(); } } } } if (count($files)) { ksort($files); foreach ($files as $version_num => $version_articles) { sort($files[$version_num]); } } } return $files; }]; }