$page_content, "parameters" => $page_parameters]; } function parsePageTag($input): array { // Define the pattern for the tag $pattern = '/]+)><\/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]; } function getPage($page_name = null): array|false|string { global $routerConfig; global $routerRequest; if(!$page_name){ $page_name = $routerRequest["page_name"]; } $dynamic_page_file = $routerConfig["page_dir"] . $routerRequest["subdomain"] . "/" . $page_name . ".php"; $page_file = $routerConfig["page_dir"] . $routerRequest["subdomain"] . "/" . $page_name . ".html"; $dynamic_page_file_global = $routerConfig["page_dir"] . "global/" . $page_name . ".php"; $page_file_global = $routerConfig["page_dir"] . "global/" . $page_name . ".html"; $skeleton = file_get_contents($routerConfig["template_dir"] . "skeleton.html"); $nav = file_get_contents($routerConfig["template_dir"] . "nav.html"); if (file_exists($dynamic_page_file_global)){ $pageMetadata = renderDynamicPage($dynamic_page_file_global); $page = $pageMetadata["output"]; } elseif (file_exists($page_file_global)){ $page_tmp = file_get_contents($page_file_global); $pageMetadata = parsePageTag($page_tmp); $page = $pageMetadata["output"]; } elseif (file_exists($dynamic_page_file)){ $pageMetadata = renderDynamicPage($dynamic_page_file); $page = $pageMetadata["output"]; } elseif (file_exists($page_file)){ $page_tmp = file_get_contents($page_file); $pageMetadata = parsePageTag($page_tmp); $page = $pageMetadata["output"]; } else{ $page_tmp = file_get_contents($routerConfig["template_dir"] . "404.html"); $pageMetadata = parsePageTag($page_tmp); $page = $pageMetadata["output"]; http_response_code(404); } 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"])){ $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"]; } } else{ $is_secret_page = $routerConfig["default_page_secret"]; } $curprivlvl = $_SESSION["privilegelevel"]; echo "Need $page_required_permission, u have: $curprivlvl"; if($page_required_permission > $_SESSION["privilegelevel"]){ if($is_secret_page == 1) { $page_tmp = file_get_contents($routerConfig["template_dir"] . "404.html"); $pageMetadata = parsePageTag($page_tmp); $page = $pageMetadata["output"]; http_response_code(404); } else{ $page_tmp = file_get_contents($routerConfig["template_dir"] . "403.html"); $pageMetadata = parsePageTag($page_tmp); $page = $pageMetadata["output"]; http_response_code(403); } } if(!empty($pageMetadata["parameters"]["page_title"])){ $page_title = $pageMetadata["parameters"]["page_title"]; } else{ $page_title = $page_name; } $site_name = $routerRequest["subdomain"]; if(!empty($pageMetadata["parameters"]["page_style"])){ $style_location = $pageMetadata["parameters"]["page_style"]; } else{ $style_location = "assets/styles/$site_name/$page_name.css"; } if(file_exists($style_location)) { $style_tag = $style_location; } else{ $style_tag = ""; } if(!empty($pageMetadata["parameters"]["page_script"])){ $script_location = $pageMetadata["parameters"]["page_script"]; } else{ $script_location = "assets/scripts/$site_name/$page_name.js"; } if(file_exists($style_location)) { $script_tag = $script_location; } else{ $script_tag = ""; } $navpages = generateNavigation(); $nav = str_replace("__NAV_PAGES__", $navpages, $nav); $out = $skeleton; $out = str_replace("__TEMPLATE__NAV__", $nav, $out); $out = str_replace("__TEMPLATE_PAGE_STYLE_TAG__", $style_tag, $out); $out = str_replace("__TEMPLATE_PAGE_SCRIPT_TAG__", $script_tag, $out); $out = str_replace("__TEMPLATE__PAGE__", $page, $out); return str_replace("__TEMPLATE_PAGE_TITLE__", $page_title, $out); }