private static function directoryTreeBuilder($dir, $ignore, $mode = Merville::LIVE_MODE, $parents = null) { if ($dh = opendir($dir)) { $node = new DirectoryEntry($dir, $parents); $new_parents = $parents; if (is_null($new_parents)) { $new_parents = array(); } else { $new_parents[] = $node; } while (($entry = readdir($dh)) !== false) { if ($entry == '.' || $entry == '..') { continue; } $path = $dir . DIRECTORY_SEPARATOR . $entry; if (is_dir($path) && in_array($entry, $ignore['folders'])) { continue; } if (!is_dir($path) && in_array($entry, $ignore['files'])) { continue; } $file_details = static::pathinfo($path); if (is_dir($path)) { $entry = static::directoryTreeBuilder($path, $ignore, $mode, $new_parents); } elseif (in_array($file_details['extension'], Merville::$VALID_MARKDOWN_EXTENSIONS)) { $entry = new DirectoryEntry($path, $new_parents); if ($mode === Merville::STATIC_MODE) { $entry->uri .= '.html'; } } if ($entry instanceof DirectoryEntry) { $node->value[$entry->uri] = $entry; } } $node->sort(); $node->first_page = $node->get_first_page(); $index_key = $mode === Merville::LIVE_MODE ? 'index' : 'index.html'; if (isset($node->value[$index_key])) { $node->value[$index_key]->first_page = $node->first_page; $node->index_page = $node->value[$index_key]; } else { $node->index_page = false; } return $node; } }