header.inc.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <!DOCTYPE html>
  2. <html lang="<?= $_SESSION['mailcow_locale'] ?>">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
  7. <meta name="theme-color" content="#F5D76E"/>
  8. <meta http-equiv="Referrer-Policy" content="same-origin">
  9. <title><?=$UI_TEXTS['title_name'];?></title>
  10. <?php
  11. if (preg_match("/mailbox/i", $_SERVER['REQUEST_URI'])) {
  12. $css_minifier->add('/web/css/site/mailbox.css');
  13. }
  14. if (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) {
  15. $css_minifier->add('/web/css/site/admin.css');
  16. }
  17. if (preg_match("/user/i", $_SERVER['REQUEST_URI'])) {
  18. $css_minifier->add('/web/css/site/user.css');
  19. }
  20. if (preg_match("/edit/i", $_SERVER['REQUEST_URI'])) {
  21. $css_minifier->add('/web/css/site/edit.css');
  22. }
  23. if (preg_match("/(quarantine|qhandler)/i", $_SERVER['REQUEST_URI'])) {
  24. $css_minifier->add('/web/css/site/quarantine.css');
  25. }
  26. if (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) {
  27. $css_minifier->add('/web/css/site/debug.css');
  28. }
  29. if ($_SERVER['REQUEST_URI'] == '/') {
  30. $css_minifier->add('/web/css/site/index.css');
  31. }
  32. $hash = $css_minifier->getDataHash();
  33. $CSSPath = '/tmp/' . $hash . '.css';
  34. if(!file_exists($CSSPath)) {
  35. $css_minifier->minify($CSSPath);
  36. cleanupCSS($hash);
  37. }
  38. ?>
  39. <link rel="stylesheet" href="/cache/<?=basename($CSSPath)?>">
  40. <?php if (strtolower(trim($DEFAULT_THEME)) != "lumen") { ?>
  41. <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/<?= strtolower(trim($DEFAULT_THEME)); ?>/bootstrap.min.css">
  42. <?php } ?>
  43. <link rel="shortcut icon" href="/favicon.png" type="image/png">
  44. <link rel="icon" href="/favicon.png" type="image/png">
  45. </head>
  46. <body id="top">
  47. <div class="overlay"></div>
  48. <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
  49. <div class="container-fluid">
  50. <div class="navbar-header">
  51. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
  52. <span class="icon-bar"></span>
  53. <span class="icon-bar"></span>
  54. <span class="icon-bar"></span>
  55. </button>
  56. <a class="navbar-brand" href="/"><img alt="mailcow-logo" src="<?=($main_logo = customize('get', 'main_logo')) ? $main_logo : '/img/cow_mailcow.svg';?>"></a>
  57. </div>
  58. <div id="navbar" class="navbar-collapse collapse">
  59. <ul class="nav navbar-nav navbar-right">
  60. <?php
  61. if (isset($_SESSION['mailcow_locale'])) {
  62. ?>
  63. <li class="dropdown<?=(isset($_SESSION['mailcow_locale']) && count($AVAILABLE_LANGUAGES) === 1) ? ' lang-link-disabled"' : '' ?>">
  64. <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="lang-sm lang-lbl" lang="<?= $_SESSION['mailcow_locale']; ?>"></span><span class="caret"></span></a>
  65. <ul class="dropdown-menu" role="menu">
  66. <?php
  67. foreach ($AVAILABLE_LANGUAGES as $language) {
  68. ?>
  69. <li<?= ($_SESSION['mailcow_locale'] == $language) ? ' class="active"' : ''; ?>><a href="?<?= http_build_query(array_merge($_GET, array('lang' => $language))); ?>"><span class="lang-xs lang-lbl-full" lang="<?= $language; ?>"></span></a></li>
  70. <?php
  71. }
  72. ?>
  73. </ul>
  74. </li>
  75. <?php
  76. }
  77. if (isset($_SESSION['mailcow_cc_role'])) {
  78. ?>
  79. <li class="dropdown">
  80. <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><?= $lang['header']['mailcow_settings']; ?> <span class="caret"></span></a>
  81. <ul class="dropdown-menu" role="menu">
  82. <?php
  83. if (isset($_SESSION['mailcow_cc_role'])) {
  84. if ($_SESSION['mailcow_cc_role'] == 'admin') {
  85. ?>
  86. <li<?= (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/admin"><?= $lang['header']['administration']; ?></a></li>
  87. <li<?= (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/debug"><?= $lang['header']['debug']; ?></a></li>
  88. <?php
  89. }
  90. if ($_SESSION['mailcow_cc_role'] == 'admin' || $_SESSION['mailcow_cc_role'] == 'domainadmin') {
  91. ?>
  92. <li<?= (preg_match("/mailbox/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/mailbox"><?= $lang['header']['mailboxes']; ?></a></li>
  93. <?php } if ($_SESSION['mailcow_cc_role'] != 'admin') { ?>
  94. <li<?= (preg_match("/user/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/user"><?= $lang['header']['user_settings']; ?></a></li>
  95. <?php
  96. }
  97. }
  98. ?>
  99. </ul>
  100. </li>
  101. <?php if (isset($_SESSION['mailcow_cc_role'])) { ?>
  102. <li<?= (preg_match("/quarantine/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/quarantine"><i class="bi bi-inbox-fill"></i> <?= $lang['header']['quarantine']; ?></a></li>
  103. <?php } if ($_SESSION['mailcow_cc_role'] == 'admin' && getenv('SKIP_SOGO') != "y") { ?>
  104. <li><a href data-toggle="modal" data-container="sogo-mailcow" data-target="#RestartContainer"><i class="bi bi-arrow-repeat"></i> <?= $lang['header']['restart_sogo']; ?></a></li>
  105. <?php } ?>
  106. <li class="dropdown">
  107. <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="bi bi-link-45deg"></i> <?= $lang['header']['apps']; ?> <span class="caret"></span></a>
  108. <ul class="dropdown-menu" role="menu">
  109. <?php foreach ($MAILCOW_APPS as $app) {
  110. if (getenv('SKIP_SOGO') == "y" && preg_match('/^\/SOGo/i', $app['link'])) { continue; }
  111. ?>
  112. <li title="<?= htmlspecialchars($app['description']); ?>"><a href="<?= htmlspecialchars($app['link']); ?>"><?= htmlspecialchars($app['name']); ?></a></li>
  113. <?php
  114. }
  115. $app_links = customize('get', 'app_links');
  116. if ($app_links) {
  117. foreach ($app_links as $row) {
  118. foreach ($row as $key => $val) {
  119. ?>
  120. <li><a href="<?= htmlspecialchars($val); ?>"><?= htmlspecialchars($key); ?></a></li>
  121. <?php
  122. }
  123. }
  124. }
  125. ?>
  126. </ul>
  127. </li>
  128. <?php } if (!isset($_SESSION['dual-login']) && isset($_SESSION['mailcow_cc_username'])) { ?>
  129. <li class="logged-in-as"><a href="#" onclick="logout.submit()"><b class="username-lia"><?= htmlspecialchars($_SESSION['mailcow_cc_username']); ?></b> <i class="bi bi-x-circle"></i></a></li>
  130. <?php } elseif (isset($_SESSION['dual-login'])) { ?>
  131. <li class="logged-in-as"><a href="#" onclick="logout.submit()"><b class="username-lia"><?= htmlspecialchars($_SESSION['mailcow_cc_username']); ?> <span class="text-info">(<?= htmlspecialchars($_SESSION['dual-login']['username']); ?>)</span> </b><i class="bi bi-x-circle"></i></a></li>
  132. <?php } if (!preg_match('/y|yes/i', getenv('MASTER'))) { ?>
  133. <li class="text-warning slave-info">[ slave ]</li>
  134. <?php } ?>
  135. </ul>
  136. </div><!--/.nav-collapse -->
  137. </div><!--/.container-fluid -->
  138. </nav>
  139. <form action="/" method="post" id="logout"><input type="hidden" name="logout"></form>
  140. <?php if (!empty($UI_TEXTS['ui_announcement_text']) &&
  141. in_array($UI_TEXTS['ui_announcement_type'], array('info', 'warning', 'danger')) &&
  142. $UI_TEXTS['ui_announcement_active'] == 1 &&
  143. parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) != '/') { ?>
  144. <div class="container">
  145. <div class="alert alert-<?=$UI_TEXTS['ui_announcement_type'];?>"><?=$UI_TEXTS['ui_announcement_text'];?></div>
  146. </div>
  147. <?php } ?>