fix: sync CSS classes with refactored layout, restore missing sidebar items, add asset versioning, fix routes and auth
This commit is contained in:
@@ -187,4 +187,4 @@ function selected(string $value, string $compare): string {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/audit-log.js"></script>
|
||||
<script src="/assets/js/audit-log.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -139,4 +139,4 @@ $data = $notifications['data'] ?? [];
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/admin-notifications.js"></script>
|
||||
<script src="/assets/js/admin-notifications.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -102,4 +102,4 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/admin-security.js"></script>
|
||||
<script src="/assets/js/admin-security.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -121,4 +121,4 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/admin-users.js"></script>
|
||||
<script src="/assets/js/admin-users.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -165,5 +165,5 @@ $aggregatedMetrics = $aggregatedMetrics ?? [];
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.7/dist/chart.umd.min.js"></script>
|
||||
<script>const aggregatedData = <?= json_encode($aggregatedMetrics, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES) ?>;</script>
|
||||
<script src="/assets/js/dashboard-chart.js"></script>
|
||||
<script src="/assets/js/dashboard-chart.js?v=<?= asset_version() ?>"></script>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?= htmlspecialchars($title ?? 'ServerManager') ?></title>
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/img/server.svg">
|
||||
<link rel="stylesheet" href="/assets/css/style.css">
|
||||
<link rel="stylesheet" href="/assets/css/style.css?v=<?= asset_version() ?>">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
||||
</head>
|
||||
<body class="auth-page">
|
||||
@@ -13,6 +13,6 @@
|
||||
<?= $content ?? '' ?>
|
||||
</div>
|
||||
<div id="toastContainer" class="toast-container"></div>
|
||||
<script src="/assets/js/app.js"></script>
|
||||
<script src="/assets/js/app.js?v=<?= asset_version() ?>"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
$user = $user ?? null;
|
||||
$notifications = $notifications ?? [];
|
||||
$unreadCount = $unreadCount ?? 0;
|
||||
$teamId = $teamId ?? null;
|
||||
@@ -7,6 +6,10 @@ $title = $title ?? 'ServerManager';
|
||||
$content = $content ?? '';
|
||||
|
||||
$currentRoute = $_SERVER['REQUEST_URI'] ?? '/';
|
||||
|
||||
if (!isset($user) || $user === null) {
|
||||
$user = auth();
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
@@ -16,7 +19,7 @@ $currentRoute = $_SERVER['REQUEST_URI'] ?? '/';
|
||||
<title><?= htmlspecialchars($title) ?> — ServerManager</title>
|
||||
<meta name="api-token" content="<?= htmlspecialchars($user['api_token'] ?? '') ?>">
|
||||
<meta name="csrf-token" content="<?= $this->csrfToken() ?>">
|
||||
<link rel="stylesheet" href="/assets/css/style.css">
|
||||
<link rel="stylesheet" href="/assets/css/style.css?v=<?= asset_version() ?>">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/img/server.svg">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
@@ -41,6 +44,12 @@ $currentRoute = $_SERVER['REQUEST_URI'] ?? '/';
|
||||
<span>Dashboard</span>
|
||||
</a>
|
||||
|
||||
<!-- Notifications -->
|
||||
<a href="/notifications" class="nav-item <?= str_starts_with($currentRoute, '/notifications') ? 'active' : '' ?>">
|
||||
<i class="fas fa-bell"></i>
|
||||
<span>Notifications</span>
|
||||
</a>
|
||||
|
||||
<!-- Servers -->
|
||||
<div class="nav-item-accordion <?= str_starts_with($currentRoute, '/servers') || str_starts_with($currentRoute, '/terminal') ? 'expanded' : '' ?>">
|
||||
<a href="#" class="nav-item nav-item-toggle <?= str_starts_with($currentRoute, '/servers') ? 'active' : '' ?>" onclick="toggleServerList(event)">
|
||||
@@ -53,41 +62,80 @@ $currentRoute = $_SERVER['REQUEST_URI'] ?? '/';
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Teams -->
|
||||
<!-- Administration -->
|
||||
<?php if (is_super_admin()): ?>
|
||||
<hr class="nav-divider">
|
||||
<div class="nav-section">Administration</div>
|
||||
|
||||
<a href="/teams" class="nav-item <?= str_starts_with($currentRoute, '/teams') ? 'active' : '' ?>">
|
||||
<i class="fas fa-users"></i>
|
||||
<i class="fas fa-users-cog"></i>
|
||||
<span>Teams</span>
|
||||
</a>
|
||||
|
||||
<!-- Activity Log (admin+) -->
|
||||
<?php if (is_admin() || is_super_admin()): ?>
|
||||
<a href="/admin/activity" class="nav-item <?= str_starts_with($currentRoute, '/admin/activity') ? 'active' : '' ?>">
|
||||
<a href="/admin/users" class="nav-item <?= str_starts_with($currentRoute, '/admin/users') ? 'active' : '' ?>">
|
||||
<i class="fas fa-users"></i>
|
||||
<span>Users</span>
|
||||
</a>
|
||||
|
||||
<a href="/admin/audit" class="nav-item <?= str_starts_with($currentRoute, '/admin/audit') ? 'active' : '' ?>">
|
||||
<i class="fas fa-history"></i>
|
||||
<span>Activity Log</span>
|
||||
<span>Audit Logs</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Admin panel (admin+) -->
|
||||
<?php if (is_admin() || is_super_admin()): ?>
|
||||
<a href="/admin" class="nav-item <?= str_starts_with($currentRoute, '/admin') ? 'active' : '' ?>">
|
||||
<i class="fas fa-cog"></i>
|
||||
<span>Administration</span>
|
||||
<a href="/admin/security" class="nav-item <?= str_starts_with($currentRoute, '/admin/security') ? 'active' : '' ?>">
|
||||
<i class="fas fa-shield-alt"></i>
|
||||
<span>Security</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<a href="/admin/app-version" class="nav-item <?= str_starts_with($currentRoute, '/admin/app-version') ? 'active' : '' ?>">
|
||||
<i class="fas fa-mobile-alt"></i>
|
||||
<span>App Version</span>
|
||||
</a>
|
||||
|
||||
<a href="/admin/notifications" class="nav-item <?= str_starts_with($currentRoute, '/admin/notifications') ? 'active' : '' ?>">
|
||||
<i class="fas fa-bell"></i>
|
||||
<span>Notifications</span>
|
||||
</a>
|
||||
|
||||
<a href="/admin/policies" class="nav-item <?= str_starts_with($currentRoute, '/admin/policies') ? 'active' : '' ?>">
|
||||
<i class="fas fa-file-contract"></i>
|
||||
<span>Policies</span>
|
||||
</a>
|
||||
<?php elseif (is_admin()): ?>
|
||||
<hr class="nav-divider">
|
||||
<div class="nav-section">Administration</div>
|
||||
|
||||
<!-- Account -->
|
||||
<a href="/account" class="nav-item <?= str_starts_with($currentRoute, '/account') ? 'active' : '' ?>">
|
||||
<i class="fas fa-user"></i>
|
||||
<span>My Account</span>
|
||||
<a href="/teams" class="nav-item <?= str_starts_with($currentRoute, '/teams') ? 'active' : '' ?>">
|
||||
<i class="fas fa-users-cog"></i>
|
||||
<span>Teams</span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<a href="/logout" class="nav-item nav-item-danger">
|
||||
<i class="fas fa-sign-out-alt"></i>
|
||||
<span>Log out</span>
|
||||
<!-- Mobile -->
|
||||
<hr class="nav-divider">
|
||||
<div class="nav-section">Mobile</div>
|
||||
<a href="/sysadmin.apk" class="nav-item" download>
|
||||
<i class="fas fa-download"></i>
|
||||
<span>Download APK</span>
|
||||
</a>
|
||||
</nav>
|
||||
|
||||
<div class="sidebar-footer">
|
||||
<div class="user-info">
|
||||
<div class="user-avatar"><?= strtoupper(substr($user['username'] ?? '?', 0, 2)) ?></div>
|
||||
<div class="user-details">
|
||||
<span class="user-name"><?= htmlspecialchars($user['username'] ?? 'Guest') ?></span>
|
||||
<span class="user-role"><?= htmlspecialchars(ucfirst(str_replace('_', ' ', $user['role'] ?? 'guest'))) ?></span>
|
||||
</div>
|
||||
<div class="user-menu">
|
||||
<a href="/profile" title="Profile"><i class="fas fa-user-cog"></i></a>
|
||||
<form method="POST" action="/logout" class="logout-form" style="display:inline">
|
||||
<input type="hidden" name="_csrf_token" value="<?= $this->csrfToken() ?>">
|
||||
<button type="submit" title="Logout" style="background:none;border:none;color:inherit;cursor:pointer;padding:0;font:inherit;line-height:1"><i class="fas fa-sign-out-alt"></i></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main Content -->
|
||||
@@ -153,12 +201,12 @@ $currentRoute = $_SERVER['REQUEST_URI'] ?? '/';
|
||||
|
||||
<div id="toastContainer" class="toast-container"></div>
|
||||
|
||||
<script src="/assets/js/app.js"></script>
|
||||
<script src="/assets/js/app.js?v=<?= asset_version() ?>"></script>
|
||||
<?php if (isset($scripts)): ?>
|
||||
<?php foreach ($scripts as $script): ?>
|
||||
<script src="<?= htmlspecialchars($script) ?>"></script>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
<script src="/assets/js/main.js"></script>
|
||||
<script src="/assets/js/main.js?v=<?= asset_version() ?>"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -67,4 +67,4 @@ $data = $notifications ?? [];
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<script src="/assets/js/notifications.js"></script>
|
||||
<script src="/assets/js/notifications.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php ?><link rel="stylesheet" href="/assets/css/landing.css">
|
||||
<?php ?><link rel="stylesheet" href="/assets/css/landing.css?v=<?= asset_version() ?>">
|
||||
|
||||
<div class="landing-page">
|
||||
<section class="landing-hero">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php ?><link rel="stylesheet" href="/assets/css/legal.css">
|
||||
<?php ?><link rel="stylesheet" href="/assets/css/legal.css?v=<?= asset_version() ?>">
|
||||
<div class="legal-page">
|
||||
<div class="legal-container">
|
||||
<div class="legal-card" style="width:85%;margin:3rem auto;padding:3rem 3.5rem;background:var(--card-bg);border-radius:12px;box-shadow:0 2px 16px rgba(0,0,0,0.18)">
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?php ?><link rel="stylesheet" href="/assets/css/legal.css">
|
||||
<?php ?><link rel="stylesheet" href="/assets/css/legal.css?v=<?= asset_version() ?>">
|
||||
<div class="legal-page">
|
||||
<div class="legal-container">
|
||||
<div class="legal-card" style="width:85%;margin:3rem auto;padding:3rem 3.5rem;background:var(--card-bg);border-radius:12px;box-shadow:0 2px 16px rgba(0,0,0,0.18)">
|
||||
|
||||
@@ -171,4 +171,4 @@ document.querySelectorAll('.auth-method-tabs .tab').forEach(tab => {
|
||||
|
||||
let permIndex = <?= !empty($savedPerms) && is_array($savedPerms) ? count($savedPerms) : 0 ?>;
|
||||
</script>
|
||||
<script src="/assets/js/server-permissions.js"></script>
|
||||
<script src="/assets/js/server-permissions.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -95,5 +95,5 @@ $status = $db['status'] ?? 'inactive';
|
||||
const serverId = <?= json_encode($server['id']) ?>;
|
||||
const databases = <?= json_encode(array_column($databases, 'name')) ?>;
|
||||
</script>
|
||||
<script src="/assets/js/database-manager.js"></script>
|
||||
<script src="/assets/js/database-manager.js?v=<?= asset_version() ?>"></script>
|
||||
<?php endif; ?>
|
||||
|
||||
@@ -156,4 +156,4 @@ $hasKey = !empty($server['ssh_key']);
|
||||
<script>
|
||||
let permIndex = <?= count($permissions) ?>;
|
||||
</script>
|
||||
<script src="/assets/js/server-permissions.js"></script>
|
||||
<script src="/assets/js/server-permissions.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -141,4 +141,4 @@ $groups = $groups ?? [];
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/server-list.js"></script>
|
||||
<script src="/assets/js/server-list.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -323,5 +323,5 @@ $configValid = $nginx['config_valid'] ?? false;
|
||||
<script>
|
||||
const serverId = <?= json_encode($server['id']) ?>;
|
||||
</script>
|
||||
<script src="/assets/js/nginx-manager.js"></script>
|
||||
<script src="/assets/js/nginx-manager.js?v=<?= asset_version() ?>"></script>
|
||||
<?php endif; ?>
|
||||
|
||||
@@ -103,4 +103,4 @@ $processList = $processList ?? [];
|
||||
<script>
|
||||
const serverId = <?= $server['id'] ?>;
|
||||
</script>
|
||||
<script src="/assets/js/server-processes.js"></script>
|
||||
<script src="/assets/js/server-processes.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -51,5 +51,5 @@ const allServices = <?= json_encode($services, JSON_HEX_TAG | JSON_UNESCAPED_SLA
|
||||
const perPage = <?= $perPage ?>;
|
||||
const serverId = <?= $server['id'] ?>;
|
||||
</script>
|
||||
<script src="/assets/js/server-services.js"></script>
|
||||
<script src="/assets/js/server-services.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
|
||||
@@ -375,4 +375,4 @@ $canManage = $server_role === 'owner' || $server_role === 'manager';
|
||||
const serverId = <?= $server['id'] ?>;
|
||||
const serverName = '<?= addslashes($server['name'] ?? '') ?>';
|
||||
</script>
|
||||
<script src="/assets/js/server-show.js"></script>
|
||||
<script src="/assets/js/server-show.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -191,4 +191,4 @@ $certs = $ssl['certificates'] ?? [];
|
||||
<script>
|
||||
const serverId = <?= $server['id'] ?>;
|
||||
</script>
|
||||
<script src="/assets/js/server-ssl.js"></script>
|
||||
<script src="/assets/js/server-ssl.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -123,4 +123,4 @@ $lastLogins = $sysusers['last_logins'] ?? '';
|
||||
<script>
|
||||
const serverId = <?= $server['id'] ?>;
|
||||
</script>
|
||||
<script src="/assets/js/system-users.js"></script>
|
||||
<script src="/assets/js/system-users.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -71,4 +71,4 @@
|
||||
<input type="hidden" name="_csrf_token" value="<?= $this->csrfToken() ?>">
|
||||
</form>
|
||||
|
||||
<script src="/assets/js/team-index.js"></script>
|
||||
<script src="/assets/js/team-index.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -150,4 +150,4 @@ const teamId = <?= $team['id'] ?>;
|
||||
const teamName = '<?= htmlspecialchars(addslashes($team['name'] ?? '')) ?>';
|
||||
const teamDescription = '<?= htmlspecialchars(addslashes($team['description'] ?? '')) ?>';
|
||||
</script>
|
||||
<script src="/assets/js/team-show.js"></script>
|
||||
<script src="/assets/js/team-show.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
@@ -150,4 +150,4 @@ $commandHistory = $commandHistory ?? [];
|
||||
<script>
|
||||
const serverId = <?= $server['id'] ?>;
|
||||
</script>
|
||||
<script src="/assets/js/terminal.js"></script>
|
||||
<script src="/assets/js/terminal.js?v=<?= asset_version() ?>"></script>
|
||||
|
||||
Reference in New Issue
Block a user