diff --git a/App/Wrappers/TwigWrapper.php b/App/Wrappers/TwigWrapper.php new file mode 100644 index 0000000..82ce8d7 --- /dev/null +++ b/App/Wrappers/TwigWrapper.php @@ -0,0 +1,79 @@ +loader = new FilesystemLoader(dirname($_SERVER["DOCUMENT_ROOT"]) . "/Templates/"); + $this->twig = new Environment($this->loader, ["debug" => true]); + + if (session_status() == PHP_SESSION_NONE) { + session_start(); + } + + + $this->twig->addGlobal('_SESSION_', $_SESSION); + + $this->twig->addGlobal('_ALGOLIA_INDEX_NAME_', Configuration::GetConfig("Algolia", "IndexName")); + $this->twig->addGlobal('_ALGOLIA_APP_ID_', Configuration::GetConfig("Algolia", "AppID")); + $this->twig->addGlobal('_ALGOLIA_SEARCH_ONLY_API_KEY_', Configuration::GetConfig("Algolia", "APIKeys", "SearchOnly")); + + $this->twig->addGlobal('_CURRENT_PAGE_', strtok($_SERVER['REQUEST_URI'], '?')); + $this->twig->addGlobal('_CURRENT_URI_', urlencode("http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}")); + $this->twig->addGlobal('_USER_TIMEZONE_OFFSET_', 60); + + + $this->twig->addExtension(new FiltersExtension()); + $this->twig->addExtension(new FunctionExtensions($this->twig)); + $this->twig->addExtension(new NavigationExtension()); + $this->twig->addExtension(new StringManipulationExtension()); + + $this->twig->addExtension(new TwigTests()); + } + + { + $twigRenderer = new TwigWrapper(); + $twigRenderer->RenderTwig($twigRenderer->GuessTargetTwigFile(), $arguments); + } + + { + $twigRenderer = new TwigWrapper(); + echo $twigRenderer->twig->render($target, $arguments); + die(); + } + + private function GuessTargetTwigFile() : string + { + $twigFile = str_replace(search: ".php",replace: ".html.twig", subject: $_SERVER['REQUEST_URI']); + if($twigFile == "/") + $twigFile = "/index.html.twig"; + + $pageTemplateDirectory = __DIR__ . "/../../Templates/Pages"; + + if(!file_exists($pageTemplateDirectory . $twigFile)) + return "ErrorPages/404.html.twig"; + + return "Pages" . $twigFile; + } +}