projectbased/app/Views/layout/header.php

SHA-256: 638800d288e5195e241acc0b11147c6ed50b125d50fecb86a5f7b2f6799cfe0c
<?php
use App\Lib\Url;
use App\Lib\Build;
?>
<!doctype html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title><?= htmlspecialchars($title ?? 'Projekt-Ökonomie Demo') ?></title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <link rel="stylesheet" href="<?= \App\Lib\Url::path('/assets/app.css') . '?v=' . urlencode(Build::id()) ?>">
  <script src="<?= \App\Lib\Url::path('/assets/app.js') . '?v=' . urlencode(Build::id()) ?>"></script>
</head>
<body>
  <div class="bg-orb"></div>

  <div class="layout-shell">
    <aside class="sidebar">
      <div class="brand">Projekt-Ökonomie Demo</div>
      <div class="muted small">Demo-Plattform (PHP) · installierbar</div>

      <div class="side-group">
        <div class="side-title">Öffentlich</div>
        <a class="side-link" href="<?= Url::route('public') ?>">
          <span>Public Demo</span>
          <span class="side-pill">read-only</span>
        </a>
        <a class="side-link" href="<?= Url::route('source') ?>">
          <span>Open Source</span>
          <span class="side-pill">diff</span>
        </a>
      </div>

      <div class="side-group">
        <div class="side-title">App</div>
        <?php if (!empty($user)): ?>
          <a class="side-link" href="<?= Url::route('dashboard') ?>"><span>Dashboard</span></a>
          <a class="side-link" href="<?= Url::route('matching') ?>"><span>Matching</span></a>
          <a class="side-link" href="<?= Url::route('projects') ?>"><span>Projekte</span></a>
          <a class="side-link" href="<?= Url::route('needs') ?>"><span>Bedarf</span></a>
          <a class="side-link" href="<?= Url::route('rindex') ?>">
            <span>R-Index</span>
            <span class="side-pill"><?= (int)($user['r_index'] ?? 0) ?></span>
          </a>
          <a class="side-link" href="<?= Url::route('profile') ?>"><span>Profil</span></a>
          <a class="side-link" href="<?= Url::route('admin_audit') ?>"><span>Audit</span></a>
          <?php if (($user['is_admin'] ?? 0) == 1): ?>
            <a class="side-link" href="<?= Url::route('admin_moderation') ?>"><span>Moderation</span></a>
            <a class="side-link" href="<?= Url::route('admin_source') ?>"><span>Source Admin</span></a>
            <a class="side-link" href="<?= Url::route('admin_system') ?>"><span>System-Check</span><span class="side-pill">diag</span></a>
            <a class="side-link" href="<?= Url::route('admin_update') ?>"><span>Updater</span><span class="side-pill">ZIP</span></a>
          <?php endif; ?>
        <?php else: ?>
          <a class="side-link" href="<?= Url::route('login') ?>"><span>Login</span></a>
          <a class="side-link" href="<?= Url::route('register') ?>"><span>Registrieren</span></a>
        <?php endif; ?>
      </div>

      <div class="side-actions">
        <button class="btn btn-outline-light btn-sm w-100" type="button" onclick="POTheme.toggle()">Hell/Dunkel</button>
        <?php if (!empty($user)): ?>
          <a class="btn btn-outline-light btn-sm w-100" href="<?= Url::route('logout') ?>">Logout</a>
        <?php endif; ?>
      </div>

      <div class="muted small mt-3">
        <?= htmlspecialchars((Build::currentVersion()['version'] ?? 'v?')) ?> · System-Check + Matching
      </div>
    </aside>

    <main class="content">
      <div class="topbar d-flex justify-content-between align-items-center">
        <div class="d-flex align-items-center gap-2">
          <span class="fw-semibold"><?= htmlspecialchars($pageTitle ?? '') ?></span>
        </div>
        <div class="d-flex align-items-center gap-2">
          <?php if (!empty($user)): ?>
            <span class="muted small"><?= htmlspecialchars($user['display_name'] ?? '') ?></span>
          <?php endif; ?>
        </div>
      </div>

      <div class="content-inner container-fluid container-narrow">