|
|
|
@ -687,18 +687,28 @@ class Pico |
|
|
|
|
*/ |
|
|
|
|
public function load404Content($file) |
|
|
|
|
{ |
|
|
|
|
$errorFileDir = substr($file, strlen($this->getConfig('content_dir'))); |
|
|
|
|
do { |
|
|
|
|
$errorFileDir = dirname($errorFileDir); |
|
|
|
|
$errorFile = $errorFileDir . '/404' . $this->getConfig('content_ext'); |
|
|
|
|
} while (!file_exists($this->getConfig('content_dir') . $errorFile) && ($errorFileDir !== '.')); |
|
|
|
|
|
|
|
|
|
if (!file_exists($this->getConfig('content_dir') . $errorFile)) { |
|
|
|
|
$errorFile = ($errorFileDir === '.') ? '404' . $this->getConfig('content_ext') : $errorFile; |
|
|
|
|
throw new RuntimeException('Required "' . $this->getConfig('content_dir') . $errorFile . '" not found'); |
|
|
|
|
$contentDir = $this->getConfig('content_dir'); |
|
|
|
|
$contentDirLength = strlen($contentDir); |
|
|
|
|
|
|
|
|
|
if (substr($file, 0, $contentDirLength) === $contentDir) { |
|
|
|
|
$errorFileDir = substr($file, $contentDirLength); |
|
|
|
|
|
|
|
|
|
while ($errorFileDir !== '.') { |
|
|
|
|
$errorFileDir = dirname($errorFileDir); |
|
|
|
|
$errorFile = $errorFileDir . '/404' . $this->getConfig('content_ext'); |
|
|
|
|
|
|
|
|
|
if (file_exists($this->getConfig('content_dir') . $errorFile)) { |
|
|
|
|
return $this->loadFileContent($this->getConfig('content_dir') . $errorFile); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} elseif (file_exists($this->getConfig('content_dir') . '404' . $this->getConfig('content_ext'))) { |
|
|
|
|
// provided that the requested file is not in the regular |
|
|
|
|
// content directory, fallback to Pico's global `404.md` |
|
|
|
|
return $this->loadFileContent($this->getConfig('content_dir') . '404' . $this->getConfig('content_ext')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $this->loadFileContent($this->getConfig('content_dir') . $errorFile); |
|
|
|
|
$errorFile = $this->getConfig('content_dir') . '404' . $this->getConfig('content_ext'); |
|
|
|
|
throw new RuntimeException('Required "' . $errorFile . '" not found'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -1060,8 +1070,16 @@ class Pico |
|
|
|
|
$pageIds = array_keys($this->pages); |
|
|
|
|
|
|
|
|
|
$contentDir = $this->getConfig('content_dir'); |
|
|
|
|
$contentDirLength = strlen($contentDir); |
|
|
|
|
|
|
|
|
|
// the requested file is not in the regular content directory, therefore its ID |
|
|
|
|
// isn't specified and it's impossible to determine the current page automatically |
|
|
|
|
if (substr($this->requestFile, 0, $contentDirLength) !== $contentDir) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$contentExt = $this->getConfig('content_ext'); |
|
|
|
|
$currentPageId = substr($this->requestFile, strlen($contentDir), -strlen($contentExt)); |
|
|
|
|
$currentPageId = substr($this->requestFile, $contentDirLength, -strlen($contentExt)); |
|
|
|
|
$currentPageIndex = array_search($currentPageId, $pageIds); |
|
|
|
|
if ($currentPageIndex !== false) { |
|
|
|
|
$this->currentPage = &$this->pages[$currentPageId]; |
|
|
|
|