relationen.php

Code Hygiene Score: 100

Keine Issues gefunden.

Versionen 4

Code

<?php ob_start(); ?>

<nav class="breadcrumb">
    <a href="/">Campus KI</a> &raquo; <a href="/semantic-explorer">Semantic Explorer</a> &raquo; Relationen
</nav>

<h1>Relationen</h1>
<p>Beziehungen zwischen Entitäten.</p>

<div class="stats-grid">
    <div class="stat-card stat-card--primary">
        <span class="stat-card__value"><?= $stats['total'] ?? 0 ?></span>
        <span class="stat-card__label">Relationen</span>
    </div>
    <div class="stat-card">
        <span class="stat-card__value"><?= $stats['sources'] ?? 0 ?></span>
        <span class="stat-card__label">Quellen</span>
    </div>
    <div class="stat-card">
        <span class="stat-card__value"><?= $stats['targets'] ?? 0 ?></span>
        <span class="stat-card__label">Ziele</span>
    </div>
</div>

<div class="filters">
    <input type="search" id="relations-search" class="form-input" placeholder="Durchsuchen...">
    <select id="filter-type" class="form-select--inline">
        <option value="">Alle Typen</option>
        <?php foreach ($relationTypes as $rt): ?>
        <option value="<?= strtolower(htmlspecialchars($rt['relation_type'])) ?>"><?= htmlspecialchars($rt['relation_type']) ?> (<?= $rt['count'] ?>)</option>
        <?php endforeach; ?>
    </select>
</div>

<?php if (!empty($relations)): ?>
<table id="relations-table" data-sortable>
    <thead>
        <tr>
            <th data-sort="source_name">Quelle</th>
            <th data-sort="relation_type">Relation</th>
            <th data-sort="target_name">Ziel</th>
            <th data-sort="strength">Staerke</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($relations as $r): ?>
        <tr>
            <td>
                <a href="/semantic-explorer/entitaeten/<?= $r['source_entity_id'] ?>"><?= htmlspecialchars($r['source_name']) ?></a>
                <span class="badge badge--small"><?= $r['source_type'] ?></span>
            </td>
            <td><span class="badge"><?= htmlspecialchars($r['relation_type']) ?></span></td>
            <td>
                <a href="/semantic-explorer/entitaeten/<?= $r['target_entity_id'] ?>"><?= htmlspecialchars($r['target_name']) ?></a>
                <span class="badge badge--small"><?= $r['target_type'] ?></span>
            </td>
            <td><?= number_format($r['strength'] * \Domain\Constants::PERCENT_FULL, 0) ?>%</td>
        </tr>
        <?php endforeach; ?>
    </tbody>
</table>
<?php else: ?>
<p class="empty-state">Keine Relationen gefunden. Fuehren Sie die semantische Analyse aus.</p>
<?php endif; ?>

<p class="links-bar">
    <a href="/semantic-explorer">Zurueck zum Explorer</a> |
    <a href="/semantic-explorer/entitaeten">Entitäten</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('relations-table', {
    searchInput: 'relations-search',
    pageSize: 20,
    filters: {
        'filter-type': 1
    }
});
</script>

<?php $content = ob_get_clean(); ?>
<?php require VIEW_PATH . '/layout.php'; ?>
← Übersicht