From f065f4739ae477d8877805463017f2e7b15e2db5 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Thu, 3 Dec 2020 21:22:27 +0100 Subject: [PATCH] page: move getoutput() to render method --- article.inc.php | 38 ++++++++++++++++++++++++++++++++++++++ page.inc.php | 7 ++++--- page.php | 38 +------------------------------------- widget/nieuws.php | 2 +- 4 files changed, 44 insertions(+), 41 deletions(-) diff --git a/article.inc.php b/article.inc.php index b676dd0..c630898 100644 --- a/article.inc.php +++ b/article.inc.php @@ -46,6 +46,8 @@ class ArchiveArticle if (preg_match('{

(.*?)

\s*(.*)}s', $this->body, $titlematch)) { list (, $this->title, $this->body) = $titlematch; } + + return $this->raw; } function __get($col) @@ -202,6 +204,42 @@ class ArchiveArticle ); } } + + function render($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 = $User && property_exists($User, 'login') && $User->login ? 'logout' : 'login'; + $doc = preg_replace('{\s*<([a-z]+) class="'.$hideclass.'">.*?}s', '', $doc); + + return preg_replace_callback( + '{ \[\[ ([^] ]+) ([^]]*) \]\] }x', + function ($sub) use ($blocks) { + list ($placeholder, $name, $params) = $sub; + $html = $blocks[$name] ?? + $this->widget($name, explode(' ', $params)); + if (empty($html) or $html[0] != '<') { + $html = "$html"; + } + $attr = sprintf(' data-dyn="%s"', is_numeric($name) ? '' : $name.$params); + # contents with identifier in first tag + return preg_replace( '/(?=>)/', $attr, $html, 1); + }, + $doc + ); + } } class PageSearch diff --git a/page.inc.php b/page.inc.php index 137d266..78cca99 100644 --- a/page.inc.php +++ b/page.inc.php @@ -1,11 +1,12 @@ render(@$Place); include_once 'head.inc.php'; print "
\n"; ob_start(); -include 'menu.inc.html'; +$menu = new ArchiveArticle('menu.inc.html'); +print $menu->raw; ob_start(); if ($User and property_exists($User, 'login') and $User->login) { print '\n"; } -$nav = getoutput(['login' => ob_get_clean()]); +$nav = $menu->render(['login' => ob_get_clean()]); $nav = preg_replace_callback('{(.*?)}', function ($m) { $request = $_SERVER['REQUEST_URI']; diff --git a/page.php b/page.php index d5c78cd..214f9d2 100644 --- a/page.php +++ b/page.php @@ -8,42 +8,6 @@ function abort($body, $status = NULL) { exit; } -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 = $User && property_exists($User, 'login') && $User->login ? 'logout' : 'login'; - $doc = preg_replace('{\s*<([a-z]+) class="'.$hideclass.'">.*?}s', '', $doc); - - return preg_replace_callback( - '{ \[\[ ([^] ]+) ([^]]*) \]\] }x', - function ($sub) use ($blocks) { - list ($placeholder, $name, $params) = $sub; - $html = $blocks[$name] ?? - placeholder_include($name, explode(' ', $params)); - if (empty($html) or $html[0] != '<') { - $html = "$html"; - } - $attr = sprintf(' data-dyn="%s"', is_numeric($name) ? '' : $name.$params); - # contents with identifier in first tag - return preg_replace( '/(?=>)/', $attr, $html, 1); - }, - $doc - ); -} - # custom error handling define('DOCROOT', getcwd()); @@ -61,7 +25,7 @@ function fail($error) include_once 'page.inc.php'; ob_start(); require '500.inc.html'; - print getoutput(['debug' => htmlspecialchars($error)]); + print $Page->render(['debug' => htmlspecialchars($error)]); } set_exception_handler('fail'); diff --git a/widget/nieuws.php b/widget/nieuws.php index 977357e..4f4fd45 100644 --- a/widget/nieuws.php +++ b/widget/nieuws.php @@ -74,4 +74,4 @@ if (@$Place['view'] === 'toc') { } ob_start(); shownews($articles, @$Place['n'] ?: 5); -print getoutput(); +print $Page->render(); -- 2.30.0