X-Git-Url: http://git.shiar.net/minimedit.git/blobdiff_plain/d51bf78a63e3f313f3e5d2de46ffe6ecbf2e93c4..0243f370ae2e2188ea9bec4d859b5ee8f0c17817:/article.inc.php diff --git a/article.inc.php b/article.inc.php index 3c65a97..d42e498 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,41 @@ 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; + } + if ($current->isDir()) { + # traverse subdirectories unless untracked in any amount + return !file_exists("$current/.gitignore"); + } + # match **/*.html + return preg_match('/(?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; + } +}