{
"tool_response": {
"type": "update",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/critics\/form.php",
"content": "<?php\n\ndeclare(strict_types=1);\n\n\/\/ @responsibility: View für Critic erstellen\/bearbeiten mit HTMX-Formular\n\nob_start();\n?>\n\n<h1><?= $isEdit ? 'Critic bearbeiten' : 'Neuer Critic' ?><\/h1>\n\n<nav class=\"breadcrumb\">\n <a href=\"\/critics\">Critics<\/a>\n <?php if ($isEdit): ?>\n <span>\/<\/span>\n <a href=\"\/critics\/<?= $critic['id'] ?>\"><?= htmlspecialchars($critic['name']) ?><\/a>\n <span>\/<\/span>\n <span>Bearbeiten<\/span>\n <?php else: ?>\n <span>\/<\/span>\n <span>Neu<\/span>\n <?php endif; ?>\n<\/nav>\n\n<form class=\"form\"\n hx-post=\"<?= $isEdit ? '\/critics\/' . $critic['id'] : '\/critics' ?>\"\n hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'\n hx-disabled-elt=\"button[type=submit]\">\n\n <div class=\"form-group\">\n <label for=\"name\">Name *<\/label>\n <input type=\"text\" id=\"name\" name=\"name\" class=\"form-input\"\n value=\"<?= htmlspecialchars($critic['name'] ?? '') ?>\" required>\n <small class=\"form-help\">Eindeutiger Name des Critics (z.B. \"Faktenprufer\", \"Stilist\")<\/small>\n <\/div>\n\n <div class=\"form-group\">\n <label for=\"fokus\">Fokus-Bereiche (pro Zeile einer)<\/label>\n <textarea id=\"fokus\" name=\"fokus\" class=\"form-textarea\" rows=\"5\"><?php\n $fokus = [];\nif (!empty($critic['fokus'])) {\n $fokus = json_decode($critic['fokus'], true) ?: [];\n}\necho htmlspecialchars(implode(\"\\n\", $fokus));\n?><\/textarea>\n <small class=\"form-help\">Worauf der Critic bei der Analyse achten soll (z.B. \"Quellenvalidierung\", \"Logische Konsistenz\")<\/small>\n <\/div>\n\n <div class=\"form-group\">\n <label for=\"prompt_id\">Prompt-Template<\/label>\n <select id=\"prompt_id\" name=\"prompt_id\" class=\"form-select\">\n <option value=\"\">-- Generischer Prompt --<\/option>\n <?php foreach ($prompts as $prompt): ?>\n <option value=\"<?= $prompt['id'] ?>\" <?= ($critic['prompt_id'] ?? '') == $prompt['id'] ? 'selected' : '' ?>>\n <?= htmlspecialchars($prompt['name']) ?> (v<?= $prompt['version'] ?>)\n <\/option>\n <?php endforeach; ?>\n <\/select>\n <small class=\"form-help\">Welcher Prompt-Template fuer diesen Critic verwendet werden soll<\/small>\n <\/div>\n\n <div class=\"form-row\">\n <div class=\"form-group form-group--half\">\n <label for=\"sort_order\">Reihenfolge<\/label>\n <input type=\"number\" id=\"sort_order\" name=\"sort_order\" class=\"form-input\"\n value=\"<?= $critic['sort_order'] ?? 0 ?>\" min=\"0\">\n <small class=\"form-help\">Niedrigere Werte werden zuerst ausgefuehrt<\/small>\n <\/div>\n\n <div class=\"form-group form-group--half\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" name=\"is_active\" value=\"1\"\n <?= ($critic['is_active'] ?? 1) ? 'checked' : '' ?>>\n Aktiv\n <\/label>\n <small class=\"form-help\">Nur aktive Critics werden bei Critique-Runden verwendet<\/small>\n <\/div>\n <\/div>\n\n <div class=\"form-actions\">\n <button type=\"submit\" class=\"btn btn--primary\"><?= $isEdit ? 'Speichern' : 'Erstellen' ?><\/button>\n <a href=\"<?= $isEdit ? '\/critics\/' . $critic['id'] : '\/critics' ?>\" class=\"btn btn--secondary\">Abbrechen<\/a>\n <?php if ($isEdit): ?>\n <button type=\"button\"\n class=\"btn btn--danger\"\n hx-post=\"\/critics\/<?= $critic['id'] ?>\/delete\"\n hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'\n hx-confirm=\"Critic "<?= htmlspecialchars($critic['name']) ?>" wirklich loeschen?\"\n hx-disabled-elt=\"this\">\n Loeschen\n <\/button>\n <?php endif; ?>\n <\/div>\n<\/form>\n\n<style>\n.form-row { display: flex; gap: 1rem; }\n.form-group--half { flex: 1; }\n.checkbox-label { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; }\n.form-actions { display: flex; gap: 0.5rem; margin-top: 1.5rem; }\n.btn--danger { background: #dc2626; color: white; margin-left: auto; }\n.btn--danger:hover { background: #b91c1c; }\n<\/style>\n\n<?php $content = ob_get_clean(); ?>\n<?php require VIEW_PATH . '\/layout.php'; ?>\n",
"structuredPatch": [
{
"oldStart": 1,
"oldLines": 5,
"newStart": 1,
"newLines": 12,
"lines": [
"-<?php ob_start(); ?>",
"+<?php",
" ",
"+declare(strict_types=1);",
"+",
"+\/\/ @responsibility: View für Critic erstellen\/bearbeiten mit HTMX-Formular",
"+",
"+ob_start();",
"+?>",
"+",
" <h1><?= $isEdit ? 'Critic bearbeiten' : 'Neuer Critic' ?><\/h1>",
" ",
" <nav class=\"breadcrumb\">"
]
},
{
"oldStart": 15,
"oldLines": 18,
"newStart": 22,
"newLines": 16,
"lines": [
" <?php endif; ?>",
" <\/nav>",
" ",
"-<?php if (isset($_SESSION['error'])): ?>",
"-<div class=\"alert alert--error\"><?= htmlspecialchars($_SESSION['error']) ?><\/div>",
"-<?php unset($_SESSION['error']); endif; ?>",
"+<form class=\"form\"",
"+ hx-post=\"<?= $isEdit ? '\/critics\/' . $critic['id'] : '\/critics' ?>\"",
"+ hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'",
"+ hx-disabled-elt=\"button[type=submit]\">",
" ",
"-<form method=\"post\" action=\"<?= $isEdit ? '\/critics\/' . $critic['id'] : '\/critics' ?>\" class=\"form\">",
"- <?= $csrfField ?>",
"-",
" <div class=\"form-group\">",
" <label for=\"name\">Name *<\/label>",
" <input type=\"text\" id=\"name\" name=\"name\" class=\"form-input\"",
" value=\"<?= htmlspecialchars($critic['name'] ?? '') ?>\" required>",
"- <small class=\"form-help\">Eindeutiger Name des Critics (z.B. \"Faktenprüfer\", \"Stilist\")<\/small>",
"+ <small class=\"form-help\">Eindeutiger Name des Critics (z.B. \"Faktenprufer\", \"Stilist\")<\/small>",
" <\/div>",
" ",
" <div class=\"form-group\">"
]
},
{
"oldStart": 51,
"oldLines": 7,
"newStart": 56,
"newLines": 7,
"lines": [
" <\/option>",
" <?php endforeach; ?>",
" <\/select>",
"- <small class=\"form-help\">Welcher Prompt-Template für diesen Critic verwendet werden soll<\/small>",
"+ <small class=\"form-help\">Welcher Prompt-Template fuer diesen Critic verwendet werden soll<\/small>",
" <\/div>",
" ",
" <div class=\"form-row\">"
]
},
{
"oldStart": 59,
"oldLines": 7,
"newStart": 64,
"newLines": 7,
"lines": [
" <label for=\"sort_order\">Reihenfolge<\/label>",
" <input type=\"number\" id=\"sort_order\" name=\"sort_order\" class=\"form-input\"",
" value=\"<?= $critic['sort_order'] ?? 0 ?>\" min=\"0\">",
"- <small class=\"form-help\">Niedrigere Werte werden zuerst ausgeführt<\/small>",
"+ <small class=\"form-help\">Niedrigere Werte werden zuerst ausgefuehrt<\/small>",
" <\/div>",
" ",
" <div class=\"form-group form-group--half\">"
]
},
{
"oldStart": 76,
"oldLines": 25,
"newStart": 81,
"newLines": 18,
"lines": [
" <button type=\"submit\" class=\"btn btn--primary\"><?= $isEdit ? 'Speichern' : 'Erstellen' ?><\/button>",
" <a href=\"<?= $isEdit ? '\/critics\/' . $critic['id'] : '\/critics' ?>\" class=\"btn btn--secondary\">Abbrechen<\/a>",
" <?php if ($isEdit): ?>",
"- <button type=\"button\" class=\"btn btn--danger\" onclick=\"confirmDelete()\">Löschen<\/button>",
"+ <button type=\"button\"",
"+ class=\"btn btn--danger\"",
"+ hx-post=\"\/critics\/<?= $critic['id'] ?>\/delete\"",
"+ hx-headers='{\"X-CSRF-TOKEN\": \"<?= $csrfToken ?>\"}'",
"+ hx-confirm=\"Critic "<?= htmlspecialchars($critic['name']) ?>" wirklich loeschen?\"",
"+ hx-disabled-elt=\"this\">",
"+ Loeschen",
"+ <\/button>",
" <?php endif; ?>",
" <\/div>",
" <\/form>",
" ",
"-<?php if ($isEdit): ?>",
"-<form id=\"delete-form\" method=\"post\" action=\"\/critics\/<?= $critic['id'] ?>\/delete\" style=\"display:none\">",
"- <?= $csrfField ?>",
"-<\/form>",
"-",
"-<script>",
"-function confirmDelete() {",
"- if (confirm('Critic \"<?= addslashes($critic['name']) ?>\" wirklich löschen?')) {",
"- document.getElementById('delete-form').submit();",
"- }",
"-}",
"-<\/script>",
"-<?php endif; ?>",
"-",
" <style>",
" .form-row { display: flex; gap: 1rem; }",
" .form-group--half { flex: 1; }"
]
}
],
"originalFile": "<?php ob_start(); ?>\n\n<h1><?= $isEdit ? 'Critic bearbeiten' : 'Neuer Critic' ?><\/h1>\n\n<nav class=\"breadcrumb\">\n <a href=\"\/critics\">Critics<\/a>\n <?php if ($isEdit): ?>\n <span>\/<\/span>\n <a href=\"\/critics\/<?= $critic['id'] ?>\"><?= htmlspecialchars($critic['name']) ?><\/a>\n <span>\/<\/span>\n <span>Bearbeiten<\/span>\n <?php else: ?>\n <span>\/<\/span>\n <span>Neu<\/span>\n <?php endif; ?>\n<\/nav>\n\n<?php if (isset($_SESSION['error'])): ?>\n<div class=\"alert alert--error\"><?= htmlspecialchars($_SESSION['error']) ?><\/div>\n<?php unset($_SESSION['error']); endif; ?>\n\n<form method=\"post\" action=\"<?= $isEdit ? '\/critics\/' . $critic['id'] : '\/critics' ?>\" class=\"form\">\n <?= $csrfField ?>\n\n <div class=\"form-group\">\n <label for=\"name\">Name *<\/label>\n <input type=\"text\" id=\"name\" name=\"name\" class=\"form-input\"\n value=\"<?= htmlspecialchars($critic['name'] ?? '') ?>\" required>\n <small class=\"form-help\">Eindeutiger Name des Critics (z.B. \"Faktenprüfer\", \"Stilist\")<\/small>\n <\/div>\n\n <div class=\"form-group\">\n <label for=\"fokus\">Fokus-Bereiche (pro Zeile einer)<\/label>\n <textarea id=\"fokus\" name=\"fokus\" class=\"form-textarea\" rows=\"5\"><?php\n $fokus = [];\nif (!empty($critic['fokus'])) {\n $fokus = json_decode($critic['fokus'], true) ?: [];\n}\necho htmlspecialchars(implode(\"\\n\", $fokus));\n?><\/textarea>\n <small class=\"form-help\">Worauf der Critic bei der Analyse achten soll (z.B. \"Quellenvalidierung\", \"Logische Konsistenz\")<\/small>\n <\/div>\n\n <div class=\"form-group\">\n <label for=\"prompt_id\">Prompt-Template<\/label>\n <select id=\"prompt_id\" name=\"prompt_id\" class=\"form-select\">\n <option value=\"\">-- Generischer Prompt --<\/option>\n <?php foreach ($prompts as $prompt): ?>\n <option value=\"<?= $prompt['id'] ?>\" <?= ($critic['prompt_id'] ?? '') == $prompt['id'] ? 'selected' : '' ?>>\n <?= htmlspecialchars($prompt['name']) ?> (v<?= $prompt['version'] ?>)\n <\/option>\n <?php endforeach; ?>\n <\/select>\n <small class=\"form-help\">Welcher Prompt-Template für diesen Critic verwendet werden soll<\/small>\n <\/div>\n\n <div class=\"form-row\">\n <div class=\"form-group form-group--half\">\n <label for=\"sort_order\">Reihenfolge<\/label>\n <input type=\"number\" id=\"sort_order\" name=\"sort_order\" class=\"form-input\"\n value=\"<?= $critic['sort_order'] ?? 0 ?>\" min=\"0\">\n <small class=\"form-help\">Niedrigere Werte werden zuerst ausgeführt<\/small>\n <\/div>\n\n <div class=\"form-group form-group--half\">\n <label class=\"checkbox-label\">\n <input type=\"checkbox\" name=\"is_active\" value=\"1\"\n <?= ($critic['is_active'] ?? 1) ? 'checked' : '' ?>>\n Aktiv\n <\/label>\n <small class=\"form-help\">Nur aktive Critics werden bei Critique-Runden verwendet<\/small>\n <\/div>\n <\/div>\n\n <div class=\"form-actions\">\n <button type=\"submit\" class=\"btn btn--primary\"><?= $isEdit ? 'Speichern' : 'Erstellen' ?><\/button>\n <a href=\"<?= $isEdit ? '\/critics\/' . $critic['id'] : '\/critics' ?>\" class=\"btn btn--secondary\">Abbrechen<\/a>\n <?php if ($isEdit): ?>\n <button type=\"button\" class=\"btn btn--danger\" onclick=\"confirmDelete()\">Löschen<\/button>\n <?php endif; ?>\n <\/div>\n<\/form>\n\n<?php if ($isEdit): ?>\n<form id=\"delete-form\" method=\"post\" action=\"\/critics\/<?= $critic['id'] ?>\/delete\" style=\"display:none\">\n <?= $csrfField ?>\n<\/form>\n\n<script>\nfunction confirmDelete() {\n if (confirm('Critic \"<?= addslashes($critic['name']) ?>\" wirklich löschen?')) {\n document.getElementById('delete-form').submit();\n }\n}\n<\/script>\n<?php endif; ?>\n\n<style>\n.form-row { display: flex; gap: 1rem; }\n.form-group--half { flex: 1; }\n.checkbox-label { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; }\n.form-actions { display: flex; gap: 0.5rem; margin-top: 1.5rem; }\n.btn--danger { background: #dc2626; color: white; margin-left: auto; }\n.btn--danger:hover { background: #b91c1c; }\n<\/style>\n\n<?php $content = ob_get_clean(); ?>\n<?php require VIEW_PATH . '\/layout.php'; ?>\n"
}
}