getSettings(); $this->menu = $settings['menu']; $this->theme = $settings['global']['theme']; $this->loader = new \Twig\Loader\FilesystemLoader('../content/themes/' . $this->theme); $this->twig = new \Twig\Environment($this->loader, []); $this->pageInfo = [ 'keywords' => isset($settings['global']['keywords']) ? $settings['global']['keywords'] : 'fipamo, blog, jamstack, php, markdown, js', 'description' => $settings['global']['descriptions'], 'image' => $settings['global']['base_url'] . $settings['global']['background'], 'baseURL' => $settings['global']['base_url'], ]; //move global theme image assets to public folder foreach ( new \DirectoryIterator('../content/themes/' . $this->theme . '/assets/images/global/') as $file ) { if ($file->isDot()) { continue; } if (!is_file('../public/assets/images/global/' . $file->getFileName())) { copy( '../content/themes/' . $this->theme . '/assets/images/global/' . $file->getFileName(), '../public/assets/images/global/' . $file->getFileName() ); } else { //image is already there, so chill } //print $file->getFilename() . "\n"; } //copy current theme assets to public //clear files in css and scripts folder $styles = glob('../public/assets/css/*'); // get all file names foreach ($styles as $file) { // iterate files if (is_file($file)) { //don't erase dashboard css if (!$file == '../public/assets/css/dash.css') { unlink($file); // delete file } } } $scripts = glob('../public/assets/scripts/*'); // get all file names foreach ($scripts as $file) { // iterate files if (is_file($file)) { if (!$file == '../public/assets/scripts/Start.js') { unlink($file); // delete file } } } //copy theme assets to public $newcss = glob('../content/themes/' . $this->theme . '/assets/css/*'); foreach ($newcss as $file) { // iterate files if (is_file($file)) { $path = explode('/', $file); copy($file, '../public/assets/css/' . $path[6]); } } $newjs = glob('../content/themes/' . $this->theme . '/assets/scripts/*'); foreach ($newjs as $file) { // iterate files if (is_file($file)) { $path = explode('/', $file); copy($file, '../public/assets/scripts/' . $path[6]); } } } public function renderPages() { $pages = (new Book())->getContents(); $recent = []; $featured = []; $limit = 4; foreach ($pages as $page) { $pageOptions = Sorting::page($page); $layout = $page['layout']; //new pages have no layout, so defautl for now if ($layout == '' || $layout == null) { $layout = 'page'; } $template = $layout . '.twig'; if (str_contains($layout, 'index')) { $location = '../public/index.html'; $dir = null; } else { // if page is a menu item, render the page on public root if ($page['menu'] == 'true') { $location = '../public/' . $page['slug'] . '.html'; $dir = '../public/'; } else { $location = '../public/' . $page['path'] . '/' . $page['slug'] . '.html'; $dir = '../public/' . $page['path']; } } $html = $this->twig->render($template, $pageOptions); DocTools::writeHTML($location, $html, $dir); } } public function renderArchive() { $archive = Sorting::archive(); $template = 'archive.twig'; $pageOptions = [ 'title' => 'Archive', 'background' => $this->pageInfo['image'], 'archives' => $archive, 'info' => $this->pageInfo, 'menu' => $this->menu, 'media' => [['file' => $this->pageInfo['image'], 'type' => trim(pathinfo($this->pageInfo['image'], PATHINFO_EXTENSION))]], ]; $html = $this->twig->render($template, $pageOptions); $location = '../public/archives.html'; DocTools::writeHTML($location, $html); } public function renderTags() { $list = Sorting::tags(); foreach ($list as $item) { $template = 'tags.twig'; $pageOptions = [ 'title' => 'Pages Tagged as ' . $item['tag_name'], 'background' => $this->pageInfo['image'], 'tag_list' => $item['pages'], 'info' => $this->pageInfo, 'menu' => $this->menu, 'media' => [['file' => $this->pageInfo['image'], 'type' => trim(pathinfo($this->pageInfo['image'], PATHINFO_EXTENSION))]], ]; $html = $this->twig->render($template, $pageOptions); $location = '../public/tags/' . $item['slug'] . '.html'; //if tags folder doesn't exist, make it if (!is_dir('../public/tags')) { mkdir('../public/tags', 0755, true); } else { } if (!is_file($location)) { file_put_contents($location, $html); } else { ($new = fopen($location, 'w')) or die('Unable to open file!'); fwrite($new, $html); fclose($new); } } } public function renderIndex() { //TODO: Need to fix this to account for new index templating system $pages = (new Book())->getContents(); $index = find($pages, ['layout' => 'index']); $template = 'index.twig'; $location = '../public/index.html'; $dir = null; $meta = [ 'who' => $index['author'], 'when' => $index['created'], ]; $pageOptions = [ 'title' => $index['title'], 'background' => $index['feature'], 'meta' => $meta, ]; $html = $this->twig->render($template, $pageOptions); DocTools::writeHTML($location, $html, $dir); } }