<!DOCTYPE html>
<html lang="<?= $_SESSION['mailcow_locale'] ?>">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0">
  <meta name="theme-color" content="#F5D76E"/>
  <meta http-equiv="Referrer-Policy" content="same-origin">
  <title><?=$UI_TEXTS['title_name'];?></title>
  <?php
    if (preg_match("/mailbox/i", $_SERVER['REQUEST_URI'])) {
      $css_minifier->add('/web/css/site/mailbox.css');
    }
    if (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) {
      $css_minifier->add('/web/css/site/admin.css');
    }
    if (preg_match("/user/i", $_SERVER['REQUEST_URI'])) {
      $css_minifier->add('/web/css/site/user.css');
    }
    if (preg_match("/edit/i", $_SERVER['REQUEST_URI'])) {
      $css_minifier->add('/web/css/site/edit.css');
    }
    if (preg_match("/(quarantine|qhandler)/i", $_SERVER['REQUEST_URI'])) {
      $css_minifier->add('/web/css/site/quarantine.css');
    }
    if (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) {
      $css_minifier->add('/web/css/site/debug.css');
    }
    if ($_SERVER['REQUEST_URI'] == '/') {
      $css_minifier->add('/web/css/site/index.css');
    }

  $hash = $css_minifier->getDataHash();
  $CSSPath = '/tmp/' . $hash . '.css';
  if(!file_exists($CSSPath)) {
    $css_minifier->minify($CSSPath);
    cleanupCSS($hash);
  }
  ?>
  <link rel="stylesheet" href="/cache/<?=basename($CSSPath)?>">
  <?php if (strtolower(trim($DEFAULT_THEME)) != "lumen") { ?>
  <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/<?= strtolower(trim($DEFAULT_THEME)); ?>/bootstrap.min.css">
  <?php } ?>
  <link rel="shortcut icon" href="/favicon.png" type="image/png">
  <link rel="icon" href="/favicon.png" type="image/png">
</head>
<body id="top">
  <div class="overlay"></div>
  <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="/"><img alt="mailcow-logo" src="<?=($main_logo = customize('get', 'main_logo')) ? $main_logo : '/img/cow_mailcow.svg';?>"></a>
      </div>
      <div id="navbar" class="navbar-collapse collapse">
        <ul class="nav navbar-nav navbar-right">
          <?php
          if (isset($_SESSION['mailcow_locale'])) {
          ?>
          <li class="dropdown<?=(isset($_SESSION['mailcow_locale']) && count($AVAILABLE_LANGUAGES) === 1) ? ' lang-link-disabled"' : '' ?>">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><span class="flag-icon flag-icon-<?= $_SESSION['mailcow_locale']; ?>"></span><span class="caret"></span></a>
            <ul class="dropdown-menu" role="menu">
              <?php
              foreach ($AVAILABLE_LANGUAGES as $c => $v) {
              ?>
              <li<?= ($_SESSION['mailcow_locale'] == $c) ? ' class="active"' : ''; ?>><a href="?<?= http_build_query(array_merge($_GET, array('lang' => $c))); ?>"><span class="flag-icon flag-icon-<?=$c;?>"></span> <?=$v;?></a></li>
              <?php
              }
              ?>
            </ul>
          </li>
          <?php
          }
          if (isset($_SESSION['mailcow_cc_role'])) {
          ?>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><?= $lang['header']['mailcow_settings']; ?> <span class="caret"></span></a>
            <ul class="dropdown-menu" role="menu">
              <?php
              if (isset($_SESSION['mailcow_cc_role'])) {
                if ($_SESSION['mailcow_cc_role'] == 'admin') {
                ?>
                  <li<?= (preg_match("/admin/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/admin"><?= $lang['header']['administration']; ?></a></li>
                  <li<?= (preg_match("/debug/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/debug"><?= $lang['header']['debug']; ?></a></li>
                <?php
                }
                if ($_SESSION['mailcow_cc_role'] == 'admin' || $_SESSION['mailcow_cc_role'] == 'domainadmin') {
                ?>
                  <li<?= (preg_match("/mailbox/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/mailbox"><?= $lang['header']['mailboxes']; ?></a></li>
                <?php } if ($_SESSION['mailcow_cc_role'] != 'admin') { ?>
                  <li<?= (preg_match("/user/i", $_SERVER['REQUEST_URI'])) ? ' class="active"' : ''; ?>><a href="/user"><?= $lang['header']['user_settings']; ?></a></li>
                <?php
                }
              }
              ?>
            </ul>
          </li>
          <?php if (isset($_SESSION['mailcow_cc_role'])) { ?>
          <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>
          <?php } if ($_SESSION['mailcow_cc_role'] == 'admin' && getenv('SKIP_SOGO') != "y") { ?>
          <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>
          <?php } ?>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="bi bi-link-45deg"></i> <?=$UI_TEXTS['apps_name'];?> <span class="caret"></span></a>
            <ul class="dropdown-menu" role="menu">
            <?php foreach ($MAILCOW_APPS as $app) {
              if (getenv('SKIP_SOGO') == "y" && preg_match('/^\/SOGo/i', $app['link'])) { continue; }
            ?>
              <li title="<?=(isset($app['description'])) ? htmlspecialchars($app['description']) : '';?>"><a href="<?=(isset($app['link'])) ? htmlspecialchars($app['link']) : '';?>"><?=(isset($app['name'])) ? htmlspecialchars($app['name']) : '';?></a></li>
            <?php
            }
            $app_links = customize('get', 'app_links');
            if ($app_links) {
              foreach ($app_links as $row) {
                foreach ($row as $key => $val) {
              ?>
              <li><a href="<?= htmlspecialchars($val); ?>"><?= htmlspecialchars($key); ?></a></li>
              <?php
                }
              }
            }
            ?>
            </ul>
          </li>
          <?php } if (!isset($_SESSION['dual-login']) && isset($_SESSION['mailcow_cc_username'])) { ?>
            <li class="logged-in-as"><a href="#" onclick="logout.submit()"><b class="username-lia"><?= htmlspecialchars($_SESSION['mailcow_cc_username']); ?></b> <i class="bi bi-power"></i></a></li>
          <?php } elseif (isset($_SESSION['dual-login'])) { ?>
            <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-power"></i></a></li>
          <?php } if (!preg_match('/y|yes/i', getenv('MASTER'))) { ?>
            <li class="text-warning slave-info">[ slave ]</li>
          <?php } ?>
        </ul>
      </div><!--/.nav-collapse -->
    </div><!--/.container-fluid -->
  </nav>
  <form action="/" method="post" id="logout"><input type="hidden" name="logout"></form>
  <?php if (!empty($UI_TEXTS['ui_announcement_text']) &&
    in_array($UI_TEXTS['ui_announcement_type'], array('info', 'warning', 'danger')) &&
    $UI_TEXTS['ui_announcement_active'] == 1 &&
    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) != '/') { ?>
  <div class="container">
    <div class="alert alert-<?=$UI_TEXTS['ui_announcement_type'];?>"><?=$UI_TEXTS['ui_announcement_text'];?></div>
  </div>
  <?php } ?>
