Minor code refactoring

This commit is contained in:
Daniel Rudolf 2016-03-06 00:29:40 +01:00
parent 0d40259c06
commit 43705d0f76

View file

@ -657,8 +657,11 @@ class Pico
*/ */
protected function discoverRequestFile() protected function discoverRequestFile()
{ {
$contentDir = $this->getConfig('content_dir');
$contentExt = $this->getConfig('content_ext');
if (empty($this->requestUrl)) { if (empty($this->requestUrl)) {
$this->requestFile = $this->getConfig('content_dir') . 'index' . $this->getConfig('content_ext'); $this->requestFile = $contentDir . 'index' . $contentExt;
} else { } else {
// prevent content_dir breakouts using malicious request URLs // prevent content_dir breakouts using malicious request URLs
// we don't use realpath() here because we neither want to check for file existance // we don't use realpath() here because we neither want to check for file existance
@ -680,24 +683,24 @@ class Pico
} }
if (empty($requestFileParts)) { if (empty($requestFileParts)) {
$this->requestFile = $this->getConfig('content_dir') . 'index' . $this->getConfig('content_ext'); $this->requestFile = $contentDir . 'index' . $contentExt;
return; return;
} }
// discover the content file to serve // discover the content file to serve
// Note: $requestFileParts neither contains a trailing nor a leading slash // Note: $requestFileParts neither contains a trailing nor a leading slash
$this->requestFile = $this->getConfig('content_dir') . implode('/', $requestFileParts); $this->requestFile = $contentDir . implode('/', $requestFileParts);
if (is_dir($this->requestFile)) { if (is_dir($this->requestFile)) {
// if no index file is found, try a accordingly named file in the previous dir // if no index file is found, try a accordingly named file in the previous dir
// if this file doesn't exist either, show the 404 page, but assume the index // if this file doesn't exist either, show the 404 page, but assume the index
// file as being requested (maintains backward compatibility to Pico < 1.0) // file as being requested (maintains backward compatibility to Pico < 1.0)
$indexFile = $this->requestFile . '/index' . $this->getConfig('content_ext'); $indexFile = $this->requestFile . '/index' . $contentExt;
if (file_exists($indexFile) || !file_exists($this->requestFile . $this->getConfig('content_ext'))) { if (file_exists($indexFile) || !file_exists($this->requestFile . $contentExt)) {
$this->requestFile = $indexFile; $this->requestFile = $indexFile;
return; return;
} }
} }
$this->requestFile .= $this->getConfig('content_ext'); $this->requestFile .= $contentExt;
} }
} }
@ -737,25 +740,26 @@ class Pico
{ {
$contentDir = $this->getConfig('content_dir'); $contentDir = $this->getConfig('content_dir');
$contentDirLength = strlen($contentDir); $contentDirLength = strlen($contentDir);
$contentExt = $this->getConfig('content_ext');
if (substr($file, 0, $contentDirLength) === $contentDir) { if (substr($file, 0, $contentDirLength) === $contentDir) {
$errorFileDir = substr($file, $contentDirLength); $errorFileDir = substr($file, $contentDirLength);
while ($errorFileDir !== '.') { while ($errorFileDir !== '.') {
$errorFileDir = dirname($errorFileDir); $errorFileDir = dirname($errorFileDir);
$errorFile = $errorFileDir . '/404' . $this->getConfig('content_ext'); $errorFile = $errorFileDir . '/404' . $contentExt;
if (file_exists($this->getConfig('content_dir') . $errorFile)) { if (file_exists($contentDir . $errorFile)) {
return $this->loadFileContent($this->getConfig('content_dir') . $errorFile); return $this->loadFileContent($contentDir . $errorFile);
} }
} }
} elseif (file_exists($this->getConfig('content_dir') . '404' . $this->getConfig('content_ext'))) { } elseif (file_exists($contentDir . '404' . $contentExt)) {
// provided that the requested file is not in the regular // provided that the requested file is not in the regular
// content directory, fallback to Pico's global `404.md` // content directory, fallback to Pico's global `404.md`
return $this->loadFileContent($this->getConfig('content_dir') . '404' . $this->getConfig('content_ext')); return $this->loadFileContent($contentDir . '404' . $contentExt);
} }
$errorFile = $this->getConfig('content_dir') . '404' . $this->getConfig('content_ext'); $errorFile = $contentDir . '404' . $contentExt;
throw new RuntimeException('Required "' . $errorFile . '" not found'); throw new RuntimeException('Required "' . $errorFile . '" not found');
} }
@ -989,25 +993,30 @@ class Pico
*/ */
protected function readPages() protected function readPages()
{ {
$contentDir = $this->getConfig('content_dir');
$contentDirLength = strlen($contentDir);
$contentExt = $this->getConfig('content_ext');
$contentExtLength = strlen($contentExt);
$this->pages = array(); $this->pages = array();
$files = $this->getFiles($this->getConfig('content_dir'), $this->getConfig('content_ext'), Pico::SORT_NONE); $files = $this->getFiles($contentDir, $contentExt, Pico::SORT_NONE);
foreach ($files as $i => $file) { foreach ($files as $i => $file) {
// skip 404 page // skip 404 page
if (basename($file) === '404' . $this->getConfig('content_ext')) { if (basename($file) === '404' . $contentExt) {
unset($files[$i]); unset($files[$i]);
continue; continue;
} }
$id = substr($file, strlen($this->getConfig('content_dir')), -strlen($this->getConfig('content_ext'))); $id = substr($file, $contentDirLength, -$contentExtLength);
// drop inaccessible pages (e.g. drop "sub.md" if "sub/index.md" exists) // drop inaccessible pages (e.g. drop "sub.md" if "sub/index.md" exists)
$conflictFile = $this->getConfig('content_dir') . $id . '/index' . $this->getConfig('content_ext'); $conflictFile = $contentDir . $id . '/index' . $contentExt;
if (in_array($conflictFile, $files, true)) { if (in_array($conflictFile, $files, true)) {
continue; continue;
} }
$url = $this->getPageUrl($id); $url = $this->getPageUrl($id);
if ($file != $this->requestFile) { if ($file !== $this->requestFile) {
$rawContent = file_get_contents($file); $rawContent = file_get_contents($file);
$headers = $this->getMetaHeaders(); $headers = $this->getMetaHeaders();
@ -1126,8 +1135,7 @@ class Pico
return; return;
} }
$contentExt = $this->getConfig('content_ext'); $currentPageId = substr($this->requestFile, $contentDirLength, -strlen($this->getConfig('content_ext')));
$currentPageId = substr($this->requestFile, $contentDirLength, -strlen($contentExt));
$currentPageIndex = array_search($currentPageId, $pageIds); $currentPageIndex = array_search($currentPageId, $pageIds);
if ($currentPageIndex !== false) { if ($currentPageIndex !== false) {
$this->currentPage = &$this->pages[$currentPageId]; $this->currentPage = &$this->pages[$currentPageId];
@ -1287,7 +1295,7 @@ class Pico
$protocol . "://" . $_SERVER['HTTP_HOST'] $protocol . "://" . $_SERVER['HTTP_HOST']
. rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\') . '/'; . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\') . '/';
return $this->getConfig('base_url'); return $this->config['base_url'];
} }
/** /**
@ -1303,7 +1311,7 @@ class Pico
} }
$this->config['rewrite_url'] = (isset($_SERVER['PICO_URL_REWRITING']) && $_SERVER['PICO_URL_REWRITING']); $this->config['rewrite_url'] = (isset($_SERVER['PICO_URL_REWRITING']) && $_SERVER['PICO_URL_REWRITING']);
return $this->getConfig('rewrite_url'); return $this->config['rewrite_url'];
} }
/** /**
@ -1363,7 +1371,7 @@ class Pico
foreach ($files as $file) { foreach ($files as $file) {
// exclude hidden files/dirs starting with a .; this also excludes the special dirs . and .. // exclude hidden files/dirs starting with a .; this also excludes the special dirs . and ..
// exclude files ending with a ~ (vim/nano backup) or # (emacs backup) // exclude files ending with a ~ (vim/nano backup) or # (emacs backup)
if ((substr($file, 0, 1) === '.') || in_array(substr($file, -1), array('~', '#'))) { if (($file[0] === '.') || in_array(substr($file, -1), array('~', '#'))) {
continue; continue;
} }
@ -1394,7 +1402,7 @@ class Pico
$path = $this->getRootDir() . $path; $path = $this->getRootDir() . $path;
} }
} else { } else {
if (substr($path, 0, 1) !== '/') { if ($path[0] !== '/') {
$path = $this->getRootDir() . $path; $path = $this->getRootDir() . $path;
} }
} }