folderweb/app/helpers.php
Ruben 32449d2edd Refactor template and content handling logic
Add constants for file extensions

Extract helper functions for common operations

Improve PDF file detection

Simplify directory scanning operations

Standardize template resolution

Optimize content rendering pipeline
2025-11-01 22:54:42 +01:00

69 lines
2.3 KiB
PHP

<?php
function resolveTemplate(string $templateName): string {
$customTemplate = dirname(__DIR__) . "/custom/templates/$templateName.php";
$defaultTemplate = __DIR__ . "/default/templates/$templateName.php";
return file_exists($customTemplate) ? $customTemplate : $defaultTemplate;
}
function getSubdirectories(string $dir): array {
if (!is_dir($dir)) return [];
return array_filter(
scandir($dir) ?: [],
fn($item) => !in_array($item, ['.', '..']) && is_dir("$dir/$item")
);
}
function getLangPrefix(string $currentLang, string $defaultLang): string {
return $currentLang !== $defaultLang ? "/$currentLang" : '';
}
function extractTitle(string $filePath, string $lang, string $defaultLang): ?string {
$files = findAllContentFiles($filePath, $lang, $defaultLang);
if (empty($files)) return null;
// Check the first content file for a title
$file = $files[0];
$ext = pathinfo($file, PATHINFO_EXTENSION);
$content = file_get_contents($file);
if ($ext === 'md' && preg_match('/^#\s+(.+)$/m', $content, $matches)) {
return trim($matches[1]);
}
if (in_array($ext, ['html', 'php']) && preg_match('/<h1[^>]*>(.*?)<\/h1>/i', $content, $matches)) {
return strip_tags($matches[1]);
}
return null;
}
function formatNorwegianDate(string $dateString): string {
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})/', $dateString, $matches)) {
$months = ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'];
$day = (int)$matches[3];
$month = $months[(int)$matches[2] - 1];
$year = $matches[1];
return "$day. $month $year";
}
return $dateString;
}
function extractDateFromFolder(string $folderName): ?string {
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})-/', $folderName, $matches)) {
return formatNorwegianDate($matches[1] . '-' . $matches[2] . '-' . $matches[3]);
}
return null;
}
function findCoverImage(string $dirPath): ?string {
foreach (COVER_IMAGE_EXTENSIONS as $ext) {
if (file_exists("$dirPath/cover.$ext")) {
return "cover.$ext";
}
}
return null;
}
function findPdfFile(string $dirPath): ?string {
$pdfs = glob("$dirPath/*.pdf");
return $pdfs ? basename($pdfs[0]) : null;
}