{
"event": "PreToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/semantic-explorer\/taxonomie.php",
"content": "<?php ob_start();\n\nfunction renderTaxonomyTree(array $items, int $level = 0): string\n{\n if (empty($items)) {\n return '';\n }\n $html = '<ol class=\"taxonomy-tree level-' . $level . '\">';\n foreach ($items as $item) {\n $html .= '<li>';\n $html .= '<span class=\"taxonomy-term\">';\n $html .= htmlspecialchars($item['name']);\n if ($item['chunk_count'] > 0) {\n $html .= ' <span class=\"badge badge--small\">' . $item['chunk_count'] . '<\/span>';\n }\n $html .= '<\/span>';\n if (!empty($item['children'])) {\n $html .= renderTaxonomyTree($item['children'], $level + 1);\n }\n $html .= '<\/li>';\n }\n $html .= '<\/ol>';\n\n return $html;\n}\n?>\n\n<nav class=\"breadcrumb\">\n <a href=\"\/\">Home<\/a> » <a href=\"\/explorer\">Explorer<\/a> » <a href=\"\/semantic-explorer\">Semantic Explorer<\/a> » Taxonomie\n<\/nav>\n\n<h1>Taxonomie<\/h1>\n<p>Hierarchische Kategorisierung der Inhalte.<\/p>\n\n<div class=\"stats-grid\">\n <div class=\"stat-card stat-card--primary\">\n <span class=\"stat-card__value\"><?= $stats['total_terms'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Begriffe<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $stats['root_terms'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Hauptkategorien<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $stats['max_depth'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Max. Tiefe<\/span>\n <\/div>\n <div class=\"stat-card stat-card--success\">\n <span class=\"stat-card__value\"><?= $stats['tagged_chunks'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Getaggte Chunks<\/span>\n <\/div>\n<\/div>\n\n<?php if (!empty($hierarchy)): ?>\n<h2>Hierarchie<\/h2>\n<?= renderTaxonomyTree($hierarchy) ?>\n<?php endif; ?>\n\n<?php if (!empty($terms)): ?>\n<h2>Alle Begriffe<\/h2>\n\n<div class=\"filters\">\n <input type=\"search\" id=\"taxonomy-search\" class=\"form-input\" placeholder=\"Durchsuchen...\">\n<\/div>\n\n<table id=\"taxonomy-table\" data-sortable>\n <thead>\n <tr>\n <th data-sort=\"name\">Begriff<\/th>\n <th data-sort=\"path\">Pfad<\/th>\n <th data-sort=\"depth\">Tiefe<\/th>\n <th data-sort=\"chunk_count\">Chunks<\/th>\n <th data-sort=\"children_count\">Unterbegriffe<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n <?php foreach ($terms as $t): ?>\n <tr>\n <td><?= htmlspecialchars($t['name']) ?><\/td>\n <td><code><?= htmlspecialchars($t['path'] ?? $t['slug']) ?><\/code><\/td>\n <td><?= $t['depth'] ?><\/td>\n <td><?= $t['chunk_count'] ?><\/td>\n <td><?= $t['children_count'] ?><\/td>\n <\/tr>\n <?php endforeach; ?>\n <\/tbody>\n<\/table>\n<?php else: ?>\n<p class=\"empty-state\">Keine Taxonomie-Begriffe gefunden. Fuehren Sie die semantische Analyse aus.<\/p>\n<?php endif; ?>\n\n<p class=\"links-bar\">\n <a href=\"\/semantic-explorer\">Zurueck zum Explorer<\/a> |\n <a href=\"\/semantic-explorer\/ontologie\">Ontologie<\/a>\n<\/p>\n\n<script type=\"module\">\nimport { init } from '\/js\/components\/data-table.js';\n\nconst dataTable = init({\n clock: { now_epoch_ms_utc: () => Date.now() },\n logger: console,\n ui: {\n showMessage: (msg) => { console.log(msg.type + ': ' + msg.text); },\n disableFeature: (key) => { console.warn('Feature disabled: ' + key); },\n offerRetry: () => Promise.resolve(false)\n },\n runId: crypto.randomUUID()\n});\n\ndataTable.create('taxonomy-table', {\n searchInput: 'taxonomy-search',\n pageSize: 20\n});\n<\/script>\n\n<?php $content = ob_get_clean(); ?>\n<?php require VIEW_PATH . '\/layout.php'; ?>\n"
}
}
{
"tool_response": {
"type": "update",
"filePath": "\/var\/www\/dev.campus.systemische-tools.de\/src\/View\/semantic-explorer\/taxonomie.php",
"content": "<?php ob_start();\n\nfunction renderTaxonomyTree(array $items, int $level = 0): string\n{\n if (empty($items)) {\n return '';\n }\n $html = '<ol class=\"taxonomy-tree level-' . $level . '\">';\n foreach ($items as $item) {\n $html .= '<li>';\n $html .= '<span class=\"taxonomy-term\">';\n $html .= htmlspecialchars($item['name']);\n if ($item['chunk_count'] > 0) {\n $html .= ' <span class=\"badge badge--small\">' . $item['chunk_count'] . '<\/span>';\n }\n $html .= '<\/span>';\n if (!empty($item['children'])) {\n $html .= renderTaxonomyTree($item['children'], $level + 1);\n }\n $html .= '<\/li>';\n }\n $html .= '<\/ol>';\n\n return $html;\n}\n?>\n\n<nav class=\"breadcrumb\">\n <a href=\"\/\">Home<\/a> » <a href=\"\/explorer\">Explorer<\/a> » <a href=\"\/semantic-explorer\">Semantic Explorer<\/a> » Taxonomie\n<\/nav>\n\n<h1>Taxonomie<\/h1>\n<p>Hierarchische Kategorisierung der Inhalte.<\/p>\n\n<div class=\"stats-grid\">\n <div class=\"stat-card stat-card--primary\">\n <span class=\"stat-card__value\"><?= $stats['total_terms'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Begriffe<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $stats['root_terms'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Hauptkategorien<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $stats['max_depth'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Max. Tiefe<\/span>\n <\/div>\n <div class=\"stat-card stat-card--success\">\n <span class=\"stat-card__value\"><?= $stats['tagged_chunks'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Getaggte Chunks<\/span>\n <\/div>\n<\/div>\n\n<?php if (!empty($hierarchy)): ?>\n<h2>Hierarchie<\/h2>\n<?= renderTaxonomyTree($hierarchy) ?>\n<?php endif; ?>\n\n<?php if (!empty($terms)): ?>\n<h2>Alle Begriffe<\/h2>\n\n<div class=\"filters\">\n <input type=\"search\" id=\"taxonomy-search\" class=\"form-input\" placeholder=\"Durchsuchen...\">\n<\/div>\n\n<table id=\"taxonomy-table\" data-sortable>\n <thead>\n <tr>\n <th data-sort=\"name\">Begriff<\/th>\n <th data-sort=\"path\">Pfad<\/th>\n <th data-sort=\"depth\">Tiefe<\/th>\n <th data-sort=\"chunk_count\">Chunks<\/th>\n <th data-sort=\"children_count\">Unterbegriffe<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n <?php foreach ($terms as $t): ?>\n <tr>\n <td><?= htmlspecialchars($t['name']) ?><\/td>\n <td><code><?= htmlspecialchars($t['path'] ?? $t['slug']) ?><\/code><\/td>\n <td><?= $t['depth'] ?><\/td>\n <td><?= $t['chunk_count'] ?><\/td>\n <td><?= $t['children_count'] ?><\/td>\n <\/tr>\n <?php endforeach; ?>\n <\/tbody>\n<\/table>\n<?php else: ?>\n<p class=\"empty-state\">Keine Taxonomie-Begriffe gefunden. Fuehren Sie die semantische Analyse aus.<\/p>\n<?php endif; ?>\n\n<p class=\"links-bar\">\n <a href=\"\/semantic-explorer\">Zurueck zum Explorer<\/a> |\n <a href=\"\/semantic-explorer\/ontologie\">Ontologie<\/a>\n<\/p>\n\n<script type=\"module\">\nimport { init } from '\/js\/components\/data-table.js';\n\nconst dataTable = init({\n clock: { now_epoch_ms_utc: () => Date.now() },\n logger: console,\n ui: {\n showMessage: (msg) => { console.log(msg.type + ': ' + msg.text); },\n disableFeature: (key) => { console.warn('Feature disabled: ' + key); },\n offerRetry: () => Promise.resolve(false)\n },\n runId: crypto.randomUUID()\n});\n\ndataTable.create('taxonomy-table', {\n searchInput: 'taxonomy-search',\n pageSize: 20\n});\n<\/script>\n\n<?php $content = ob_get_clean(); ?>\n<?php require VIEW_PATH . '\/layout.php'; ?>\n",
"structuredPatch": [
{
"oldStart": 58,
"oldLines": 7,
"newStart": 58,
"newLines": 12,
"lines": [
" ",
" <?php if (!empty($terms)): ?>",
" <h2>Alle Begriffe<\/h2>",
"-<table data-sortable>",
"+",
"+<div class=\"filters\">",
"+ <input type=\"search\" id=\"taxonomy-search\" class=\"form-input\" placeholder=\"Durchsuchen...\">",
"+<\/div>",
"+",
"+<table id=\"taxonomy-table\" data-sortable>",
" <thead>",
" <tr>",
" <th data-sort=\"name\">Begriff<\/th>"
]
},
{
"oldStart": 81,
"oldLines": 7,
"newStart": 86,
"newLines": 7,
"lines": [
" <\/tbody>",
" <\/table>",
" <?php else: ?>",
"-<p>Keine Taxonomie-Begriffe gefunden. Fuehren Sie die semantische Analyse aus.<\/p>",
"+<p class=\"empty-state\">Keine Taxonomie-Begriffe gefunden. Fuehren Sie die semantische Analyse aus.<\/p>",
" <?php endif; ?>",
" ",
" <p class=\"links-bar\">"
]
},
{
"oldStart": 89,
"oldLines": 5,
"newStart": 94,
"newLines": 25,
"lines": [
" <a href=\"\/semantic-explorer\/ontologie\">Ontologie<\/a>",
" <\/p>",
" ",
"+<script type=\"module\">",
"+import { init } from '\/js\/components\/data-table.js';",
"+",
"+const dataTable = init({",
"+ clock: { now_epoch_ms_utc: () => Date.now() },",
"+ logger: console,",
"+ ui: {",
"+ showMessage: (msg) => { console.log(msg.type + ': ' + msg.text); },",
"+ disableFeature: (key) => { console.warn('Feature disabled: ' + key); },",
"+ offerRetry: () => Promise.resolve(false)",
"+ },",
"+ runId: crypto.randomUUID()",
"+});",
"+",
"+dataTable.create('taxonomy-table', {",
"+ searchInput: 'taxonomy-search',",
"+ pageSize: 20",
"+});",
"+<\/script>",
"+",
" <?php $content = ob_get_clean(); ?>",
" <?php require VIEW_PATH . '\/layout.php'; ?>"
]
}
],
"originalFile": "<?php ob_start();\n\nfunction renderTaxonomyTree(array $items, int $level = 0): string\n{\n if (empty($items)) {\n return '';\n }\n $html = '<ol class=\"taxonomy-tree level-' . $level . '\">';\n foreach ($items as $item) {\n $html .= '<li>';\n $html .= '<span class=\"taxonomy-term\">';\n $html .= htmlspecialchars($item['name']);\n if ($item['chunk_count'] > 0) {\n $html .= ' <span class=\"badge badge--small\">' . $item['chunk_count'] . '<\/span>';\n }\n $html .= '<\/span>';\n if (!empty($item['children'])) {\n $html .= renderTaxonomyTree($item['children'], $level + 1);\n }\n $html .= '<\/li>';\n }\n $html .= '<\/ol>';\n\n return $html;\n}\n?>\n\n<nav class=\"breadcrumb\">\n <a href=\"\/\">Home<\/a> » <a href=\"\/explorer\">Explorer<\/a> » <a href=\"\/semantic-explorer\">Semantic Explorer<\/a> » Taxonomie\n<\/nav>\n\n<h1>Taxonomie<\/h1>\n<p>Hierarchische Kategorisierung der Inhalte.<\/p>\n\n<div class=\"stats-grid\">\n <div class=\"stat-card stat-card--primary\">\n <span class=\"stat-card__value\"><?= $stats['total_terms'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Begriffe<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $stats['root_terms'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Hauptkategorien<\/span>\n <\/div>\n <div class=\"stat-card\">\n <span class=\"stat-card__value\"><?= $stats['max_depth'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Max. Tiefe<\/span>\n <\/div>\n <div class=\"stat-card stat-card--success\">\n <span class=\"stat-card__value\"><?= $stats['tagged_chunks'] ?? 0 ?><\/span>\n <span class=\"stat-card__label\">Getaggte Chunks<\/span>\n <\/div>\n<\/div>\n\n<?php if (!empty($hierarchy)): ?>\n<h2>Hierarchie<\/h2>\n<?= renderTaxonomyTree($hierarchy) ?>\n<?php endif; ?>\n\n<?php if (!empty($terms)): ?>\n<h2>Alle Begriffe<\/h2>\n<table data-sortable>\n <thead>\n <tr>\n <th data-sort=\"name\">Begriff<\/th>\n <th data-sort=\"path\">Pfad<\/th>\n <th data-sort=\"depth\">Tiefe<\/th>\n <th data-sort=\"chunk_count\">Chunks<\/th>\n <th data-sort=\"children_count\">Unterbegriffe<\/th>\n <\/tr>\n <\/thead>\n <tbody>\n <?php foreach ($terms as $t): ?>\n <tr>\n <td><?= htmlspecialchars($t['name']) ?><\/td>\n <td><code><?= htmlspecialchars($t['path'] ?? $t['slug']) ?><\/code><\/td>\n <td><?= $t['depth'] ?><\/td>\n <td><?= $t['chunk_count'] ?><\/td>\n <td><?= $t['children_count'] ?><\/td>\n <\/tr>\n <?php endforeach; ?>\n <\/tbody>\n<\/table>\n<?php else: ?>\n<p>Keine Taxonomie-Begriffe gefunden. Fuehren Sie die semantische Analyse aus.<\/p>\n<?php endif; ?>\n\n<p class=\"links-bar\">\n <a href=\"\/semantic-explorer\">Zurueck zum Explorer<\/a> |\n <a href=\"\/semantic-explorer\/ontologie\">Ontologie<\/a>\n<\/p>\n\n<?php $content = ob_get_clean(); ?>\n<?php require VIEW_PATH . '\/layout.php'; ?>\n"
}
}