function __construct($path)
{
- $this->page = preg_replace('{^\.(?:/|$)}', '', $path);
- $this->link = preg_replace('{(?:(?:/|^)index)?\.html$}', '', $this->page);
- $this->raw($this->page);
+ $this->file = preg_replace('{^\.(?:/|$)}', '', $path);
+ $this->link = preg_replace('{(?:(?:/|^)index)?\.html$}', '', $this->file);
+ $this->raw($this->file);
}
function raw($page)
}
function name()
{
- return $this->safetitle ?: $this->link;
+ return $this->safetitle ?: htmlspecialchars($this->link);
}
function last()
{
- return filemtime($this->page);
+ return filemtime($this->file);
}
function lastiso()
{
function dateparts()
{
- preg_match('< / (\d{4}) [/-] (\d{2}) (?:- (\d{2}) )? - >x', $this->page, $ymd);
+ preg_match('< / (\d{4}) [/-] (\d{2}) (?:- (\d{2}) )? - >x', $this->file, $ymd);
array_shift($ymd);
return $ymd;
}
# 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.'">.*?</\1>}s', '', $doc);
+ $userexists = $User && property_exists($User, 'login') && $User->login;
+ if (! ($userexists and $User->admin("edit {$this->link}")) ) {
+ # remove matching elements until first corresponding closing tag
+ $hideclass = $userexists ? 'logout' : 'login';
+ $tagmatch = '<([a-z]+) class="'.$hideclass.'"[^>]*>';
+ $doc = preg_replace("{\s*{$tagmatch}.*?</\\1>}s", '', $doc);
+ }
return preg_replace_callback(
'{ \[\[ ([^] ]+) ([^]]*) \]\] }x',
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);
+ $dir = [];
+ foreach (new RecursiveIteratorIterator($this->iterator) as $name) {
+ $article = new ArchiveArticle($name);
+ $dir[$article->link] = $article;
+ }
+ ksort($dir);
return $dir;
}
}