feat: implement phase 4 interactive cooking mode and workspace rules

This commit is contained in:
2026-05-21 14:50:06 +02:00
parent 21833fa05b
commit a4a2d83534
8 changed files with 373 additions and 29 deletions
+21
View File
@@ -178,6 +178,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
// helpers
$parse_csv = fn($text) => array_values(array_filter(array_map('trim', explode(',', $text ?? '')), 'strlen'));
$parse_lines = fn($text) => array_values(array_filter(array_map('trim', preg_split('/\\r?\\n/', $text ?? '')), 'strlen'));
$parse_lines_exact = fn($text) => array_map('trim', preg_split('/\\r?\\n/', $text ?? ''));
$titleEn = trim($_POST['title_en'] ?? '');
$titleDe = trim($_POST['title_de'] ?? '');
@@ -200,6 +201,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
$utensilsDe = $parse_lines($_POST['utensils_de'] ?? '');
$stepsEn = $parse_lines($_POST['steps_en'] ?? '');
$stepsDe = $parse_lines($_POST['steps_de'] ?? '');
$stepVideosEn = $parse_lines_exact($_POST['step_videos_en'] ?? '');
$stepVideosDe = $parse_lines_exact($_POST['step_videos_de'] ?? '');
$stepTimersEn = $parse_lines_exact($_POST['step_timers_en'] ?? '');
$stepTimersDe = $parse_lines_exact($_POST['step_timers_de'] ?? '');
$featured = isset($_POST['featured']) && $_POST['featured'] === '1';
$comingSoon = isset($_POST['coming_soon']) && $_POST['coming_soon'] === '1';
$slugOriginal = trim($_POST['slug_original'] ?? '');
@@ -229,6 +234,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
$utensilsDe = !empty($utensilsDe) ? $utensilsDe : ($prevDe['utensils'] ?? []);
$stepsEn = !empty($stepsEn) ? $stepsEn : ($prevEn['steps'] ?? []);
$stepsDe = !empty($stepsDe) ? $stepsDe : ($prevDe['steps'] ?? []);
$stepVideosEn = !empty($stepVideosEn) ? $stepVideosEn : ($prevEn['step_videos'] ?? []);
$stepVideosDe = !empty($stepVideosDe) ? $stepVideosDe : ($prevDe['step_videos'] ?? []);
$stepTimersEn = !empty($stepTimersEn) ? $stepTimersEn : ($prevEn['step_timers'] ?? []);
$stepTimersDe = !empty($stepTimersDe) ? $stepTimersDe : ($prevDe['step_timers'] ?? []);
if ($titleEn === '') {
$message = 'English title is required.';
@@ -282,6 +291,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
'ingredients' => $ingredientsEn,
'utensils' => $utensilsEn,
'steps' => $stepsEn,
'step_videos' => $stepVideosEn,
'step_timers' => $stepTimersEn,
],
'de' => [
'title' => $titleDe ?: $titleEn,
@@ -292,6 +303,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
'ingredients' => !empty($ingredientsDe) ? $ingredientsDe : $ingredientsEn,
'utensils' => !empty($utensilsDe) ? $utensilsDe : $utensilsEn,
'steps' => !empty($stepsDe) ? $stepsDe : $stepsEn,
'step_videos' => !empty($stepVideosDe) ? $stepVideosDe : $stepVideosEn,
'step_timers' => !empty($stepTimersDe) ? $stepTimersDe : $stepTimersEn,
],
],
];
@@ -578,6 +591,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
<textarea name="utensils_en" placeholder="12&quot; skillet&#10;Sheet pan&#10;Rubber spatula"><?php echo isset($editingEn['utensils']) ? e(implode("\n", $editingEn['utensils'])) : ''; ?></textarea>
<label>Steps (EN, one per line) *</label>
<textarea name="steps_en" placeholder="Preheat oven...&#10;Mix dry ingredients..."><?php echo isset($editingEn['steps']) ? e(implode("\n", $editingEn['steps'])) : ''; ?></textarea>
<label>Step Videos (EN, matching steps line by line)</label>
<textarea name="step_videos_en" placeholder="https://...mp4&#10;"><?php echo isset($editingEn['step_videos']) ? e(implode("\n", $editingEn['step_videos'])) : ''; ?></textarea>
<label>Step Timers (EN, matching steps line by line, in minutes)</label>
<textarea name="step_timers_en" placeholder="0&#10;15"><?php echo isset($editingEn['step_timers']) ? e(implode("\n", $editingEn['step_timers'])) : ''; ?></textarea>
<hr>
<h3>Deutsch</h3>
@@ -610,6 +627,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'delet
<textarea name="utensils_de" placeholder="Pfanne&#10;Kochtopf"><?php echo isset($editingDe['utensils']) ? e(implode("\n", $editingDe['utensils'])) : ''; ?></textarea>
<label>Schritte (DE, eine pro Zeile)</label>
<textarea name="steps_de" placeholder="Backofen vorheizen...&#10;Teig kneten..."><?php echo isset($editingDe['steps']) ? e(implode("\n", $editingDe['steps'])) : ''; ?></textarea>
<label>Step Videos (DE)</label>
<textarea name="step_videos_de"><?php echo isset($editingDe['step_videos']) ? e(implode("\n", $editingDe['step_videos'])) : ''; ?></textarea>
<label>Step Timers (DE)</label>
<textarea name="step_timers_de"><?php echo isset($editingDe['step_timers']) ? e(implode("\n", $editingDe['step_timers'])) : ''; ?></textarea>
<label><input type="checkbox" name="featured" value="1" <?php echo !empty($editing['featured']) ? 'checked' : ''; ?>> Mark as featured</label>
<label><input type="checkbox" name="coming_soon" value="1" <?php echo !empty($editing['coming_soon']) ? 'checked' : ''; ?>> Mark as coming soon (name & image only)</label>