'.$name.' ontbreekt'; } ob_start(); $Page = $GLOBALS['Page'] . $GLOBALS['Args']; $Args = ''; $Place = $GLOBALS['Place']; foreach ($params as $param) { if ($set = strpos($param, '=')) { $Place[ substr($param, 0, $set) ] = substr($param, $set + 1); } elseif (!empty($param)) { $Args .= '/'.$param; } } try { include "widget/$name.php"; return ob_get_clean(); } catch (Exception $e) { return sprintf('%s', "fout in $name: {$e->getMessage()}" ); } } function getoutput($blocks = []) { $doc = ob_get_clean(); if (!empty($blocks['warn'])) { $warn = '

[[warn]]

'; if ($offset = strpos($doc, '')) { $doc = substr_replace($doc, "\n\n".$warn, $offset + 5, 0); } else { $doc = $warn . "\n\n" . $doc; } } # keep either login or logout parts depending on user level global $User; $hideclass = empty($User) ? 'login' : 'logout'; $doc = preg_replace('{\s*<(p|li|span) class="'.$hideclass.'">.*?}s', '', $doc); return preg_replace_callback( '{ (?%s', is_numeric($name) ? '' : $placeholder, # edit replacement preg_replace('{}', '', $html) # contents ); }, $doc ); } # custom error handling define('DOCROOT', getcwd()); set_include_path(implode(PATH_SEPARATOR, [ DOCROOT, __DIR__ ])); function fail($error) { http_response_code(500); if (!isset($Article)) { $Article = new ArchiveArticle(NULL); $Article->title = 'Fout'; } include_once 'page.inc.php'; ob_start(); require_once '500.inc.html'; print getoutput(['debug' => $error]); } set_exception_handler('fail'); define('E_FATAL', E_ERROR | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR); set_error_handler(function ($level, $error, $file, $line) { if ($level & E_FATAL) { fail($error); return; } return FALSE; }); register_shutdown_function(function () { # display failure page for fatal exceptions $error = error_get_last(); if (!($error['type'] & E_FATAL)) return; fail("Fatal: $error[message] in $error[file]:$error[line]"); }); error_reporting(error_reporting() & ~E_FATAL); # user login and control $User = NULL; include_once 'auth.inc.php'; $Edit = isset($_GET['edit']); # distinguish subpage Args from topmost Page script $Args = ''; $Page = preg_replace('/\?.*/', '', @$_SERVER['PATH_INFO'] ?: $_SERVER['REQUEST_URI']); $Page = urldecode(trim($Page, '/')) ?: 'index'; while (TRUE) { if (file_exists("$Page/.private")) { # access restriction if (empty($User)) { http_response_code(303); $target = urlencode($_SERVER['REQUEST_URI']); header("Location: /login?goto=$target"); exit; } $PageAccess = $Page; } if (file_exists("$Page/index.php")) { break; } $up = strrpos($Page, '/'); $Args = substr($Page, $up) . $Args; $Page = substr($Page, 0, $up); if ($up === FALSE) { break; } } $staticpage = NULL; if (file_exists("$Page$Args.html")) { $staticpage = "$Page$Args.html"; if (is_link($staticpage)) { $target = preg_replace('/\.html$/', '', readlink($staticpage)); header("HTTP/1.1 302 Shorthand"); header("Location: $target"); exit; } } elseif (file_exists("$Page$Args/index.html")) { $staticpage = "$Page$Args/index.html"; } elseif ($User and $User->admin("edit $Page$Args")) { $staticpage = (file_exists("$Page/template.inc.html") ? "$Page/template.inc.html" : 'template.inc.html'); } # prepare page contents require_once('article.inc.php'); $Article = new ArchiveArticle($staticpage); ob_start(); # page body $Place = [ 'user' => $User ? $User->login : '', 'url' => htmlspecialchars($_SERVER['REQUEST_URI']), ]; if (isset($Article->raw)) { if ($User and $User->admin("edit $Page$Args")) { # restore meta tags in static contents for editing foreach (array_reverse($Article->meta) as $metaprop => $val) { $Article->raw = sprintf( ''."\n", $metaprop, $val ) . $Article->raw; } } $Article->raw = '
'."\n\n".$Article->raw."
\n\n"; } # output dynamic and/or static html if (!$Page or require("./$Page/index.php")) { # static contents if (isset($Article->raw)) { print $Article->raw; } else { # no resulting output http_response_code(404); @require '404.inc.html'; } } include_once 'page.inc.php';