forked from Adleraci/adlerka.top
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
function renderDynamicPage($page_file): array
 | 
						|
{
 | 
						|
    require_once $page_file;
 | 
						|
    $page_parameters = get_parameters();
 | 
						|
    $page_content = render();
 | 
						|
    return ["output" => $page_content, "parameters" => $page_parameters];
 | 
						|
}
 | 
						|
 | 
						|
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];
 | 
						|
}
 | 
						|
 | 
						|
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"];
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    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);
 | 
						|
} |