page: retain thumb subhandlers over invalid resize
[minimedit.git] / article.inc.php
index cff69ffdec449dcd44fccd1299abc2a793aa1d3e..3e67d6f1a457d59a9646babcbe83f2aa242821eb 100644 (file)
@@ -1,19 +1,4 @@
 <?php
-global $monthname;
-$monthname = ['?',
-       'januari', 'februari', 'maart', 'april', 'mei', 'juni',
-       'juli', 'augustus', 'september', 'oktober', 'november', 'december',
-];
-
-function showdate($parts)
-{
-       global $monthname;
-       return implode(' ', array_filter([
-               intval(@$parts[2]), $parts[1] > 0 ? $monthname[intval($parts[1])] : '', $parts[0],
-               count($parts) > 5 ? "$parts[3]:$parts[4]" : '',
-       ]));
-}
-
 class ArchiveArticle
 {
        public $raw, $title, $body; # file contents
@@ -114,10 +99,6 @@ class ArchiveArticle
        {
                return implode('-', $this->dateparts()) . 'T12:00:00+02:00';
        }
-       function date()
-       {
-               return showdate($this->dateparts);
-       }
 
        function story()
        {
@@ -168,6 +149,9 @@ class ArchiveArticle
        function thumb($size = '300x')
        {
                if (!$this->image or $this->image[0] !== '/') return;
+               if (preg_match('{^/thumb/\D}', $this->image)) {
+                       return ltrim($this->image, '/');
+               }
                return preg_replace(
                        ['{^(?:/thumb/[^/]*)?}', '/\.groot(?=\.\w+$)/'], ["thumb/$size", ''],
                        $this->image
@@ -183,17 +167,20 @@ class ArchiveArticle
 
                ob_start();
                $Page = clone $this;
-               $Page->handler = $Page->handler . $Page->path; // .= with explicit getter
-               $Page->path = '';
-               foreach ($params as $param) {
-                       if ($set = strpos($param, '=')) {
-                               $Page->place[ substr($param, 0, $set) ] = substr($param, $set + 1);
-                       }
-                       elseif (!empty($param)) {
-                               $Page->path .= '/'.$param;
+               if (is_array($params)) {
+                       $Page->place += $params;
+               }
+               else {
+                       foreach (explode(' ', $params) as $param) {
+                               if ($set = strpos($param, '=')) {
+                                       $Page->place[ substr($param, 0, $set) ] = substr($param, $set + 1);
+                               }
+                               elseif (!empty($param)) {
+                                       $Page->place[] = $param;
+                               }
                        }
                }
-               $Page->link .= $Page->path;
+
                try {
                        include "widget/$name.php";
                        return ob_get_clean();
@@ -207,7 +194,7 @@ class ArchiveArticle
 
        function render()
        {
-               $doc = ob_get_clean();
+               $doc = $this->raw;
 
                if (!empty($this->place['warn'])) {
                        $warn = '<p class="warn">[[warn]]</p>';
@@ -229,7 +216,7 @@ class ArchiveArticle
                        function ($sub) {
                                list ($placeholder, $name, $params) = $sub;
                                $html = $this->place[$name] ??
-                                       $this->widget($name, explode(' ', $params));
+                                       $this->widget($name, $params);
                                if (empty($html) or $html[0] != '<') {
                                        $html = "<span>$html</span>";
                                }