]+)><\/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["subdomain"]; } 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["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"]; } 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 = $pageMetadata["output"]; http_response_code(403); } } if(!is_string($page)){ $page = ""; } return [ "PageContent" => $page, "PageName" => $page_name, "SiteName" => $site_name, ]; } function getPage($page_name_in = null, $site_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"); if(!empty($pageMetadata["parameters"]["page_title"])){ $page_title = $pageMetadata["parameters"]["page_title"]; } else{ $page_title = $page_name; } $dynamic_style = doDynamicStyling(); $dynamic_script = generateScriptData([ "currentPage" => $page_name, "currentSite" => $site_name, "currentTitle" => $page_title, "defaultPage" => $routerConfig["default_page"], ]); $navpages = generateNavigation(); $out = $skeleton; $out = str_replace("__TEMPLATE__NAV__", $navpages, $out); $out = str_replace("__TEMPLATE__PAGE__", $page, $out); $out = str_replace("__TEMPLATE__DYNASCRIPT__", $dynamic_script, $out); $out = str_replace("__TEMPLATE__DYNASTYLE__", $dynamic_style, $out); $out = inlineLocalStylesFromHref($out); $out = inlineScriptFromSrc($out); return str_replace("__TEMPLATE_PAGE_TITLE__", $page_title, $out); } function getPageEndpoint($page_name, $site_name) :array { global $routerRequest, $routerConfig; if(!empty($site_name)){ $subdomain = "$site_name."; } else{ $subdomain = ""; } $page_location = $routerConfig["protocol"] . $subdomain . $routerRequest["domain"] . "." . $routerRequest["tld"] . "/" . $page_name; $page_tmp = renderPage($page_name, $site_name); return [ "Status" => "Success", "Page" => $page_tmp["PageContent"], "PageLocation" => $page_location, ]; }