fipamothemekit/engine/ThemeEngine.php
are0h a70bb7b2b0 Theme folder clean up
Cleaned up the themes folder since it did not need the additional folder
depth to manage bundled scripts anymore. Updated the theme engine
accordingly.
2023-04-06 20:07:02 -07:00

156 lines
6.3 KiB
PHP

<?php
namespace engine;
class ThemeEngine
{
public $data = [];
public $loader;
public $twig;
public function __construct(string $themePath)
{
$var = [];
$this->themePath = $themePath;
//$path = explode('/', $themeAssetPath);
//$this->themeFolder = $path[4];
$this->settings = json_decode(
file_get_contents('./data/settings.json'),
true
);
$this->posts = json_decode(file_get_contents('./data/posts.json'), true);
$this->archives = json_decode(
file_get_contents('./data/archives.json'),
true
);
$this->loader = new \Twig\Loader\FilesystemLoader(
$themePath . '/'
);
$this->twig = new \Twig\Environment($this->loader, []);
$this->router($_SERVER['REQUEST_URI']);
}
public function router(string $request)
{
$pageInfo = [
'keywords' => $this->settings['keywords'],
'description' => $this->settings['description'],
'image' => $this->themePath . '/assets/images/global/default-bg.jpg',
];
$featureList = explode(',', $this->posts['feature']);
$fileList = explode(',', $this->posts['files']);
$images = [];
$files = [];
foreach ($featureList as $file) {
$item = trim($file);
$ext = pathinfo($item, PATHINFO_EXTENSION);
if ($item != null || $item != '') {
array_push($images, ['file' => $item, 'type' => trim($ext)]);
}
}
foreach ($fileList as $file) {
$item = trim($file);
$ext = pathinfo($item, PATHINFO_EXTENSION);
if ($item != null || $item != '') {
array_push($files, ['file' => $item, 'type' => trim($ext)]);
}
}
$menu = $this->settings['menu'];
switch ($request) {
case '/':
$recent = $this->posts['recent_posts'];
$featured = $this->posts['featured_posts'];
$template = 'index.twig';
$content = $this->posts['index-content-no-image'];
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themePath, // for theme kit
'title' => 'This is Fipamo',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themePath . '/assets/images/global/default-bg.jpg',
'recent' => $recent,
'featured' => $featured,
'info' => $pageInfo,
'menu' => $menu,
'content' => $content,
'media' => $images,
'files' => $files,
];
break;
case '/page':
$content = $this->posts['content'];
$meta = $this->posts['meta'];
$template = $request . '.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themePath, // for theme kit
'title' => 'Page Title',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themePath . '/assets/images/global/default-bg.jpg',
'content' => $content,
'meta' => $meta,
'info' => $pageInfo,
'menu' => $menu,
'media' => $images,
'files' => $files,
];
break;
case '/tags':
$tags = $this->settings['tag_list'];
$template = 'tags.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themePath, // for theme kit
'title' => 'Pages Tagged as Tag',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themePath . '/assets/images/global/default-bg.jpg',
'tag_list' => $tags,
'info' => $pageInfo,
'menu' => $menu,
];
break;
case '/archive':
$archive = $this->archives;
$template = 'archive.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themePath, // for theme kit
'title' => 'Archive',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themePath . '/assets/images/global/default-bg.jpg',
'archives' => $archive['archives'],
'info' => $pageInfo,
'menu' => $menu,
];
break;
default:
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
throw new \ErrorException($errstr, $errno, 0, $errfile, $errline);
$error = $errstr;
});
$template = 'error.twig';
$pageOptions = [
'debug' => true, // for theme kit
'theme' => $this->themePath, // for theme kit
'title' => 'Uh oh',
'dynamicRender' => $this->settings['dynamicRender'],
'background' => $this->themePath . '/assets/images/global/default-bg.jpg',
'info' => $pageInfo,
'content' => "This page is not defined",
'menu' => $menu,
'media' => $images,
'files' => $files,
];
break;
}
echo $this->twig->render($template, $pageOptions);
}
}