|
|
|
@ -658,7 +658,7 @@ class Pico |
|
|
|
|
// we'll replace the links accordingly, depending on enabled rewriting |
|
|
|
|
$content = str_replace('%base_url%?', $this->getBaseUrl(), $content); |
|
|
|
|
} else { |
|
|
|
|
// actually not necessary, but makes the URLs look a little nicer |
|
|
|
|
// actually not necessary, but makes the URL look a little nicer |
|
|
|
|
$content = str_replace('%base_url%?', $this->getBaseUrl() . '?', $content); |
|
|
|
|
} |
|
|
|
|
$content = str_replace('%base_url%', rtrim($this->getBaseUrl(), '/'), $content); |
|
|
|
@ -707,8 +707,8 @@ class Pico |
|
|
|
|
*/ |
|
|
|
|
protected function readPages() |
|
|
|
|
{ |
|
|
|
|
$pages = array(); |
|
|
|
|
$files = $this->getFiles($this->getConfig('content_dir'), $this->getConfig('content_ext')); |
|
|
|
|
$this->pages = array(); |
|
|
|
|
$files = $this->getFiles($this->getConfig('content_dir'), $this->getConfig('content_ext'), SCANDIR_SORT_NONE); |
|
|
|
|
foreach ($files as $i => $file) { |
|
|
|
|
// skip 404 page |
|
|
|
|
if (basename($file) == '404' . $this->getConfig('content_ext')) { |
|
|
|
@ -758,17 +758,22 @@ class Pico |
|
|
|
|
// trigger event |
|
|
|
|
$this->triggerEvent('onSinglePageLoaded', array(&$page)); |
|
|
|
|
|
|
|
|
|
$pages[$id] = $page; |
|
|
|
|
$this->pages[$id] = $page; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// sort pages by date |
|
|
|
|
// Pico::getFiles() already sorts alphabetically |
|
|
|
|
$this->pages = $pages; |
|
|
|
|
if ($this->getConfig('pages_order_by') == 'date') { |
|
|
|
|
$pageIds = array_keys($this->pages); |
|
|
|
|
$order = $this->getConfig('pages_order'); |
|
|
|
|
// sort pages |
|
|
|
|
$order = $this->getConfig('pages_order'); |
|
|
|
|
$alphaSortClosure = function ($a, $b) use ($order) { |
|
|
|
|
$aSortKey = (basename($a['id']) === 'index') ? dirname($a['id']) : $a['id']; |
|
|
|
|
$bSortKey = (basename($b['id']) === 'index') ? dirname($b['id']) : $b['id']; |
|
|
|
|
|
|
|
|
|
$cmp = strcmp($aSortKey, $bSortKey); |
|
|
|
|
return $cmp * (($order == 'desc') ? -1 : 1); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
uasort($this->pages, function ($a, $b) use ($pageIds, $order) { |
|
|
|
|
if ($this->getConfig('pages_order_by') == 'date') { |
|
|
|
|
// sort by date |
|
|
|
|
uasort($this->pages, function ($a, $b) use ($alphaSortClosure, $order) { |
|
|
|
|
if (empty($a['time']) || empty($b['time'])) { |
|
|
|
|
$cmp = (empty($a['time']) - empty($b['time'])); |
|
|
|
|
} else { |
|
|
|
@ -776,14 +781,15 @@ class Pico |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($cmp === 0) { |
|
|
|
|
// never assume equality; fallback to the original order (= alphabetical) |
|
|
|
|
$cmp = (array_search($b['id'], $pageIds) - array_search($a['id'], $pageIds)); |
|
|
|
|
// never assume equality; fallback to alphabetical order |
|
|
|
|
return $alphaSortClosure($a, $b); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $cmp * (($order == 'desc') ? 1 : -1); |
|
|
|
|
}); |
|
|
|
|
} elseif ($this->getConfig('pages_order') == 'desc') { |
|
|
|
|
$this->pages = array_reverse($this->pages); |
|
|
|
|
} else { |
|
|
|
|
// sort alphabetically |
|
|
|
|
uasort($this->pages, $alphaSortClosure); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -978,20 +984,24 @@ class Pico |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Recursively walks through a directory and returns all containing files |
|
|
|
|
* matching the specified file extension in alphabetical order |
|
|
|
|
* matching the specified file extension |
|
|
|
|
* |
|
|
|
|
* @param string $directory start directory |
|
|
|
|
* @param string $fileExtension return files with the given file extension |
|
|
|
|
* only (optional) |
|
|
|
|
* @param int $order specify whether and how files should be |
|
|
|
|
* sorted; use SCANDIR_SORT_ASCENDING for a alphabetical ascending |
|
|
|
|
* order (default), SCANDIR_SORT_DESCENDING for a descending order or |
|
|
|
|
* SCANDIR_SORT_NONE to leave the result unsorted |
|
|
|
|
* @return array list of found files |
|
|
|
|
*/ |
|
|
|
|
protected function getFiles($directory, $fileExtension = '') |
|
|
|
|
protected function getFiles($directory, $fileExtension = '', $order = SCANDIR_SORT_ASCENDING) |
|
|
|
|
{ |
|
|
|
|
$directory = rtrim($directory, '/'); |
|
|
|
|
$result = array(); |
|
|
|
|
|
|
|
|
|
// scandir() reads files in alphabetical order |
|
|
|
|
$files = scandir($directory); |
|
|
|
|
$files = scandir($directory, $order); |
|
|
|
|
$fileExtensionLength = strlen($fileExtension); |
|
|
|
|
if ($files !== false) { |
|
|
|
|
foreach ($files as $file) { |
|
|
|
|