Vervang raw JSON config editor door instellingenformulier met default_page dropdown
- Admin config pagina is nu een formulier met secties voor algemeen, taal, SEO, auteur en features - Startpagina instelbaar via dropdown met beschikbare pagina's uit content/ - Handleiding (nl/en) bijgewerkt met nieuwe configuratie-instructies
This commit is contained in:
+44
-17
@@ -658,29 +658,56 @@ function handleConfig(AdminAuth $auth, array $config): void
|
||||
$message = '';
|
||||
$messageType = '';
|
||||
|
||||
// Load current config
|
||||
$configData = file_exists($configJson) ? json_decode(file_get_contents($configJson), true) : [];
|
||||
if (!is_array($configData)) $configData = [];
|
||||
|
||||
// Get available root-level pages
|
||||
$contentDir = $config['content_dir'];
|
||||
$availablePages = [];
|
||||
$availableLangs = $configData['language']['available'] ?? ['nl', 'en'];
|
||||
if (is_dir($contentDir)) {
|
||||
$pageMap = [];
|
||||
foreach (scandir($contentDir) as $file) {
|
||||
if ($file[0] === '.') continue;
|
||||
$filePath = $contentDir . '/' . $file;
|
||||
if (is_file($filePath) && preg_match('/\.(md|php|html)$/', $file)) {
|
||||
$base = $file;
|
||||
$langPattern = '/^(' . implode('|', $availableLangs) . ')\.(.+)$/';
|
||||
if (preg_match($langPattern, $base, $m)) {
|
||||
$base = $m[2];
|
||||
}
|
||||
$pageKey = preg_replace('/\.(md|php|html)$/', '', $base);
|
||||
$pageMap[$pageKey] = true;
|
||||
}
|
||||
}
|
||||
$availablePages = array_keys($pageMap);
|
||||
sort($availablePages);
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
if (!$auth->verifyCsrf($_POST['csrf_token'] ?? '')) {
|
||||
$message = 'Ongeldige CSRF token.';
|
||||
$messageType = 'danger';
|
||||
} else {
|
||||
$jsonContent = $_POST['config_content'] ?? '';
|
||||
$parsed = json_decode($jsonContent, true);
|
||||
if ($parsed === null && json_last_error() !== JSON_ERROR_NONE) {
|
||||
$message = 'Ongeldige JSON: ' . json_last_error_msg();
|
||||
$messageType = 'danger';
|
||||
} else {
|
||||
file_put_contents($configJson, json_encode($parsed, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
|
||||
adminLog($config, 'info', $user['username'] . ' wijzigde site configuratie');
|
||||
$message = 'Configuratie opgeslagen.';
|
||||
$messageType = 'success';
|
||||
$jsonContent = null; // reload from file
|
||||
}
|
||||
}
|
||||
}
|
||||
$configData['site_title'] = trim($_POST['site_title'] ?? 'CodePress');
|
||||
$configData['default_page'] = trim($_POST['default_page'] ?? 'index');
|
||||
$configData['language']['default'] = trim($_POST['language_default'] ?? 'nl');
|
||||
$configData['language']['available'] = $_POST['language_available'] ?? ['nl', 'en'];
|
||||
$configData['seo']['description'] = trim($_POST['seo_description'] ?? '');
|
||||
$configData['seo']['keywords'] = trim($_POST['seo_keywords'] ?? '');
|
||||
$configData['author']['name'] = trim($_POST['author_name'] ?? '');
|
||||
$configData['author']['website'] = trim($_POST['author_website'] ?? '');
|
||||
$configData['show_version'] = !empty($_POST['show_version']);
|
||||
$configData['features']['auto_link_pages'] = !empty($_POST['feature_auto_link']);
|
||||
$configData['features']['search_enabled'] = !empty($_POST['feature_search']);
|
||||
$configData['features']['breadcrumbs_enabled'] = !empty($_POST['feature_breadcrumbs']);
|
||||
|
||||
$siteConfig = file_exists($configJson) ? file_get_contents($configJson) : '{}';
|
||||
if (isset($jsonContent)) {
|
||||
$siteConfig = $jsonContent;
|
||||
file_put_contents($configJson, json_encode($configData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
|
||||
adminLog($config, 'info', $user['username'] . ' wijzigde site configuratie');
|
||||
$message = 'Configuratie opgeslagen.';
|
||||
$messageType = 'success';
|
||||
}
|
||||
}
|
||||
|
||||
$route = 'config';
|
||||
|
||||
Reference in New Issue
Block a user