panel.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. <div id="token" token="<?=$_SESSION['token']?>"></div>
  2. <header class="top-bar">
  3. <div class="l-center top-bar-inner">
  4. <!-- Logo / Usage Statistics wrapper -->
  5. <div class="top-bar-left">
  6. <!-- Logo / Home Button -->
  7. <a href="<?=htmlspecialchars($home_url)?>" class="top-bar-logo" title="<?=_('Hestia Control Panel');?>">
  8. <img src="/images/logo-header.svg" alt="<?=_('Hestia Control Panel');?>" width="54" height="29">
  9. </a>
  10. <!-- Usage Statistics -->
  11. <div class="top-bar-usage">
  12. <?php
  13. if (isset($_SESSION['look'])) {
  14. $user_icon = 'fa-binoculars';
  15. } else if ($_SESSION['userContext'] === 'admin') {
  16. $user_icon = 'fa-user-tie';
  17. } else {
  18. $user_icon = 'fa-user';
  19. }
  20. ?>
  21. <div class="top-bar-usage-inner">
  22. <span class="top-bar-usage-item">
  23. <i class="fas <?=$user_icon;?>" title="<?=_('Logged in as');?>: <?=htmlspecialchars($panel[$user]['NAME'])?>"></i>
  24. <b><?=htmlspecialchars($user)?></b>
  25. </span>
  26. <span class="top-bar-usage-item">
  27. <i class="fas fa-hard-drive" title="<?=_('Disk');?>: <?=humanize_usage_size($panel[$user]['U_DISK'])?> <?=humanize_usage_measure($panel[$user]['U_DISK'])?>"></i>
  28. <b><?=humanize_usage_size($panel[$user]['U_DISK'])?></b> <?=humanize_usage_measure($panel[$user]['U_DISK'])?>
  29. </span>
  30. <span class="top-bar-usage-item">
  31. <i class="fas fa-right-left" title="<?=_('Bandwidth');?>: <?=humanize_usage_size($panel[$user]['U_BANDWIDTH'])?> <?=humanize_usage_measure($panel[$user]['U_BANDWIDTH'])?>"></i>
  32. <b><?=humanize_usage_size($panel[$user]['U_BANDWIDTH'])?></b> <?=humanize_usage_measure($panel[$user]['U_BANDWIDTH'])?>
  33. </span>
  34. </div>
  35. </div>
  36. </div>
  37. <!-- Notifications / Menu wrapper -->
  38. <div class="top-bar-right">
  39. <!-- Notifications -->
  40. <?php if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look']) && ($user == 'admin'))) {?>
  41. <!-- Do not show notifications panel when impersonating 'admin' user -->
  42. <?php } else { ?>
  43. <div class="top-bar-notifications">
  44. <button type="button" class="top-bar-nav-link js-notifications" title="<?=_('Notifications');?>">
  45. <i class="fas fa-bell <?php if($panel[$user]['NOTIFICATIONS'] == 'yes') echo 'animate__animated animate__swing status-icon orange' ?>"></i>
  46. <span class="u-hidden"><?=_('Notifications');?></span>
  47. </button>
  48. <ul class="notification-container animate__animated animate__fadeIn u-hidden"></ul>
  49. </div>
  50. <?php } ?>
  51. <!-- Menu -->
  52. <nav class="top-bar-nav">
  53. <button type="button" class="top-bar-nav-link u-hide-desktop js-toggle-top-bar-menu" title="<?=_('Toggle menu');?>">
  54. <i class="fas fa-bars"></i>
  55. <span class="u-hidden"><?=_('Toggle menu');?></span>
  56. </button>
  57. <ul class="top-bar-nav-list animate__animated animate__fadeIn">
  58. <!-- File Manager -->
  59. <?php if ((isset($_SESSION['FILE_MANAGER'])) && (!empty($_SESSION['FILE_MANAGER'])) && ($_SESSION['FILE_MANAGER'] == "true")) {?>
  60. <?php if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look']) && ($_SESSION['look'] === 'admin') && ($_SESSION['POLICY_SYSTEM_PROTECTED_ADMIN'] == 'yes'))) {?>
  61. <!-- Hide file manager when impersonating admin-->
  62. <?php } else { ?>
  63. <li class="top-bar-nav-item">
  64. <a title="<?=_('File manager');?>" class="top-bar-nav-link <?php if($TAB == 'FM') echo 'active' ?>" href="/fm/">
  65. <i class="fas fa-folder-open"></i>
  66. <span class="top-bar-nav-link-label"><?=_('File manager');?></span>
  67. </a>
  68. </li>
  69. <?php } ?>
  70. <?php } ?>
  71. <!-- Server Settings -->
  72. <?php if (($_SESSION['userContext'] === 'admin') && ($_SESSION['POLICY_SYSTEM_HIDE_SERVICES'] !== 'yes') || ($_SESSION['user'] === 'admin')) {?>
  73. <?php if (($_SESSION['userContext'] === 'admin') && (!empty($_SESSION['look']))) {?>
  74. <!-- Hide 'Server Settings' button when impersonating 'admin' or other users -->
  75. <?php } else { ?>
  76. <li class="top-bar-nav-item">
  77. <a title="<?=_('Server');?>" class="top-bar-nav-link <?php if(in_array($TAB, ['SERVER', 'IP', 'RRD', 'FIREWALL'])) echo 'active' ?>" href="/list/server/">
  78. <i class="fas fa-gear"></i>
  79. <span class="top-bar-nav-link-label"><?=_('Server');?></span>
  80. </a>
  81. </li>
  82. <?php } ?>
  83. <?php } ?>
  84. <!-- Edit User -->
  85. <?php if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look']) && ($user == 'admin'))) {?>
  86. <!-- Hide 'edit user' entry point from other administrators for default 'admin' account-->
  87. <li class="top-bar-nav-item">
  88. <a title="<?=_('Logs');?>" class="top-bar-nav-link <?php if($TAB == 'LOG') echo 'active' ?>" href="/list/log/">
  89. <i class="fas fa-clock-rotate-left"></i>
  90. <span class="top-bar-nav-link-label"><?=_('Logs');?></span>
  91. </a>
  92. </li>
  93. <?php } else { ?>
  94. <?php if ($panel[$user]['SUSPENDED'] === 'no') {?>
  95. <li class="top-bar-nav-item">
  96. <a title="<?=htmlspecialchars($user)?> (<?=htmlspecialchars($panel[$user]['NAME'])?>)" class="top-bar-nav-link" href="/edit/user/?user=<?=$user; ?>&token=<?=$_SESSION['token']?>">
  97. <i class="fas fa-circle-user"></i>
  98. <span class="top-bar-nav-link-label"><?=htmlspecialchars($user)?> (<?=htmlspecialchars($panel[$user]['NAME'])?>)</span>
  99. </a>
  100. </li>
  101. <?php } ?>
  102. <?php } ?>
  103. <!-- Statistics -->
  104. <li class="top-bar-nav-item">
  105. <a title="<?=_('Statistics');?>" class="top-bar-nav-link <?php if($TAB == 'STATS') echo 'active' ?>" href="/list/stats/">
  106. <i class="fas fa-chart-line"></i>
  107. <span class="top-bar-nav-link-label"><?=_('Statistics');?></span>
  108. </a>
  109. </li>
  110. <!-- Help / Documentation -->
  111. <li class="top-bar-nav-item">
  112. <a title="<?=_('Help');?>" class="top-bar-nav-link" href="https://docs.hestiacp.com/" target="_blank" rel="noopener">
  113. <i class="fas fa-circle-question"></i>
  114. <span class="top-bar-nav-link-label"><?=_('Help');?></span>
  115. </a>
  116. </li>
  117. <!-- Logout -->
  118. <?php if (isset($_SESSION['look']) && (!empty($_SESSION['look']))) { ?>
  119. <li class="top-bar-nav-item">
  120. <a title="<?=_('Log out');?> (<?=$user?>)" class="top-bar-nav-link top-bar-nav-link-logout" href="/logout/?token=<?=$_SESSION['token']?>">
  121. <i class="fas fa-circle-up"></i>
  122. <span class="top-bar-nav-link-label"><?=_('Log out');?> (<?=$user?>)</span>
  123. </a>
  124. </li>
  125. <?php } else { ?>
  126. <li class="top-bar-nav-item">
  127. <a title="<?=_('Log out');?>" class="top-bar-nav-link top-bar-nav-link-logout" href="/logout/?token=<?=$_SESSION['token']?>">
  128. <i class="fas fa-right-from-bracket"></i>
  129. <span class="top-bar-nav-link-label"><?=_('Log out');?></span>
  130. </a>
  131. </li>
  132. <?php } ?>
  133. </ul>
  134. </nav>
  135. </div>
  136. </div>
  137. </header>
  138. <div class="l-content">
  139. <div class="l-center">
  140. <nav class="main-menu">
  141. <ul class="main-menu-list">
  142. <!-- Users tab -->
  143. <?php if (($_SESSION['userContext'] == 'admin') && (empty($_SESSION['look']))) {?>
  144. <?php
  145. if (($_SESSION['user'] !== 'admin') && ($_SESSION['POLICY_SYSTEM_HIDE_ADMIN'] === 'yes')) {
  146. $user_count = $panel[$user]['U_USERS'] - 1;
  147. } else {
  148. $user_count = $panel[$user]['U_USERS'];
  149. }
  150. ?>
  151. <li class="main-menu-item">
  152. <a class="main-menu-item-link <?php if(in_array($TAB, ['USER', 'LOG'])) echo 'active' ?>" href="/list/user/" title="<?=_('Users');?>: <?=$user_count;?>&#13;<?=_('Suspended');?>: <?=$panel[$user]['SUSPENDED_USERS']?>">
  153. <p class="main-menu-item-label"><?=_('USER');?><i class="fas fa-users u-ml10"></i></p>
  154. <ul class="main-menu-stats">
  155. <li>
  156. <?=_('users');?>: <span><?=htmlspecialchars($user_count);?></span>
  157. </li>
  158. <li>
  159. <?=_('spnd');?>: <span><?=$panel[$user]['SUSPENDED_USERS']?></span>
  160. </li>
  161. </ul>
  162. </a>
  163. </li>
  164. <?php } ?>
  165. <!-- Web tab -->
  166. <?php if ((isset($_SESSION['WEB_SYSTEM'])) && (!empty($_SESSION['WEB_SYSTEM']))) {?>
  167. <?php if($panel[$user]['WEB_DOMAINS'] != "0") { ?>
  168. <li class="main-menu-item">
  169. <a class="main-menu-item-link <?php if($TAB == 'WEB') echo 'active' ?>" href="/list/web/" title="<?=_('Domains');?>: <?=$panel[$user]['U_WEB_DOMAINS']?>&#13;<?=_('Aliases');?>: <?=$panel[$user]['U_WEB_ALIASES']?>&#13;<?=_('Limit')?>: <?=$panel[$user]['WEB_DOMAINS']=='unlimited' ? "∞" : $panel[$user]['WEB_DOMAINS']?>&#13;<?=_('Suspended');?>: <?=$panel[$user]['SUSPENDED_WEB']?>">
  170. <p class="main-menu-item-label"><?=_('WEB');?><i class="fas fa-earth-americas u-ml10"></i></p>
  171. <ul class="main-menu-stats">
  172. <li>
  173. <?=_('domains');?>: <span><?=$panel[$user]['U_WEB_DOMAINS']?> / <?=$panel[$user]['WEB_DOMAINS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['WEB_DOMAINS']?> (<?=$panel[$user]['SUSPENDED_WEB']?>)</span>
  174. </li>
  175. <li>
  176. <?=_('aliases');?>: <span><?=$panel[$user]['U_WEB_ALIASES']?> / <?=$panel[$user]['WEB_ALIASES']=='unlimited' || $panel[$user]['WEB_DOMAINS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['WEB_ALIASES'] * $panel[$user]['WEB_DOMAINS']?></span>
  177. </li>
  178. </ul>
  179. </a>
  180. </li>
  181. <?php } ?>
  182. <?php } ?>
  183. <!-- DNS tab -->
  184. <?php if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {?>
  185. <?php if($panel[$user]['DNS_DOMAINS'] != "0") { ?>
  186. <li class="main-menu-item">
  187. <a class="main-menu-item-link <?php if($TAB == 'DNS') echo 'active' ?>" href="/list/dns/" title="<?=_('Domains');?>: <?=$panel[$user]['U_DNS_DOMAINS']?>&#13;<?=_('Limit')?>: <?=$panel[$user]['DNS_DOMAINS']=='unlimited' ? "∞" : $panel[$user]['DNS_DOMAINS']?>&#13;<?=_('Suspended');?>: <?=$panel[$user]['SUSPENDED_DNS']?>">
  188. <p class="main-menu-item-label"><?=_('DNS');?><i class="fas fa-book-atlas u-ml10"></i></p>
  189. <ul class="main-menu-stats">
  190. <li>
  191. <?=_('zones');?>: <span><?=$panel[$user]['U_DNS_DOMAINS']?> / <?=$panel[$user]['DNS_DOMAINS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['DNS_DOMAINS']?> (<?=$panel[$user]['SUSPENDED_DNS']?>)</span>
  192. </li>
  193. <li>
  194. <?=_('records');?>: <span><?=$panel[$user]['U_DNS_RECORDS']?> / <?=$panel[$user]['DNS_RECORDS']=='unlimited' || $panel[$user]['DNS_DOMAINS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['DNS_RECORDS'] * $panel[$user]['DNS_DOMAINS']?></span>
  195. </li>
  196. </ul>
  197. </a>
  198. </li>
  199. <?php } ?>
  200. <?php } ?>
  201. <!-- Mail tab -->
  202. <?php if ((isset($_SESSION['MAIL_SYSTEM'])) && (!empty($_SESSION['MAIL_SYSTEM']))) {?>
  203. <?php if($panel[$user]['MAIL_DOMAINS'] != "0") { ?>
  204. <li class="main-menu-item">
  205. <a class="main-menu-item-link <?php if($TAB == 'MAIL') echo 'active' ?>" href="/list/mail/" title="<?=_('Domains');?>: <?=$panel[$user]['U_MAIL_DOMAINS']?>&#13;<?=_('Limit')?>: <?=$panel[$user]['MAIL_DOMAINS']=='unlimited' ? "∞" : $panel[$user]['MAIL_DOMAINS']?>&#13;<?=_('Suspended');?>: <?=$panel[$user]['SUSPENDED_MAIL']?>">
  206. <p class="main-menu-item-label"><?=_('MAIL');?><i class="fas fa-envelopes-bulk u-ml10"></i></p>
  207. <ul class="main-menu-stats">
  208. <li>
  209. <?=_('domains');?>: <span><?=$panel[$user]['U_MAIL_DOMAINS']?> / <?=$panel[$user]['MAIL_DOMAINS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['MAIL_DOMAINS']?> (<?=$panel[$user]['SUSPENDED_MAIL']?>)</span>
  210. </li>
  211. <li>
  212. <?=_('accounts');?>: <span><?=$panel[$user]['U_MAIL_ACCOUNTS']?> / <?=$panel[$user]['MAIL_ACCOUNTS']=='unlimited' || $panel[$user]['MAIL_DOMAINS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['MAIL_ACCOUNTS'] * $panel[$user]['MAIL_DOMAINS']?></span>
  213. </li>
  214. </ul>
  215. </a>
  216. </li>
  217. <?php } ?>
  218. <?php } ?>
  219. <!-- Databases tab -->
  220. <?php if ((isset($_SESSION['DB_SYSTEM'])) && (!empty($_SESSION['DB_SYSTEM']))) {?>
  221. <?php if($panel[$user]['DATABASES'] != "0") { ?>
  222. <li class="main-menu-item">
  223. <a class="main-menu-item-link <?php if($TAB == 'DB') echo 'active' ?>" href="/list/db/" title="<?=_('Databases');?>: <?=$panel[$user]['U_DATABASES']?>&#13;<?=_('Limit')?>: <?=$panel[$user]['DATABASES']=='unlimited' ? "∞" : $panel[$user]['DATABASES']?>&#13;<?=_('Suspended');?>: <?=$panel[$user]['SUSPENDED_DB']?>">
  224. <p class="main-menu-item-label"><?=_('DB');?><i class="fas fa-database u-ml10"></i></p>
  225. <ul class="main-menu-stats">
  226. <li>
  227. <?=_('databases');?>: <span><?=$panel[$user]['U_DATABASES']?> / <?=$panel[$user]['DATABASES']=='unlimited' ? "<b>∞</b>" : $panel[$user]['DATABASES']?> (<?=$panel[$user]['SUSPENDED_DB']?>)</span>
  228. </li>
  229. </ul>
  230. </a>
  231. </li>
  232. <?php } ?>
  233. <?php } ?>
  234. <!-- Cron tab -->
  235. <?php if ((isset($_SESSION['CRON_SYSTEM'])) && (!empty($_SESSION['CRON_SYSTEM']))) {?>
  236. <?php if($panel[$user]['CRON_JOBS'] != "0") { ?>
  237. <li class="main-menu-item">
  238. <a class="main-menu-item-link <?php if($TAB == 'CRON') echo 'active' ?>" href="/list/cron/" title="<?=_('Jobs');?>: <?=$panel[$user]['U_WEB_DOMAINS']?>&#13;<?=_('Limit')?>: <?=$panel[$user]['CRON_JOBS']=='unlimited' ? "∞" : $panel[$user]['CRON_JOBS']?>&#13;<?=_('Suspended');?>: <?=$panel[$user]['SUSPENDED_CRON']?>">
  239. <p class="main-menu-item-label"><?=_('CRON');?><i class="fas fa-clock u-ml10"></i></p>
  240. <ul class="main-menu-stats">
  241. <li>
  242. <?=_('jobs');?>: <span><?=$panel[$user]['U_CRON_JOBS']?> / <?=$panel[$user]['CRON_JOBS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['CRON_JOBS']?> (<?=$panel[$user]['SUSPENDED_CRON']?>)</span>
  243. </li>
  244. </ul>
  245. </a>
  246. </li>
  247. <?php } ?>
  248. <?php } ?>
  249. <!-- Backups tab -->
  250. <?php if ((isset($_SESSION['BACKUP_SYSTEM'])) && (!empty($_SESSION['BACKUP_SYSTEM']))) {?>
  251. <?php if($panel[$user]['BACKUPS'] != "0") { ?>
  252. <li class="main-menu-item">
  253. <a class="main-menu-item-link <?php if($TAB == 'BACKUP') echo 'active' ?>" href="/list/backup/" title="<?=_('Backups');?>: <?=$panel[$user]['U_BACKUPS']?>&#13;<?=_('Limit')?>: <?=$panel[$user]['BACKUPS']=='unlimited' ? "∞" : $panel[$user]['BACKUPS']?>">
  254. <p class="main-menu-item-label"><?=_('BACKUP');?><i class="fas fa-file-zipper u-ml10"></i></p>
  255. <ul class="main-menu-stats">
  256. <li>
  257. <?=_('backups');?>: <span><?=$panel[$user]['U_BACKUPS']?> / <?=$panel[$user]['BACKUPS']=='unlimited' ? "<b>∞</b>" : $panel[$user]['BACKUPS']?></span>
  258. </li>
  259. </ul>
  260. </a>
  261. </li>
  262. <?php } ?>
  263. <?php } ?>
  264. </ul>
  265. </nav>
  266. </div>