page: store placeholder values in $Page object
authorMischa POSLAWSKY <perl@shiar.org>
Thu, 3 Dec 2020 21:22:28 +0000 (22:22 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Sat, 19 Dec 2020 02:01:43 +0000 (03:01 +0100)
12 files changed:
article.inc.php
issue/index.php
login/index.php
login/post/index.php
mail/index.php
nieuws/index.php
page.inc.php
page.php
widget/login/commits.php
widget/login/list.php
widget/nieuws.php
widget/search.php

index c63089843c5d89f3da48fbb165683a2cda47491b..cff69ffdec449dcd44fccd1299abc2a793aa1d3e 100644 (file)
@@ -18,6 +18,7 @@ class ArchiveArticle
 {
        public $raw, $title, $body; # file contents
        public $meta = [];  # head metadata properties
+       public $place = []; # template variables replaced in render()
 
        function __construct($path)
        {
@@ -184,10 +185,9 @@ class ArchiveArticle
                $Page = clone $this;
                $Page->handler = $Page->handler . $Page->path; // .= with explicit getter
                $Page->path = '';
-               $Place = $GLOBALS['Place'];
                foreach ($params as $param) {
                        if ($set = strpos($param, '=')) {
-                               $Place[ substr($param, 0, $set) ] = substr($param, $set + 1);
+                               $Page->place[ substr($param, 0, $set) ] = substr($param, $set + 1);
                        }
                        elseif (!empty($param)) {
                                $Page->path .= '/'.$param;
@@ -205,11 +205,11 @@ class ArchiveArticle
                }
        }
 
-       function render($blocks = [])
+       function render()
        {
                $doc = ob_get_clean();
 
-               if (!empty($blocks['warn'])) {
+               if (!empty($this->place['warn'])) {
                        $warn = '<p class="warn">[[warn]]</p>';
                        if ($offset = strpos($doc, '</h2>')) {
                                $doc = substr_replace($doc, "\n\n".$warn, $offset + 5, 0);
@@ -226,9 +226,9 @@ class ArchiveArticle
 
                return preg_replace_callback(
                        '{ \[\[ ([^] ]+) ([^]]*) \]\] }x',
-                       function ($sub) use ($blocks) {
+                       function ($sub) {
                                list ($placeholder, $name, $params) = $sub;
-                               $html = $blocks[$name] ??
+                               $html = $this->place[$name] ??
                                        $this->widget($name, explode(' ', $params));
                                if (empty($html) or $html[0] != '<') {
                                        $html = "<span>$html</span>";
index 181d5b73e6380fec368787929fe291dace82030b..8c58f415de331bb8e23f42e8a4759e8fcd7fb2b2 100644 (file)
@@ -97,4 +97,4 @@ while ($row = $query->fetch()) {
        print "</a></div></li>\n";
 }
 print "</ul>\n";
-$Place['issuelist'] = ob_get_clean();
+$Page->place['issuelist'] = ob_get_clean();
index 4ecee456f8d77f52dcdbb8c751521cfa875d3377..e1f0cae048e58a2753b6a61dbb20ea46b025a0cc 100644 (file)
@@ -61,7 +61,7 @@ if (!$User or !$User->login) {
        ob_start();
        require_once 'login/form.inc.php';
        $Page->raw = ob_get_clean();
-       $Place['warn'] = $message;
+       $Page->place['warn'] = $message;
        return TRUE;
 }
 
index f4c77591f988d3d03c6cb80fb1cd8082d2158de4..276848e8dfa4aeffd00d13ccbea2a60eb4affd88 100644 (file)
@@ -19,16 +19,16 @@ else {
        $user = $User;
 }
 
-$Place['login/name'] = $user->name ?: 'bewoner';
-$Place['user'] = $user->login;
+$Page->place['login/name'] = $user->name ?: 'bewoner';
+$Page->place['user'] = $user->login;
 if ( $password = trim(@file_get_contents("{$user->dir}/.passwd")) ) {
        if (substr($password, 0, 1) == '$') {
                $password = NULL; // hashed
        }
-       $Place['pass'] = htmlspecialchars($password) ?: '<em>zelf ingesteld</em>';
+       $Page->place['pass'] = htmlspecialchars($password) ?: '<em>zelf ingesteld</em>';
 }
 else {
-       $Place['pass'] = '<em>onbekend</em>';
+       $Page->place['pass'] = '<em>onbekend</em>';
 }
 
 print '<aside class="nav"><a href="javascript:window.print()">Print</a></aside>'."\n";
index 67a076e157cf85614b9ea6cc0142dc279386bba0..37b1edc72491013887cf03133bd84487e5d096e7 100644 (file)
@@ -45,8 +45,8 @@ if ($msgid) {
 
 if (!$User->admin('user')) {
        http_response_code(403);
-       $Place['warn'] = "Geen gebruikersrechten om e-mails in te zien.";
-       $Place['maillist'] = '';
+       $Page->place['warn'] = "Geen gebruikersrechten om e-mails in te zien.";
+       $Page->place['maillist'] = '';
        return TRUE;
 }
 
@@ -72,4 +72,4 @@ foreach (array_reverse($rows) as $filename) {
        print "</a></li>\n";
 }
 print "</ul>\n";
-$Place['maillist'] = ob_get_clean();
+$Page->place['maillist'] = ob_get_clean();
index 0bb72f9142ff3363c26f0209edf6df697e74f3fd..f6e63a449c7b6377ff58559f56a09b0a5bf88f05 100644 (file)
@@ -13,10 +13,10 @@ if ($page and !is_numeric($page)) {
                $Page->title = $edit;
        }
        if ($Page->dateparts) {
-               $Place[1] = ' <small class="date">'.$Page->date.'</small>';
+               $Page->place[1] = ' <small class="date">'.$Page->date.'</small>';
        }
        else {
-               $Place[1] = '';
+               $Page->place[1] = '';
        }
        print preg_replace('{(?<=<h2>)(.*?)(?=</h2>)}', ($edit ?: '\1').' [[1]]', $Page->raw);
        if ($User->admin("edit {$Page->link}")) {
index 78cca99f070bcd61e1e4c06e0ed1972680fab489..afaa970868493fc3f509966f11576e47a3e3c64b 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-$body = $Page->render(@$Place);
+$body = $Page->render();
 
 include_once 'head.inc.php';
 
@@ -30,7 +30,8 @@ if ($User and property_exists($User, 'login') and $User->login) {
        }
        print "</p></div>\n";
 }
-$nav = $menu->render(['login' => ob_get_clean()]);
+$menu->place['login'] = ob_get_clean();
+$nav = $menu->render();
 
 $nav = preg_replace_callback('{<a href="([^"]+)">(.*?)</a>}', function ($m) {
        $request = $_SERVER['REQUEST_URI'];
index 214f9d284804e89a7d4cb0949e177b22c9db775b..5eefadb5c8870e13ad8eeb045dce849f1ff258c3 100644 (file)
--- a/page.php
+++ b/page.php
@@ -25,7 +25,8 @@ function fail($error)
        include_once 'page.inc.php';
        ob_start();
        require '500.inc.html';
-       print $Page->render(['debug' => htmlspecialchars($error)]);
+       $Page->place['debug'] = htmlspecialchars($error);
+       print $Page->render();
 }
 
 set_exception_handler('fail');
@@ -95,7 +96,7 @@ header(sprintf('Content-Security-Policy: %s', implode('; ', [
 ])));
 
 ob_start(); # page body
-$Place = [
+$Page->place += [
        'user'  => $User->login ?: '',
        'url'   => htmlspecialchars($_SERVER['REQUEST_URI']),
 ];
index d892cb591e169945945eb8646904dd10a3bbeddb..72f897eee197cfce2bad6c5fbe549991e66251e2 100644 (file)
@@ -4,7 +4,7 @@ if (!function_exists('popen')) {
        return;
 }
 
-$pagesize = intval(@$Place['n'] ?: @$_GET['n']) ?: 20;
+$pagesize = intval(@$Page->place['n'] ?: @$_GET['n']) ?: 20;
 $gitcmd = "git log -n $pagesize --pretty='%at\t%an\t%s'";
 
 if ( $offset = intval(@$_GET['start']) ) {
index 31d913044de23292e376502950621a09a789df64..94440dc88be215279cc72cee30c2db315380c3c8 100644 (file)
@@ -8,8 +8,8 @@ foreach ($users as $col => $userdir) {
        $users[$col] = new User($userdir);
 }
 
-if (isset($Place['order'])) {
-       $ordercol = $Place['order'];
+if (isset($Page->place['order'])) {
+       $ordercol = $Page->place['order'];
        $order = array_map(function ($row) use ($ordercol) {
                return $row->$ordercol;
        }, $users);
@@ -23,12 +23,12 @@ if (isset($Place['order'])) {
        }
 }
 
-if (isset($Place['n'])) {
-       array_splice($users, $Place['n']);  # limit number of results
+if (isset($Page->place['n'])) {
+       array_splice($users, $Page->place['n']);  # limit number of results
 }
 
 print '<ul';
-if (@$Place['view'] == 'avatar') {
+if (@$Page->place['view'] == 'avatar') {
        print ' class="gallery cat"';
 }
 elseif (count($users) > 5) {
@@ -43,7 +43,7 @@ foreach ($users as $user) {
                $name = sprintf('<a href="%s">%s</a>', $link, $name);
        }
 
-       switch (@$Place['view']) {
+       switch (@$Page->place['view']) {
        case 'avatar':
                if (!file_exists("{$user->dir}/avatar.jpg")) {
                        break;
index 4f4fd454d1adada0fb8c081a892c27cdf2cba510..7185036121902fc2b4e946197282b9f28b583c06 100644 (file)
@@ -55,7 +55,7 @@ function printtoc($input, $class = FALSE)
 
 $articles = (ltrim($Page->path, '/') ?: 'nieuws');
 if (strpos($articles, '/') === FALSE) {
-       if (@$Place['view'] === 'toc') {
+       if (@$Page->place['view'] === 'toc') {
                print "<div>\n";
                foreach (array_reverse(glob("$articles/2???")) as $page) {
                        $year = basename($page, '.html');
@@ -68,10 +68,10 @@ if (strpos($articles, '/') === FALSE) {
        $articles .= '/????';
 }
 
-if (@$Place['view'] === 'toc') {
+if (@$Page->place['view'] === 'toc') {
        printtoc($articles);
        return;
 }
 ob_start();
-shownews($articles, @$Place['n'] ?: 5);
+shownews($articles, @$Page->place['n'] ?: 5);
 print $Page->render();
index ff091f795c83b5ff291eadee3eaa1f529e749423..6c5788eabc49598da412a43211831f0f72f05f20 100644 (file)
@@ -1,11 +1,11 @@
 <?php
-$limit = @$Place['limit'] ?: 10;
+$limit = @$Page->place['limit'] ?: 10;
 $path = ' '.escapeshellarg('*.html');
 $query = @$_REQUEST['q'] ?: $Page->path ?: $Page->handler;
 
 if (!trim($query, '/')) return;
 
-if (!empty($Place['suggest'])) {
+if (!empty($Page->place['suggest'])) {
        $cmd = "git ls-files -- $path";
        exec($cmd, $ls);
        if (!$ls) {
@@ -28,7 +28,7 @@ else {
        }
 }
 
-if (isset($Place['verbose'])) {
+if (isset($Page->place['verbose'])) {
        printf("<p>%s gevonden voor <q>%s</q>:</p>\n",
                $results ? count($results).' resultaten' : 'Niets',
                htmlspecialchars($query)