Update PHP version to 8.4 and add property hooks
This commit is contained in:
parent
32449d2edd
commit
673c02d237
14 changed files with 939 additions and 606 deletions
|
|
@ -1,15 +1,5 @@
|
|||
<?php
|
||||
|
||||
function prepareTemplateContext(): array {
|
||||
global $contentDir, $currentLang, $defaultLang;
|
||||
|
||||
return [
|
||||
'navigation' => buildNavigation($contentDir, $currentLang, $defaultLang),
|
||||
'homeLabel' => loadMetadata($contentDir, $currentLang, $defaultLang)['slug'] ?? 'Home',
|
||||
'translations' => loadTranslations($currentLang)
|
||||
];
|
||||
}
|
||||
|
||||
function renderContentFile(string $filePath): string {
|
||||
$ext = pathinfo($filePath, PATHINFO_EXTENSION);
|
||||
|
||||
|
|
@ -25,22 +15,23 @@ function renderContentFile(string $filePath): string {
|
|||
return ob_get_clean();
|
||||
}
|
||||
|
||||
function renderTemplate(string $content, int $statusCode = 200): void {
|
||||
global $baseTemplate;
|
||||
|
||||
extract(prepareTemplateContext());
|
||||
function renderTemplate(Context $ctx, string $content, int $statusCode = 200): void {
|
||||
// Extract all necessary variables for base template
|
||||
$currentLang = $ctx->currentLang;
|
||||
$navigation = $ctx->navigation;
|
||||
$homeLabel = $ctx->homeLabel;
|
||||
$translations = $ctx->translations;
|
||||
$pageTitle = null; // No specific page title for error pages
|
||||
|
||||
http_response_code($statusCode);
|
||||
include $baseTemplate;
|
||||
include $ctx->templates->base;
|
||||
exit;
|
||||
}
|
||||
|
||||
function renderFile(string $filePath): void {
|
||||
global $baseTemplate, $pageTemplate, $contentDir, $currentLang, $defaultLang;
|
||||
|
||||
function renderFile(Context $ctx, string $filePath): void {
|
||||
$realPath = realpath($filePath);
|
||||
if (!$realPath || !str_starts_with($realPath, $contentDir) || !is_readable($realPath)) {
|
||||
renderTemplate("<article><h1>403 Forbidden</h1><p>Access denied.</p></article>", 403);
|
||||
if (!$realPath || !str_starts_with($realPath, $ctx->contentDir) || !is_readable($realPath)) {
|
||||
renderTemplate($ctx, "<article><h1>403 Forbidden</h1><p>Access denied.</p></article>", 403);
|
||||
}
|
||||
|
||||
$ext = pathinfo($realPath, PATHINFO_EXTENSION);
|
||||
|
|
@ -48,20 +39,23 @@ function renderFile(string $filePath): void {
|
|||
if (in_array($ext, CONTENT_EXTENSIONS)) {
|
||||
$content = renderContentFile($realPath);
|
||||
|
||||
// Prepare template variables
|
||||
extract(prepareTemplateContext());
|
||||
// Prepare template variables using property hooks
|
||||
$currentLang = $ctx->currentLang;
|
||||
$navigation = $ctx->navigation;
|
||||
$homeLabel = $ctx->homeLabel;
|
||||
$translations = $ctx->translations;
|
||||
|
||||
$pageDir = dirname($realPath);
|
||||
$pageMetadata = loadMetadata($pageDir, $currentLang, $defaultLang);
|
||||
$pageMetadata = loadMetadata($pageDir, $ctx->currentLang, $ctx->defaultLang);
|
||||
$pageTitle = $pageMetadata['title'] ?? null;
|
||||
|
||||
// Wrap content with page template
|
||||
ob_start();
|
||||
include $pageTemplate;
|
||||
include $ctx->templates->page;
|
||||
$content = ob_get_clean();
|
||||
|
||||
// Wrap with base template
|
||||
include $baseTemplate;
|
||||
include $ctx->templates->base;
|
||||
exit;
|
||||
}
|
||||
|
||||
|
|
@ -71,32 +65,33 @@ function renderFile(string $filePath): void {
|
|||
exit;
|
||||
}
|
||||
|
||||
function renderMultipleFiles(array $filePaths, string $pageDir): void {
|
||||
global $baseTemplate, $pageTemplate, $contentDir, $currentLang, $defaultLang;
|
||||
|
||||
function renderMultipleFiles(Context $ctx, array $filePaths, string $pageDir): void {
|
||||
// Validate all files are safe
|
||||
foreach ($filePaths as $filePath) {
|
||||
$realPath = realpath($filePath);
|
||||
if (!$realPath || !str_starts_with($realPath, $contentDir) || !is_readable($realPath)) {
|
||||
renderTemplate("<article><h1>403 Forbidden</h1><p>Access denied.</p></article>", 403);
|
||||
if (!$realPath || !str_starts_with($realPath, $ctx->contentDir) || !is_readable($realPath)) {
|
||||
renderTemplate($ctx, "<article><h1>403 Forbidden</h1><p>Access denied.</p></article>", 403);
|
||||
}
|
||||
}
|
||||
|
||||
// Render all content files in order
|
||||
$content = implode('', array_map('renderContentFile', $filePaths));
|
||||
|
||||
// Prepare template variables
|
||||
extract(prepareTemplateContext());
|
||||
// Prepare template variables using property hooks
|
||||
$currentLang = $ctx->currentLang;
|
||||
$navigation = $ctx->navigation;
|
||||
$homeLabel = $ctx->homeLabel;
|
||||
$translations = $ctx->translations;
|
||||
|
||||
$pageMetadata = loadMetadata($pageDir, $currentLang, $defaultLang);
|
||||
$pageMetadata = loadMetadata($pageDir, $ctx->currentLang, $ctx->defaultLang);
|
||||
$pageTitle = $pageMetadata['title'] ?? null;
|
||||
|
||||
// Wrap content with page template
|
||||
ob_start();
|
||||
include $pageTemplate;
|
||||
include $ctx->templates->page;
|
||||
$content = ob_get_clean();
|
||||
|
||||
// Wrap with base template
|
||||
include $baseTemplate;
|
||||
include $ctx->templates->base;
|
||||
exit;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue