show.php

Code Hygiene Score: 100

Keine Issues gefunden.

Versionen 1

Code

<?php ob_start(); ?>

<h1><?= htmlspecialchars($prompt['name']) ?></h1>

<nav class="breadcrumb">
    <a href="/prompts">Prompts</a>
    <span>/</span>
    <span><?= htmlspecialchars($prompt['name']) ?></span>
</nav>


<div class="page-actions">
    <a href="/prompts/<?= $prompt['id'] ?>/edit" class="btn btn--primary">Bearbeiten</a>
    <form method="post" action="/prompts/<?= $prompt['id'] ?>/duplicate" style="display:inline">
        <?= $csrfField ?>
        <button type="submit" class="btn btn--secondary">Duplizieren</button>
    </form>
</div>

<?php
    // Detect prompt type from name
    $type = 'other';
if (str_starts_with($prompt['name'], 'critic-')) {
    $type = 'critic';
} elseif (str_starts_with($prompt['name'], 'content-generate')) {
    $type = 'generate';
} elseif (str_starts_with($prompt['name'], 'content-revise')) {
    $type = 'revise';
} elseif (str_contains($prompt['name'], 'system')) {
    $type = 'system';
}
?>

<div class="detail-grid">
    <div class="detail-card">
        <h3>Details</h3>
        <dl class="detail-list">
            <dt>ID</dt>
            <dd><?= $prompt['id'] ?></dd>

            <dt>Typ</dt>
            <dd><span class="badge badge--type-<?= $type ?>"><?= $promptTypes[$type] ?? $type ?></span></dd>

            <dt>Version</dt>
            <dd>v<?= htmlspecialchars($prompt['version']) ?></dd>

            <dt>Status</dt>
            <dd>
                <?php if ($prompt['is_active']): ?>
                <span class="badge badge--success">Aktiv</span>
                <?php else: ?>
                <span class="badge badge--muted">Inaktiv</span>
                <?php endif; ?>
            </dd>

            <dt>Erstellt</dt>
            <dd><?= $prompt['created_at'] ?></dd>

            <dt>Aktualisiert</dt>
            <dd><?= $prompt['updated_at'] ?></dd>
        </dl>
    </div>

    <div class="detail-card">
        <h3>Verknüpfte Critics</h3>
        <?php if (!empty($linkedCritics)): ?>
        <ul class="linked-list">
            <?php foreach ($linkedCritics as $critic): ?>
            <li>
                <a href="/critics/<?= $critic['id'] ?>"><?= htmlspecialchars($critic['name']) ?></a>
                <?php if ($critic['is_active']): ?>
                <span class="badge badge--success badge--small">Aktiv</span>
                <?php else: ?>
                <span class="badge badge--muted badge--small">Inaktiv</span>
                <?php endif; ?>
            </li>
            <?php endforeach; ?>
        </ul>
        <?php else: ?>
        <p class="text-muted">Keine Critics verknüpft</p>
        <?php endif; ?>
    </div>
</div>

<h2>Prompt-Inhalt</h2>
<div class="code-block">
    <div class="code-header">
        <span>Zeichen: <?= strlen($prompt['content']) ?></span>
        <button class="btn btn--small" onclick="copyToClipboard()">Kopieren</button>
    </div>
    <pre id="prompt-content"><?= htmlspecialchars($prompt['content']) ?></pre>
</div>

<script>
function copyToClipboard() {
    const content = document.getElementById('prompt-content').textContent;
    navigator.clipboard.writeText(content).then(() => {
        alert('Prompt in Zwischenablage kopiert!');
    });
}
</script>

<style>
.detail-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1rem; margin: 1.5rem 0; }
.detail-card { background: var(--bg-card); padding: 1.25rem; border-radius: 8px; border: 1px solid var(--border-color); }
.detail-card h3 { margin-top: 0; font-size: 1rem; color: var(--text-muted); }
.detail-list { margin: 0; }
.detail-list dt { font-weight: 600; color: var(--text-muted); margin-top: 0.75rem; }
.detail-list dt:first-child { margin-top: 0; }
.detail-list dd { margin: 0.25rem 0 0; }
.linked-list { margin: 0; padding-left: 1.25rem; }
.linked-list li { margin: 0.5rem 0; }
.badge--small { font-size: 0.7rem; padding: 0.125rem 0.375rem; }
.code-block { background: var(--bg-alt); border-radius: 8px; overflow: hidden; margin-top: 1rem; }
.code-header { display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 1rem; background: var(--bg-card); border-bottom: 1px solid var(--border-color); }
.code-header span { font-size: 0.8rem; color: var(--text-muted); }
.code-block pre { margin: 0; padding: 1rem; font-size: 0.875rem; white-space: pre-wrap; overflow-x: auto; max-height: 500px; overflow-y: auto; }
.badge--type-critic { background: #6366f1; color: white; }
.badge--type-generate { background: #10b981; color: white; }
.badge--type-revise { background: #f59e0b; color: white; }
.badge--type-system { background: #ec4899; color: white; }
.badge--type-other { background: #6b7280; color: white; }
</style>

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