$error]);
}
set_exception_handler('fail');
register_shutdown_function(function () {
# display failure page for fatal exceptions
$error = error_get_last();
if (!($error['type'] & (E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR))) return;
fail("Fatal: $error[message] in $error[file]:$error[line]");
});
include_once 'auth.inc.php';
$Edit = isset($_GET['edit']);
# distinguish subpage Args from topmost Page script
$Args = '';
$Page = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']);
$Page = urldecode(trim($Page, '/')) ?: 'index';
while (TRUE) {
if (file_exists("$Page.php")) {
break;
}
$up = strrpos($Page, '/');
$Args = substr($Page, $up) . $Args;
$Page = substr($Page, 0, $up);
if ($up === FALSE) {
break;
}
}
# load static contents
ob_start(); # page body
ob_start(); # inner html
print '
'."\n\n";
$found = FALSE;
if (file_exists("$Page$Args/index.html")) {
$found = include "./$Page$Args/index.html";
}
elseif (file_exists("$Page$Args.html")) {
$found = include "./$Page$Args.html";
}
elseif (isset($User) and $User['admin']) {
$found = require './template.html';
}
print "
\n\n";
# execute dynamic code
if ($Page) {
function getoutput($blocks = [])
{
$rep = [];
foreach ($blocks as $name => $html) {
$rep["[[$name]]"] = sprintf('%s',
is_numeric($name) ? '' : "[[$name]]", $html
);
}
return str_replace(array_keys($rep), array_values($rep), ob_get_clean());
}
$found |= require "./$Page.php";
}
# global html
include_once 'page.inc.php';
if (!$found) {
# no resulting output
http_response_code(404);
ob_start();
require "./404.html";
print getoutput([ 'url' => htmlspecialchars($_SERVER['REQUEST_URI']) ]);
}