mirror of
https://github.com/YGGverse/bdoku.git
synced 2025-01-30 00:35:01 +00:00
give routing priority to page, then directory
This commit is contained in:
parent
942fe6eac2
commit
4eaae2637e
262
src/server.php
262
src/server.php
@ -129,8 +129,137 @@ $server->setHandler(
|
|||||||
|
|
||||||
$_uri = isset($matches[1]) ? $matches[1] : '';
|
$_uri = isset($matches[1]) ? $matches[1] : '';
|
||||||
|
|
||||||
// Directory request, build index links as no side menu in gemini version
|
// File request, get page content
|
||||||
if ($directory = $filesystem->getDirectoryPathByUri($_uri))
|
if ($path = $filesystem->getPagePathByUri($_uri))
|
||||||
|
{
|
||||||
|
// Check for cached results
|
||||||
|
if ($content = $memory->get($path))
|
||||||
|
{
|
||||||
|
$response->setContent(
|
||||||
|
$content
|
||||||
|
);
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init reader
|
||||||
|
$reader = new \Yggverse\Gemini\Dokuwiki\Reader();
|
||||||
|
|
||||||
|
// Define base URL
|
||||||
|
$reader->setMacros(
|
||||||
|
'~URL:base~',
|
||||||
|
sprintf(
|
||||||
|
'gemini://%s%s/%s',
|
||||||
|
$config->gemini->server->host,
|
||||||
|
$config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port,
|
||||||
|
'' // @TODO append relative prefix (:)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Define index menu
|
||||||
|
/* @TODO
|
||||||
|
$pages = [];
|
||||||
|
|
||||||
|
if ($directory = $filesystem->getDirectoryPathByUri($_uri))
|
||||||
|
{
|
||||||
|
foreach ($filesystem->getPagePathsByPath($directory) as $file)
|
||||||
|
{
|
||||||
|
$pages[] = sprintf(
|
||||||
|
'=> /%s',
|
||||||
|
$filesystem->getPageUriByPath(
|
||||||
|
$file
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($pages)
|
||||||
|
{
|
||||||
|
$reader->setRule(
|
||||||
|
'/\{\{indexmenu>:([^\}]+)\}\}/i',
|
||||||
|
implode(
|
||||||
|
PHP_EOL,
|
||||||
|
$pages
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
$gemini = $reader->toGemini(
|
||||||
|
file_get_contents(
|
||||||
|
$path
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$lines = [
|
||||||
|
$gemini
|
||||||
|
];
|
||||||
|
|
||||||
|
// Get page links
|
||||||
|
if ($links = $reader->getLinks($gemini))
|
||||||
|
{
|
||||||
|
$lines[] = sprintf(
|
||||||
|
'## %s',
|
||||||
|
$config->string->links
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($links as $link)
|
||||||
|
{
|
||||||
|
$lines[] = sprintf(
|
||||||
|
'=> %s',
|
||||||
|
$link
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append actions header
|
||||||
|
$lines[] = sprintf(
|
||||||
|
'## %s',
|
||||||
|
$config->string->actions
|
||||||
|
);
|
||||||
|
|
||||||
|
// Append source and homepage link
|
||||||
|
$lines[] = sprintf(
|
||||||
|
'=> gemini://%s%s %s',
|
||||||
|
$config->gemini->server->host,
|
||||||
|
$config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port,
|
||||||
|
$config->string->main
|
||||||
|
);
|
||||||
|
|
||||||
|
// Append source link
|
||||||
|
$lines[] = sprintf(
|
||||||
|
'=> %s/%s %s',
|
||||||
|
$config->dokuwiki->url->source,
|
||||||
|
$matches[1],
|
||||||
|
$config->string->source
|
||||||
|
);
|
||||||
|
|
||||||
|
// Append about info
|
||||||
|
$lines[] = $config->string->about;
|
||||||
|
|
||||||
|
// Merge lines
|
||||||
|
$content = implode(
|
||||||
|
PHP_EOL,
|
||||||
|
$lines
|
||||||
|
);
|
||||||
|
|
||||||
|
// Cache results
|
||||||
|
$memory->set(
|
||||||
|
$path,
|
||||||
|
$content
|
||||||
|
);
|
||||||
|
|
||||||
|
// Response
|
||||||
|
$response->setContent(
|
||||||
|
$content
|
||||||
|
);
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
// File not found, request directory for minimal navigation
|
||||||
|
else if ($directory = $filesystem->getDirectoryPathByUri($_uri))
|
||||||
{
|
{
|
||||||
// Check for cached results
|
// Check for cached results
|
||||||
/*
|
/*
|
||||||
@ -374,135 +503,6 @@ $server->setHandler(
|
|||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
// File request, get page content
|
|
||||||
if ($path = $filesystem->getPagePathByUri($_uri))
|
|
||||||
{
|
|
||||||
// Check for cached results
|
|
||||||
if ($content = $memory->get($path))
|
|
||||||
{
|
|
||||||
$response->setContent(
|
|
||||||
$content
|
|
||||||
);
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Init reader
|
|
||||||
$reader = new \Yggverse\Gemini\Dokuwiki\Reader();
|
|
||||||
|
|
||||||
// Define base URL
|
|
||||||
$reader->setMacros(
|
|
||||||
'~URL:base~',
|
|
||||||
sprintf(
|
|
||||||
'gemini://%s%s/%s',
|
|
||||||
$config->gemini->server->host,
|
|
||||||
$config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port,
|
|
||||||
'' // @TODO append relative prefix (:)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Define index menu
|
|
||||||
/* @TODO
|
|
||||||
$pages = [];
|
|
||||||
|
|
||||||
if ($directory = $filesystem->getDirectoryPathByUri($_uri))
|
|
||||||
{
|
|
||||||
foreach ($filesystem->getPagePathsByPath($directory) as $file)
|
|
||||||
{
|
|
||||||
$pages[] = sprintf(
|
|
||||||
'=> /%s',
|
|
||||||
$filesystem->getPageUriByPath(
|
|
||||||
$file
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($pages)
|
|
||||||
{
|
|
||||||
$reader->setRule(
|
|
||||||
'/\{\{indexmenu>:([^\}]+)\}\}/i',
|
|
||||||
implode(
|
|
||||||
PHP_EOL,
|
|
||||||
$pages
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Convert
|
|
||||||
$gemini = $reader->toGemini(
|
|
||||||
file_get_contents(
|
|
||||||
$path
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
$lines = [
|
|
||||||
$gemini
|
|
||||||
];
|
|
||||||
|
|
||||||
// Get page links
|
|
||||||
if ($links = $reader->getLinks($gemini))
|
|
||||||
{
|
|
||||||
$lines[] = sprintf(
|
|
||||||
'## %s',
|
|
||||||
$config->string->links
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach ($links as $link)
|
|
||||||
{
|
|
||||||
$lines[] = sprintf(
|
|
||||||
'=> %s',
|
|
||||||
$link
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append actions header
|
|
||||||
$lines[] = sprintf(
|
|
||||||
'## %s',
|
|
||||||
$config->string->actions
|
|
||||||
);
|
|
||||||
|
|
||||||
// Append source and homepage link
|
|
||||||
$lines[] = sprintf(
|
|
||||||
'=> gemini://%s%s %s',
|
|
||||||
$config->gemini->server->host,
|
|
||||||
$config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port,
|
|
||||||
$config->string->main
|
|
||||||
);
|
|
||||||
|
|
||||||
// Append source link
|
|
||||||
$lines[] = sprintf(
|
|
||||||
'=> %s/%s %s',
|
|
||||||
$config->dokuwiki->url->source,
|
|
||||||
$matches[1],
|
|
||||||
$config->string->source
|
|
||||||
);
|
|
||||||
|
|
||||||
// Append about info
|
|
||||||
$lines[] = $config->string->about;
|
|
||||||
|
|
||||||
// Merge lines
|
|
||||||
$content = implode(
|
|
||||||
PHP_EOL,
|
|
||||||
$lines
|
|
||||||
);
|
|
||||||
|
|
||||||
// Cache results
|
|
||||||
$memory->set(
|
|
||||||
$path,
|
|
||||||
$content
|
|
||||||
);
|
|
||||||
|
|
||||||
// Response
|
|
||||||
$response->setContent(
|
|
||||||
$content
|
|
||||||
);
|
|
||||||
|
|
||||||
return $response;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Route not found
|
// Route not found
|
||||||
|
Loading…
x
Reference in New Issue
Block a user