From 674f6d3f070bcd8a08b725619e80fac0c9f72f1e Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Thu, 17 Oct 2019 02:28:24 +0200 Subject: [PATCH] widget/sitemap: move find code to global PageSearch class --- article.inc.php | 39 +++++++++++++++++++++++++++++++++++++-- widget/sitemap.php | 28 ++-------------------------- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/article.inc.php b/article.inc.php index 3c65a97..a39b897 100644 --- a/article.inc.php +++ b/article.inc.php @@ -21,8 +21,8 @@ class ArchiveArticle function __construct($path) { - $this->page = $path; - $this->link = preg_replace('{(?:/index)?\.html$}', '', $path); + $this->page = preg_replace('{^\.(?:/|$)}', '', $path); + $this->link = preg_replace('{(?:/index)?\.html$}', '', $this->page); if (file_exists($this->page)) { $this->raw = file_get_contents($this->page); @@ -141,3 +141,38 @@ class ArchiveArticle ); } } + +class PageSearch +{ + function __construct($path = '.') + { + $this->iterator = new RecursiveCallbackFilterIterator( + new RecursiveDirectoryIterator($path), + function ($current) { + if ($current->getFilename()[0] === '.') { + # skip hidden files and directories + return FALSE; + } + if ($current->isLink()) { + # ignore symlinks, original contents only + return FALSE; + } + # match **/*.html + return $current->isDir() + || preg_match('/\.html$/', $current->getFilename()); + } + ); + } + + function files() + { + # order alphabetically by link + $dir = iterator_to_array(new RecursiveIteratorIterator($this->iterator)); + array_walk($dir, function (&$row, $name) { + # prepare values for sorting (directory index first) + $row = preg_replace('{/index\.html$}', '', $name); + }); + asort($dir); + return $dir; + } +} diff --git a/widget/sitemap.php b/widget/sitemap.php index a10ea7a..4616903 100644 --- a/widget/sitemap.php +++ b/widget/sitemap.php @@ -1,32 +1,8 @@ getFilename()[0] === '.') { - # skip hidden files and directories - return FALSE; - } - if ($current->isLink()) { - # ignore symlinks, original contents only - return FALSE; - } - return $current->isDir() - || preg_match('/\.html$/', $current->getFilename()); - } -); - -# order alphabetically by link -$dir = iterator_to_array(new RecursiveIteratorIterator($search)); -array_walk($dir, function (&$row, $name) { - # prepare values for sorting (directory index first) - $row = preg_replace('{/index\.html$}', '', $name); -}); -asort($dir); - # list article details +$search = new PageSearch(ltrim($Args, '/') ?: '.'); print '