OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

index.php

9 KB
<?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.&nbsp;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 &amp; 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 &amp; 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>