leyotu
This commit is contained in:
@@ -25,34 +25,44 @@ if ($currentModule) {
|
|||||||
<div class="bg-orb orb-a"></div>
|
<div class="bg-orb orb-a"></div>
|
||||||
<div class="bg-orb orb-b"></div>
|
<div class="bg-orb orb-b"></div>
|
||||||
<div class="app-shell">
|
<div class="app-shell">
|
||||||
<header class="topbar">
|
<header class="topbar card">
|
||||||
<div class="topbar-left">
|
<div class="topbar-left">
|
||||||
<img src="/assets/images/logo.png" alt="Nexus Logo" class="topbar-logo">
|
<img src="/assets/images/logo.png" alt="Nexus Logo" class="topbar-logo">
|
||||||
<?php if ($currentModule && !empty($module['title'])): ?>
|
|
||||||
<h1 class="page-title"><?= e($module['title']) ?></h1>
|
|
||||||
<span class="pill">Modul</span>
|
|
||||||
<?php else: ?>
|
|
||||||
<h1 class="page-title"><?= htmlspecialchars(t('common.title'), ENT_QUOTES) ?></h1>
|
|
||||||
<span class="pill">Dashboard</span>
|
|
||||||
<?php endif; ?>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="topbar-actions">
|
<div class="topbar-actions">
|
||||||
|
<a class="nav-link" href="/">Dashboard</a>
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="nav-link dropdown-toggle" type="button">Module ▾</button>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
<?php foreach (modules()->all() as $m): ?>
|
||||||
|
<?php if (!empty($m['enabled'])): ?>
|
||||||
|
<a class="dropdown-item" href="/module/<?= e($m['name']) ?>"><?= e($m['title']) ?></a>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<div class="dropdown-divider"></div>
|
||||||
|
<a class="dropdown-item" href="/modules">Module Übersicht</a>
|
||||||
|
<a class="dropdown-item" href="/modules/install">Modul installieren/aktivieren</a>
|
||||||
|
<a class="dropdown-item" href="/settings">Settings</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="dropdown">
|
||||||
<?php if (auth_enabled() && auth_user()): ?>
|
<?php if (auth_enabled() && auth_user()): ?>
|
||||||
<span class="pill"><?= e(auth_user()['email'] ?? '') ?></span>
|
<button class="avatar-btn" type="button">
|
||||||
<a class="nav-link" href="/auth/logout">Logout</a>
|
<span class="avatar"><?= e(auth_initials()) ?></span>
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu dropdown-menu-right">
|
||||||
|
<div class="dropdown-header"><?= e(auth_display_name()) ?></div>
|
||||||
|
<a class="dropdown-item" href="/settings">Settings</a>
|
||||||
|
<a class="dropdown-item" href="/auth/logout">Logout</a>
|
||||||
|
</div>
|
||||||
<?php elseif (auth_enabled()): ?>
|
<?php elseif (auth_enabled()): ?>
|
||||||
<a class="nav-link" href="/auth/login">Login</a>
|
<a class="nav-link" href="/auth/login">Login</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<a class="nav-link" href="/users">User</a>
|
</div>
|
||||||
<a class="nav-link" href="/modules">Module</a>
|
|
||||||
<a class="nav-link" href="/modules/install">Modul installieren/aktivieren</a>
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<aside class="app-sidebar">
|
<aside class="app-sidebar">
|
||||||
<div class="brand-text">
|
<div class="brand-text"></div>
|
||||||
<div class="brand-title"><?= htmlspecialchars(t('common.title'), ENT_QUOTES) ?></div>
|
|
||||||
<div class="brand-sub">Nexus Control Panel</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button class="sidebar-toggle" data-sidebar-toggle aria-label="Menü ein-/ausklappen">
|
<button class="sidebar-toggle" data-sidebar-toggle aria-label="Menü ein-/ausklappen">
|
||||||
<span class="sidebar-icon">☰</span>
|
<span class="sidebar-icon">☰</span>
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ body {
|
|||||||
.topbar-logo {
|
.topbar-logo {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
width: auto;
|
width: auto;
|
||||||
filter: drop-shadow(0 8px 18px rgba(0,0,0,0.12));
|
filter: drop-shadow(0 6px 12px rgba(0,0,0,0.12));
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
.brand img {
|
.brand img {
|
||||||
@@ -207,7 +207,7 @@ body {
|
|||||||
grid-column: 1 / -1;
|
grid-column: 1 / -1;
|
||||||
background: var(--panel);
|
background: var(--panel);
|
||||||
border: 1px solid var(--line);
|
border: 1px solid var(--line);
|
||||||
border-radius: 16px;
|
border-radius: 18px;
|
||||||
padding: 10px 18px;
|
padding: 10px 18px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -216,18 +216,6 @@ body {
|
|||||||
box-shadow: var(--shadow);
|
box-shadow: var(--shadow);
|
||||||
min-height: 64px;
|
min-height: 64px;
|
||||||
}
|
}
|
||||||
.topbar::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
inset: -1px;
|
|
||||||
border-radius: 16px;
|
|
||||||
padding: 1px;
|
|
||||||
background: linear-gradient(135deg, rgba(255, 107, 74, 0.35), rgba(15, 180, 164, 0.25), rgba(255, 107, 74, 0.2));
|
|
||||||
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
|
||||||
-webkit-mask-composite: xor;
|
|
||||||
mask-composite: exclude;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.topbar { position: relative; }
|
.topbar { position: relative; }
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -239,6 +227,70 @@ body {
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dropdown {
|
||||||
|
position: relative;
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
.dropdown-toggle {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
.dropdown-menu {
|
||||||
|
position: absolute;
|
||||||
|
top: 110%;
|
||||||
|
right: 0;
|
||||||
|
min-width: 220px;
|
||||||
|
background: var(--panel);
|
||||||
|
border: 1px solid var(--line);
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
padding: 8px;
|
||||||
|
display: none;
|
||||||
|
z-index: 30;
|
||||||
|
}
|
||||||
|
.dropdown-menu-right { right: 0; left: auto; }
|
||||||
|
.dropdown:hover .dropdown-menu,
|
||||||
|
.dropdown:focus-within .dropdown-menu {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.dropdown-item {
|
||||||
|
display: block;
|
||||||
|
padding: 8px 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
color: var(--text);
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.dropdown-item:hover {
|
||||||
|
background: var(--panel-2);
|
||||||
|
}
|
||||||
|
.dropdown-divider {
|
||||||
|
height: 1px;
|
||||||
|
background: var(--line);
|
||||||
|
margin: 6px 4px;
|
||||||
|
}
|
||||||
|
.dropdown-header {
|
||||||
|
padding: 6px 10px;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
.avatar-btn {
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.avatar {
|
||||||
|
width: 34px;
|
||||||
|
height: 34px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: var(--accent);
|
||||||
|
color: #ffffff;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
.module-subnav {
|
.module-subnav {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
|
|||||||
@@ -74,6 +74,40 @@ function auth_user(): ?array
|
|||||||
return $_SESSION['auth_user'] ?? null;
|
return $_SESSION['auth_user'] ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function auth_display_name(): string
|
||||||
|
{
|
||||||
|
$user = auth_user();
|
||||||
|
if (!$user) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
$name = trim((string)($user['name'] ?? ''));
|
||||||
|
if ($name !== '') {
|
||||||
|
return $name;
|
||||||
|
}
|
||||||
|
$email = trim((string)($user['email'] ?? ''));
|
||||||
|
return $email;
|
||||||
|
}
|
||||||
|
|
||||||
|
function auth_initials(): string
|
||||||
|
{
|
||||||
|
$name = auth_display_name();
|
||||||
|
if ($name === '') {
|
||||||
|
return 'U';
|
||||||
|
}
|
||||||
|
$parts = preg_split('/\s+/', $name) ?: [];
|
||||||
|
$letters = '';
|
||||||
|
foreach ($parts as $p) {
|
||||||
|
$p = trim($p);
|
||||||
|
if ($p !== '') {
|
||||||
|
$letters .= mb_strtoupper(mb_substr($p, 0, 1));
|
||||||
|
}
|
||||||
|
if (mb_strlen($letters) >= 2) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $letters !== '' ? $letters : 'U';
|
||||||
|
}
|
||||||
|
|
||||||
function auth_groups(): array
|
function auth_groups(): array
|
||||||
{
|
{
|
||||||
$user = auth_user();
|
$user = auth_user();
|
||||||
|
|||||||
Reference in New Issue
Block a user