diff --git a/admin.php b/admin.php
index 584f48d..559c425 100644
--- a/admin.php
+++ b/admin.php
@@ -57,7 +57,9 @@ $editing = null;
$editIndex = null;
$editingEn = [];
$editingDe = [];
-$view = (isset($_GET['view']) && $_GET['view'] === 'settings') ? 'settings' : 'recipes';
+$allowedViews = ['recipes', 'settings', 'content'];
+$view = $_GET['view'] ?? 'recipes';
+$view = in_array($view, $allowedViews, true) ? $view : 'recipes';
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(16));
@@ -163,6 +165,59 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'save_
}
}
+if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'save_content') {
+ if (!hash_equals($_SESSION['csrf_token'] ?? '', $_POST['token'] ?? '')) {
+ $errors[] = 'Invalid form token, please retry.';
+ } else {
+ $cms = $siteSettings['cms'] ?? ['de' => [], 'en' => []];
+ $contentKeys = [
+ 'landing_eyebrow',
+ 'landing_line_1',
+ 'landing_line_2',
+ 'landing_line_3',
+ 'landing_cta',
+ 'coming_soon_badge',
+ 'coming_soon_suffix',
+ 'footer_designed_by',
+ 'footer_contact_label',
+ 'home_title',
+ 'home_description',
+ 'coming_feature_1',
+ 'coming_feature_2',
+ 'coming_feature_3',
+ ];
+
+ foreach (['de', 'en'] as $langKey) {
+ foreach ($contentKeys as $field) {
+ $postKey = $field . '_' . $langKey;
+ $cms[$langKey][$field] = trim((string) ($_POST[$postKey] ?? ($cms[$langKey][$field] ?? '')));
+ }
+ }
+
+ $requiredCms = ['landing_line_1', 'landing_line_2', 'landing_line_3', 'landing_cta', 'home_title', 'home_description'];
+ foreach ($requiredCms as $field) {
+ if (($cms['de'][$field] ?? '') === '' && ($cms['en'][$field] ?? '') === '') {
+ $errors[] = "Content field \"$field\" needs DE or EN value.";
+ }
+ if (($cms['de'][$field] ?? '') === '') {
+ $cms['de'][$field] = $cms['en'][$field] ?? '';
+ }
+ if (($cms['en'][$field] ?? '') === '') {
+ $cms['en'][$field] = $cms['de'][$field] ?? '';
+ }
+ }
+
+ if (empty($errors)) {
+ $siteSettings['cms'] = $cms;
+ if (save_site_settings($siteSettings)) {
+ $message = 'Content saved.';
+ } else {
+ $errors[] = 'Could not save CMS content. Check permissions on data/site.json.';
+ }
+ }
+ }
+}
+
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delete') {
$slugDel = trim($_POST['slug'] ?? '');
$before = count($allRecipes);
@@ -350,6 +405,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
View site
@@ -368,7 +424,75 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
-
+
+
+
+