2024-01-16 19:24:40 +01:00
|
|
|
<?php
|
2024-02-01 09:10:55 +01:00
|
|
|
function renderDynamicPage($page_file): array
|
2024-01-16 20:43:57 +01:00
|
|
|
{
|
2024-02-04 09:01:28 +01:00
|
|
|
return require $page_file;
|
2024-01-16 20:43:57 +01:00
|
|
|
}
|
|
|
|
|
2024-01-31 23:07:12 +01:00
|
|
|
function parsePageTag($input): array
|
|
|
|
{
|
|
|
|
// Define the pattern for the tag
|
|
|
|
$pattern = '/<page\s+([^>]+)><\/page>/i';
|
|
|
|
|
|
|
|
// Check if the pattern matches the input
|
|
|
|
if (preg_match($pattern, $input, $matches)) {
|
|
|
|
// Extract parameters
|
|
|
|
$parameters = [];
|
|
|
|
if (preg_match_all('/(\w+)="([^"]+)"/', $matches[1], $paramMatches, PREG_SET_ORDER)) {
|
|
|
|
foreach ($paramMatches as $paramMatch) {
|
|
|
|
$parameters[$paramMatch[1]] = $paramMatch[2];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove the tag from the input
|
|
|
|
$output = preg_replace($pattern, '', $input, 1);
|
|
|
|
|
|
|
|
return ['parameters' => $parameters, 'output' => $output];
|
|
|
|
}
|
|
|
|
|
|
|
|
// If no match is found, return the original input
|
|
|
|
return ['parameters' => [], 'output' => $input];
|
|
|
|
}
|
|
|
|
|
2024-01-31 22:05:23 +01:00
|
|
|
function getPage($page_name = null): array|false|string
|
|
|
|
{
|
2024-01-16 20:43:57 +01:00
|
|
|
global $routerConfig;
|
|
|
|
global $routerRequest;
|
2024-01-16 19:39:54 +01:00
|
|
|
|
2024-01-16 20:43:57 +01:00
|
|
|
if(!$page_name){
|
|
|
|
$page_name = $routerRequest["page_name"];
|
2024-01-16 19:39:54 +01:00
|
|
|
}
|
2024-01-16 19:24:40 +01:00
|
|
|
|
2024-01-16 20:57:51 +01:00
|
|
|
$dynamic_page_file = $routerConfig["page_dir"] . $routerRequest["subdomain"] . "/" . $page_name . ".php";
|
|
|
|
$page_file = $routerConfig["page_dir"] . $routerRequest["subdomain"] . "/" . $page_name . ".html";
|
2024-01-16 19:24:40 +01:00
|
|
|
|
2024-01-16 20:43:57 +01:00
|
|
|
$skeleton = file_get_contents($routerConfig["template_dir"] . "skeleton.html");
|
|
|
|
$nav = file_get_contents($routerConfig["template_dir"] . "nav.html");
|
2024-01-16 19:24:40 +01:00
|
|
|
|
2024-02-02 12:38:18 +01:00
|
|
|
if (file_exists($dynamic_page_file)){
|
2024-02-01 09:10:55 +01:00
|
|
|
$pageMetadata = renderDynamicPage($dynamic_page_file);
|
|
|
|
|
|
|
|
$page = $pageMetadata["output"];
|
2024-01-16 19:24:40 +01:00
|
|
|
}
|
|
|
|
elseif (file_exists($page_file)){
|
2024-02-01 09:24:58 +01:00
|
|
|
$page_tmp = file_get_contents($page_file);
|
2024-02-01 09:10:55 +01:00
|
|
|
|
2024-02-01 09:24:58 +01:00
|
|
|
$pageMetadata = parsePageTag($page_tmp);
|
2024-02-01 09:10:55 +01:00
|
|
|
$page = $pageMetadata["output"];
|
2024-01-16 19:24:40 +01:00
|
|
|
}
|
|
|
|
else{
|
2024-02-01 09:38:16 +01:00
|
|
|
$page_tmp = file_get_contents($routerConfig["template_dir"] . "404.html");
|
|
|
|
$pageMetadata = parsePageTag($page_tmp);
|
|
|
|
$page = $pageMetadata["output"];
|
|
|
|
http_response_code(404);
|
2024-01-16 19:38:42 +01:00
|
|
|
}
|
2024-01-31 23:07:12 +01:00
|
|
|
|
|
|
|
if(!empty($pageMetadata["parameters"]["minimal_permission_level"])){
|
|
|
|
$page_required_permission = intval($pageMetadata["parameters"]["minimal_permission_level"]);
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
$page_required_permission = $routerConfig["default_page_permission_level"];
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!empty($pageMetadata["parameters"]["secret"])){
|
2024-02-01 10:06:50 +01:00
|
|
|
$origSecret = $pageMetadata["parameters"]["secret"];
|
|
|
|
if ($origSecret == "yes"){
|
|
|
|
$is_secret_page = 1;
|
|
|
|
}
|
|
|
|
elseif ($origSecret == "no"){
|
|
|
|
$is_secret_page = 0;
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
$is_secret_page = $routerConfig["default_page_secret"];
|
|
|
|
}
|
2024-01-31 23:07:12 +01:00
|
|
|
}
|
|
|
|
else{
|
|
|
|
$is_secret_page = $routerConfig["default_page_secret"];
|
|
|
|
}
|
|
|
|
|
2024-02-01 10:19:28 +01:00
|
|
|
|
2024-02-03 16:08:26 +01:00
|
|
|
if($page_required_permission > $_SESSION["privilege_level"]){
|
2024-01-31 23:07:12 +01:00
|
|
|
if($is_secret_page == 1) {
|
2024-02-01 09:38:16 +01:00
|
|
|
$page_tmp = file_get_contents($routerConfig["template_dir"] . "404.html");
|
|
|
|
$pageMetadata = parsePageTag($page_tmp);
|
|
|
|
$page = $pageMetadata["output"];
|
2024-02-01 09:10:55 +01:00
|
|
|
http_response_code(404);
|
2024-01-31 23:07:12 +01:00
|
|
|
}
|
|
|
|
else{
|
2024-02-01 09:38:16 +01:00
|
|
|
$page_tmp = file_get_contents($routerConfig["template_dir"] . "403.html");
|
|
|
|
$pageMetadata = parsePageTag($page_tmp);
|
|
|
|
$page = $pageMetadata["output"];
|
2024-02-01 09:10:55 +01:00
|
|
|
http_response_code(403);
|
2024-01-31 23:07:12 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-03 16:54:50 +01:00
|
|
|
if(!is_string($page)){
|
|
|
|
$page = "";
|
|
|
|
}
|
|
|
|
|
2024-01-31 23:07:12 +01:00
|
|
|
if(!empty($pageMetadata["parameters"]["page_title"])){
|
|
|
|
$page_title = $pageMetadata["parameters"]["page_title"];
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
$page_title = $page_name;
|
|
|
|
}
|
|
|
|
|
2024-02-04 09:19:35 +01:00
|
|
|
$dynastyle = "<style>";
|
2024-02-04 09:11:01 +01:00
|
|
|
if(isLoggedIn() && !empty($_SESSION["favorite_color"]) && is_int($_SESSION["favorite_color"]) && $_SESSION["favorite_color"] <= 4294967295){
|
2024-02-04 09:19:35 +01:00
|
|
|
$color = dechex($_SESSION["favorite_color"]);
|
|
|
|
$dynastyle .= "--root{ --favorite-color: #$color;";
|
2024-02-04 09:11:01 +01:00
|
|
|
}
|
2024-02-04 09:19:35 +01:00
|
|
|
$dynastyle .= "</style>";
|
2024-02-04 09:11:01 +01:00
|
|
|
|
2024-01-16 20:43:57 +01:00
|
|
|
$navpages = generateNavigation();
|
2024-01-16 19:38:42 +01:00
|
|
|
|
|
|
|
$nav = str_replace("__NAV_PAGES__", $navpages, $nav);
|
|
|
|
|
|
|
|
$out = $skeleton;
|
|
|
|
$out = str_replace("__TEMPLATE__NAV__", $nav, $out);
|
|
|
|
$out = str_replace("__TEMPLATE__PAGE__", $page, $out);
|
2024-02-04 09:11:01 +01:00
|
|
|
$out = str_replace("__TEMPLATE__DYNASTYLE__", $dynastyle, $out);
|
2024-01-31 23:07:12 +01:00
|
|
|
return str_replace("__TEMPLATE_PAGE_TITLE__", $page_title, $out);
|
2024-01-18 11:49:38 +01:00
|
|
|
}
|