Quelltext des aktuellen Standes
<?php $this->layout('layouts/admin', ['page_title' => $page_title, 'current_admin_page' => $current_admin_page]); ?>
<?php $counts = $counts ?? ['programme' => 0, 'installationen' => 0, 'geraete' => 0, 'system' => 0]; ?>
<div class="settings-page">
<p class="text-muted" style="margin-bottom:1rem;">
<?= $this->te('Das Software-Inventar erfasst nichts von selbst. Jede Quelle ist einzeln einzuschalten; solange keine eingeschaltet ist, wird kein Programm gelesen und keines gespeichert.') ?>
</p>
<form method="POST" action="/admin/software/settings">
<input type="hidden" name="_csrf" value="<?= $this->e($this->csrf()) ?>">
<!-- Quelle: Inventar-Agent -->
<section class="settings-card">
<div class="settings-card-header">
<span class="settings-card-icon">💻</span>
<div>
<h2><?= $this->te('Über den Inventar-Agenten') ?></h2>
<p class="settings-card-desc">
<?= $this->te('Der PowerShell-Agent, der ohnehin Hardware meldet, liest zusätzlich die installierten Programme aus der Registry.') ?>
</p>
</div>
</div>
<div class="settings-card-body">
<div class="form-group" style="margin-bottom:0;">
<label class="settings-toggle" style="display:inline-flex;align-items:center;gap:.5rem;">
<input type="checkbox" name="software_collect_agent" value="1" <?= !empty($collect_agent) ? 'checked' : '' ?>>
<span><strong><?= $this->te('Programme über den Inventar-Agenten erfassen') ?></strong></span>
</label>
<small class="form-hint">
<?= $this->t('<strong>Nach dem Einschalten muss das Agent-Skript einmal neu heruntergeladen werden</strong> (<a href="/admin/inventory/sync">Inventar-Sync</a>) – erst das neue Skript sammelt Programme. Gelesen wird nur, was maschinenweit installiert ist; was einzelne Anmeldenamen für sich installiert haben, bleibt außen vor.') ?>
</small>
</div>
</div>
</section>
<!-- Quelle: Intune -->
<section class="settings-card">
<div class="settings-card-header">
<span class="settings-card-icon">☁</span>
<div>
<h2><?= $this->te('Über den Intune-Abgleich') ?></h2>
<p class="settings-card-desc">
<?= $this->te('Intune führt je Gerät die erkannten Programme. Der bestehende Abgleich nimmt sie mit.') ?>
</p>
</div>
</div>
<div class="settings-card-body">
<div class="form-group" style="margin-bottom:0;">
<label class="settings-toggle" style="display:inline-flex;align-items:center;gap:.5rem;">
<input type="checkbox" name="software_collect_intune" value="1" <?= !empty($collect_intune) ? 'checked' : '' ?>>
<span><strong><?= $this->te('Programme über den Intune-Abgleich erfassen') ?></strong></span>
</label>
<small class="form-hint">
<?= $this->t('Kostet einen zusätzlichen Abruf je Gerät – bei großen Beständen verlängert das den Lauf. Intune meldet Name und Version; den Hersteller nur, wenn unter <a href="/admin/inventory/intune">Intune</a> die Beta-Schnittstelle eingeschaltet ist.') ?>
<?php if (empty($intune_configured)): ?>
<br><?= $this->t('<strong>Hinweis:</strong> Es ist noch keine Intune-Verbindung hinterlegt – der Schalter bleibt bis dahin wirkungslos.') ?>
<?php endif; ?>
</small>
</div>
</div>
</section>
<!-- Darstellung -->
<section class="settings-card">
<div class="settings-card-header">
<span class="settings-card-icon">⚙</span>
<div>
<h2><?= $this->te('Darstellung') ?></h2>
<p class="settings-card-desc"><?= $this->t('Was in der Liste unter <code>/software</code> erscheint.') ?></p>
</div>
</div>
<div class="settings-card-body">
<div class="form-group" style="margin-bottom:0;">
<label class="settings-toggle" style="display:inline-flex;align-items:center;gap:.5rem;">
<input type="checkbox" name="software_hide_system" value="1" <?= !empty($hide_system) ? 'checked' : '' ?>>
<span><strong><?= $this->te('Systembestandteile ausblenden') ?></strong></span>
</label>
<small class="form-hint">
<?= $this->te('Updates, Laufzeitumgebungen, Treiber und Sprachpakete machen den größten Teil der Einträge aus. Sie bleiben erfasst – gerade Laufzeitumgebungen sind für eine spätere Schwachstellenzuordnung interessant –, stehen in der Liste aber nicht im Weg. Ein einzelnes Programm lässt sich auf seiner Seite abweichend einstufen.') ?>
</small>
</div>
</div>
</section>
<div class="form-actions" style="display:flex;gap:.75rem;flex-wrap:wrap;">
<button type="submit" class="btn btn-primary"><?= $this->te('Speichern') ?></button>
<a href="/software" class="btn btn-default"><?= $this->te('Zum Inventar') ?></a>
</div>
</form>
<!-- Eigenes Formular: das Leeren gehört nicht zum Speichern der Einstellungen -->
<section class="settings-card">
<div class="settings-card-header">
<span class="settings-card-icon">🗑</span>
<div>
<h2><?= $this->te('Erfasste Daten') ?></h2>
<p class="settings-card-desc">
<?= $this->te('{programme} Programm(e) auf {geraete} Gerät(en), {installationen} Installation(en) insgesamt.', ['programme' => (int)$counts['programme'], 'geraete' => (int)$counts['geraete'], 'installationen' => (int)$counts['installationen']]) ?>
</p>
</div>
</div>
<div class="settings-card-body">
<form method="POST" action="/admin/software/purge"
onsubmit="return confirm('Alle erfassten Programme löschen? Eine noch eingeschaltete Quelle füllt die Liste beim nächsten Lauf erneut.');">
<input type="hidden" name="_csrf" value="<?= $this->e($this->csrf()) ?>">
<div class="form-group" style="margin-bottom:0;">
<button type="submit" class="btn btn-outline-danger">
<i class="fas fa-trash"></i> <?= $this->te('Inventar leeren') ?>
</button>
<small class="form-hint">
<?= $this->te('Gedacht für den Fall, dass die Erfassung wieder abgeschaltet wird: Das Abschalten allein lässt den bisherigen Bestand stehen. Der Vorgang steht im Audit-Log.') ?>
</small>
</div>
</form>
</div>
</section>
</div>