Quelltext des aktuellen Standes
<?php $this->layout('layouts/portal', [
'page_title' => 'Start',
'ssp_active' => 'start',
]);
$du = ($portal_address ?? 'du') !== 'sie';
$greetName = trim((string)($person['first_name'] ?? '')) !== ''
? (string)$person['first_name']
: (string)$person['display_name'];
?>
<div class="ssp-hello">
<h1><?= $this->t('Hallo') ?> <?= $this->e($du ? $greetName : $person['display_name']) ?></h1>
<p><?= trim((string)($portal_welcome ?? '')) !== ''
? nl2br($this->e($portal_welcome))
: ($du
? $this->te('Willkommen im Self-Service-Portal. Hier kannst du Anliegen an die IT richten und deren Stand verfolgen.')
: $this->te('Willkommen im Self-Service-Portal. Hier können Sie Anliegen an die IT richten und deren Stand verfolgen.')) ?></p>
</div>
<?php
// IT-Ankündigungen (allgemeine Betreiber-Hinweise) – oberhalb der übrigen Hinweise.
$annLevelIcon = ['info' => 'fa-bullhorn', 'success' => 'fa-check-circle', 'warning' => 'fa-exclamation-triangle'];
foreach (($announcements ?? []) as $ann):
$lvl = $ann['level'] ?? 'info';
?>
<div class="ssp-announce ssp-announce--<?= $this->e($lvl) ?>">
<i class="fas <?= $this->e($annLevelIcon[$lvl] ?? 'fa-bullhorn') ?>" aria-hidden="true"></i>
<div class="ssp-announce-body">
<strong><?= $this->e($ann['title']) ?></strong>
<?php if (!empty($ann['body'])): ?><p><?= nl2br($this->e($ann['body'])) ?></p><?php endif; ?>
</div>
</div>
<?php endforeach; ?>
<?php if (!empty($confirm_due_count)): ?>
<div class="ssp-notice ssp-notice--maint">
<i class="fas fa-clipboard-check" aria-hidden="true"></i>
<div class="ssp-notice-body">
<strong><?= (int)$confirm_due_count === 1
? 'Ein Gerät wartet auf ' . ($du ? $this->te('deine') : $this->te('Ihre')) . ' Bestätigung'
: (int)$confirm_due_count . ' Geräte warten auf ' . ($du ? $this->te('deine') : $this->te('Ihre')) . ' Bestätigung' ?></strong>
<p><?= $du
? $this->te('Bitte bestätige kurz, ob die Geräte noch bei dir sind.')
: $this->te('Bitte bestätigen Sie kurz, ob die Geräte noch bei Ihnen sind.') ?>
<a href="/portal/devices"><?= $this->te('Zu meinen Geräten') ?></a></p>
</div>
</div>
<?php endif; ?>
<?php
// Startseiten-Statuslage: beeinträchtigte/ausgefallene Dienste und laufende
// Störungen prominent, sobald der Status-Bereich aktiv ist.
$hl = $status_highlight ?? null;
$hlImpaired = $hl['impaired'] ?? [];
$hlIncidents = (int)($hl['incident_count'] ?? 0);
if ($hl !== null && (!empty($hlImpaired) || $hlIncidents > 0)):
$svcLabelsHl = [
'operational' => 'Betriebsbereit', 'degraded' => 'Beeinträchtigt',
'partial_outage' => 'Teilausfall', 'major_outage' => 'Ausfall',
];
$svcPillHl = [
'operational' => 'status-pill--success', 'degraded' => 'status-pill--warning',
'partial_outage' => 'status-pill--warning', 'major_outage' => 'status-pill--danger',
];
$svcDotHl = [
'operational' => 'status-dot--success', 'degraded' => 'status-dot--warning',
'partial_outage' => 'status-dot--warning', 'major_outage' => 'status-dot--danger',
];
// Höchster Schweregrad (Dienste + laufende Störung) bestimmt die Farbe.
$rankHl = ['operational' => 0, 'degraded' => 1, 'partial_outage' => 2, 'major_outage' => 3];
$worst = $hlIncidents > 0 ? 1 : 0;
foreach ($hlImpaired as $s) { $worst = max($worst, $rankHl[$s['status']] ?? 0); }
$cardMod = $worst >= 2 ? 'ssp-statuscard--danger' : 'ssp-statuscard--warn';
?>
<div class="ssp-statuscard <?= $cardMod ?>">
<div class="ssp-statuscard-head">
<span class="ssp-statuscard-icon"><i class="fas fa-exclamation-triangle" aria-hidden="true"></i></span>
<div class="ssp-statuscard-headtext">
<strong><?= $this->te('Aktuelle Einschränkungen') ?></strong>
<?php if ($hlIncidents > 0): ?>
<span class="ssp-statuscard-sub"><?= $hlIncidents === 1 ? 'Eine laufende Störung' : $hlIncidents . ' laufende Störungen' ?></span>
<?php endif; ?>
</div>
<a class="ssp-statuscard-link" href="/portal/status"><?= $this->te('Systemstatus') ?> <i class="fas fa-arrow-right" aria-hidden="true"></i></a>
</div>
<?php if (!empty($hlImpaired)): ?>
<ul class="ssp-statuscard-list">
<?php foreach ($hlImpaired as $s): $st = (string)($s['status'] ?? ''); ?>
<li>
<span class="status-dot <?= $this->e($svcDotHl[$st] ?? '') ?>" aria-hidden="true"></span>
<span class="ssp-statuscard-name"><?= $this->e($s['name']) ?></span>
<span class="status-pill <?= $this->e($svcPillHl[$st] ?? 'status-pill--neutral') ?>"><?= $this->e($svcLabelsHl[$st] ?? $st) ?></span>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<?php endif; ?>
<div class="ssp-grid">
<?php if (!empty($tickets_on)): ?>
<a class="ssp-card ssp-card-link" href="/portal/tickets">
<h2><span class="ssp-card-icon"><i class="fas fa-ticket-alt" aria-hidden="true"></i></span> <?= $this->te('Meine Tickets') ?><?php if (!empty($open_tickets)): ?> <span class="ssp-count"><?= (int)$open_tickets ?></span><?php endif; ?></h2>
<p><?= $du
? $this->te('Den Bearbeitungsstand deiner Tickets einsehen und direkt antworten.')
: $this->te('Den Bearbeitungsstand Ihrer Tickets einsehen und direkt antworten.') ?></p>
</a>
<a class="ssp-card ssp-card-link" href="/portal/tickets/new">
<h2><span class="ssp-card-icon"><i class="fas fa-plus" aria-hidden="true"></i></span> <?= $this->te('Neues Ticket') ?></h2>
<p><?= $du
? $this->te('Ein Anliegen oder Problem an die IT melden – mit Screenshots oder Dateien.')
: $this->te('Ein Anliegen oder Problem an die IT melden – mit Screenshots oder Dateien.') ?></p>
</a>
<?php endif; ?>
<?php if (!empty($workflows_on)): ?>
<a class="ssp-card ssp-card-link" href="/portal/requests">
<h2><span class="ssp-card-icon"><i class="fas fa-file-signature" aria-hidden="true"></i></span> <?= $this->te('Meine Anträge') ?></h2>
<p><?= $this->te('Anträge starten (z. B. Zugänge, Hardware) und den Genehmigungsstand verfolgen.') ?></p>
</a>
<?php endif; ?>
<?php if (!empty($approvals_on)): ?>
<a class="ssp-card ssp-card-link" href="/portal/approvals">
<h2><span class="ssp-card-icon"><i class="fas fa-clipboard-check" aria-hidden="true"></i></span> <?= $this->te('Meine Genehmigungen') ?><?php if (!empty($approvals_pending)): ?> <span class="ssp-count"><?= (int)$approvals_pending ?></span><?php endif; ?></h2>
<p><?= $du
? $this->te('Anträge prüfen, die auf deine Entscheidung warten.')
: $this->te('Anträge prüfen, die auf Ihre Entscheidung warten.') ?></p>
</a>
<?php endif; ?>
<?php if (!empty($knowledge_on)): ?>
<a class="ssp-card ssp-card-link" href="/portal/hilfe">
<h2><span class="ssp-card-icon"><i class="fas fa-book" aria-hidden="true"></i></span> <?= $this->te('Hilfe & Anleitungen') ?></h2>
<p><?= $du
? $this->te('Anleitungen zu häufigen Fragen – oft schneller als ein Ticket.')
: $this->te('Anleitungen zu häufigen Fragen – oft schneller als ein Ticket.') ?></p>
</a>
<?php endif; ?>
<?php if (!empty($devices_on)): ?>
<a class="ssp-card ssp-card-link" href="/portal/devices">
<h2><span class="ssp-card-icon"><i class="fas fa-laptop" aria-hidden="true"></i></span> <?= $this->te('Meine Geräte') ?></h2>
<p><?= $du
? $this->te('Dir zugewiesene Geräte einsehen und mit einem Klick ein Problem dazu melden.')
: $this->te('Ihnen zugewiesene Geräte einsehen und mit einem Klick ein Problem dazu melden.') ?></p>
</a>
<?php endif; ?>
<?php if (!empty($loans_on)): ?>
<a class="ssp-card ssp-card-link" href="/portal/leihgeraete">
<h2><span class="ssp-card-icon"><i class="fas fa-hand-holding" aria-hidden="true"></i></span> <?= $this->te('Leihgeräte') ?></h2>
<p><?= $du
? $this->te('Notebook, Beamer & Co. für einen Zeitraum reservieren oder anfragen.')
: $this->te('Notebook, Beamer & Co. für einen Zeitraum reservieren oder anfragen.') ?></p>
</a>
<?php endif; ?>
<?php if (!empty($status_on)): ?>
<a class="ssp-card ssp-card-link" href="/portal/status">
<h2><span class="ssp-card-icon"><i class="fas fa-heartbeat" aria-hidden="true"></i></span> <?= $this->te('Systemstatus & Wartungsarbeiten') ?></h2>
<p><?= $du
? $this->te('Aktueller Zustand der IT-Dienste sowie geplante Wartungen auf einen Blick.')
: $this->te('Aktueller Zustand der IT-Dienste sowie geplante Wartungen auf einen Blick.') ?></p>
</a>
<?php endif; ?>
<?php foreach (($tile_links ?? []) as $lnk): ?>
<a class="ssp-card ssp-card-link" href="<?= $this->e($lnk['url']) ?>"
<?= (int)$lnk['new_tab'] === 1 ? 'target="_blank" rel="noopener noreferrer"' : '' ?>>
<h2><span class="ssp-card-icon"><i class="fas <?= $this->e($lnk['icon']) ?>" aria-hidden="true"></i></span> <?= $this->e($lnk['title']) ?></h2>
<?php if (!empty($lnk['description'])): ?><p><?= $this->e($lnk['description']) ?></p><?php endif; ?>
</a>
<?php endforeach; ?>
</div>