$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 = file_get_contents($routerConfig["template_dir"] . "404.html"); } $pageMetadata = parsePageTag($page); $page = $pageMetadata["output"]; print_r($pageMetadata["parameters"]); 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"])){ $is_secret_page = intval($pageMetadata["parameters"]["secret"]); } else{ $is_secret_page = $routerConfig["default_page_secret"]; } if($page_required_permission < $_SESSION["privilegelevel"]){ if($is_secret_page == 1) { $page = file_get_contents($routerConfig["template_dir"] . "404.html"); //fake 404 error http_response_code(404); } else{ $page = file_get_contents($routerConfig["template_dir"] . "403.html"); //deny access if doesnt have permissions http_response_code(403); } } if(!empty($pageMetadata["parameters"]["page_title"])){ $page_title = $pageMetadata["parameters"]["page_title"]; } else{ $page_title = $page_name; } $navpages = generateNavigation(); $nav = str_replace("__NAV_PAGES__", $navpages, $nav); $out = $skeleton; $out = str_replace("__TEMPLATE__NAV__", $nav, $out); $out = str_replace("__TEMPLATE__PAGE__", $page, $out); return str_replace("__TEMPLATE_PAGE_TITLE__", $page_title, $out); }