layout.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. declare(strict_types=1);
  3. // Shared page chrome for the admin UI. Pages set $pageTitle and optionally
  4. // $flashMessages / $flashErrors before including the header.
  5. require_once __DIR__ . "/bootstrap.php";
  6. function manageNavItems(): array
  7. {
  8. return [
  9. "index.php" => "Übersicht",
  10. "instances.php" => "Instanzen",
  11. "releases.php" => "Releases",
  12. "backups.php" => "Backups",
  13. "settings.php" => "Einstellungen",
  14. ];
  15. }
  16. function manageRenderHeader(string $pageTitle, array $messages = [], array $errors = []): void
  17. {
  18. $current = basename((string) ($_SERVER["SCRIPT_NAME"] ?? ""));
  19. ?>
  20. <!DOCTYPE html>
  21. <html lang="de">
  22. <head>
  23. <meta charset="UTF-8">
  24. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  25. <title><?php echo manageEscape($pageTitle); ?> – Manage</title>
  26. <link rel="stylesheet" href="../assets/css/style.css">
  27. </head>
  28. <body>
  29. <header class="topbar">
  30. <div class="topbar-inner">
  31. <div class="brand">
  32. <span class="brand-name">Manage</span>
  33. <span class="brand-product"><?php echo manageEscape(manageProductName()); ?></span>
  34. </div>
  35. <nav class="topnav" aria-label="Hauptnavigation">
  36. <?php foreach (manageNavItems() as $file => $label): ?>
  37. <a href="<?php echo manageEscape($file); ?>"
  38. <?php echo $file === $current ? 'aria-current="page"' : ""; ?>>
  39. <?php echo manageEscape($label); ?>
  40. </a>
  41. <?php endforeach; ?>
  42. </nav>
  43. <form method="POST" action="logout.php" class="topbar-logout">
  44. <?php echo manageCsrfField(); ?>
  45. <button type="submit" class="btn btn-quiet">Abmelden</button>
  46. </form>
  47. </div>
  48. </header>
  49. <main class="container">
  50. <h1><?php echo manageEscape($pageTitle); ?></h1>
  51. <?php foreach ($messages as $message): ?>
  52. <p class="alert alert-success"><?php echo manageEscape($message); ?></p>
  53. <?php endforeach; ?>
  54. <?php foreach ($errors as $error): ?>
  55. <p class="alert alert-error"><?php echo manageEscape($error); ?></p>
  56. <?php endforeach; ?>
  57. <?php
  58. }
  59. function manageRenderFooter(): void
  60. {
  61. ?>
  62. </main>
  63. <footer class="footer">
  64. <div class="container">
  65. <p>Manage – Update- und Backup-Server für <?php echo manageEscape(manageProductName()); ?>.</p>
  66. <p><a href="../docs/index.php">Dokumentation</a></p>
  67. </div>
  68. </footer>
  69. </body>
  70. </html>
  71. <?php
  72. }