]+)><\/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 renderPage($page_name = null, $site_name = null): array { global $routerConfig; global $routerRequest; if(!$site_name) { $site_name = $routerRequest["site_name"]; } if(!$page_name){ $page_name = $routerRequest["page_name"]; } $dynamic_page_file = $routerConfig["page_dir"] . $site_name . "/" . $page_name . ".php"; $page_file = $routerConfig["page_dir"] . $site_name . "/" . $page_name . ".html"; if (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["page"]["default_permissions"]; } 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["page"]["default_secret"]; } } else{ $is_secret_page = $routerConfig["page"]["default_secret"]; } if($page_required_permission > $_SESSION["privilege_level"]){ 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 = str_replace("__DEFAULT_LINK__", "/" . $routerConfig["default_site"] . "/" . $routerConfig["default_page"], $pageMetadata["output"]); http_response_code(403); } } if(!is_string($page)){ $page = ""; } return [ "PageContent" => $page, "PageName" => $page_name, "SiteName" => $site_name, ]; } function getPage($site_name_in = null, $page_name_in = null): string { $page_tmp = renderPage($page_name_in, $site_name_in); $page = $page_tmp["PageContent"]; $page_name = $page_tmp["PageName"]; $site_name = $page_tmp["SiteName"]; global $routerConfig; $skeleton = file_get_contents($routerConfig["template_dir"] . "skeleton.html"); $footer = file_get_contents($routerConfig["template_dir"] . "footer.html"); if(!empty($pageMetadata["parameters"]["page_title"])){ $page_title = $pageMetadata["parameters"]["page_title"]; } else{ $page_title = $page_name; } $dynamic_style = doDynamicStyling(); $dynamic_script_data = [ "currentPage" => $page_name, "currentSite" => $site_name, "currentTitle" => $page_title, "defaultPage" => $routerConfig["default_page"], "defaultSite" => $routerConfig["default_site"], ]; if(isLoggedIn()){ $dynamic_script_data += [ "UserInfo_FirstName" => $_SESSION["FirstName"], "UserInfo_LastName" => $_SESSION["LastName"], "UserInfo_Nickname" => $_SESSION["Nickname"], "UserInfo_Email" => $_SESSION["Email"], "UserInfo_MinecraftNick" => $_SESSION["MinecraftNick"], ]; } $dynamic_script = generateScriptData($dynamic_script_data); $navigation = generateNavigation(); $out = $skeleton; $out = str_replace("__TEMPLATE__NAV__", $navigation, $out); $out = str_replace("__TEMPLATE__PAGE__", $page, $out); $out = str_replace("__TEMPLATE__FOOTER__", $footer, $out); $out = str_replace("__TEMPLATE__DYNAMIC__SCRIPT__", $dynamic_script, $out); $out = str_replace("__TEMPLATE__DYNAMIC__STYLE__", $dynamic_style, $out); if($routerConfig["inlining"]) { require_once "lib/inliner.php"; $out = inlineLocalStylesFromHref($out); $out = inlineScriptFromSrc($out); } return str_replace("__TEMPLATE_PAGE_TITLE__", $page_title, $out); } function getPageEndpoint($page_name, $site_name) :array { $page_location = "/" . $site_name . "/" . $page_name; $page_tmp = renderPage($page_name, $site_name); return [ "Status" => "Success", "Page" => $page_tmp["PageContent"], "PageLocation" => $page_location, ]; }