panel.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <div id="token" token="<?=$_SESSION['token']?>"></div>
  2. <header class="app-header">
  3. <div class="top-bar">
  4. <div class="container top-bar-inner">
  5. <!-- Logo / Usage Statistics wrapper -->
  6. <div class="top-bar-left">
  7. <!-- Logo / Home Button -->
  8. <a href="<?=htmlspecialchars($home_url)?>" class="top-bar-logo" title="<?=_('Hestia Control Panel');?>">
  9. <img src="/images/logo-header.svg" alt="<?=_('Hestia Control Panel');?>" width="54" height="29">
  10. </a>
  11. <!-- Usage Statistics -->
  12. <div class="top-bar-usage">
  13. <?php
  14. if (isset($_SESSION['look'])) {
  15. $user_icon = 'fa-binoculars';
  16. } else if ($_SESSION['userContext'] === 'admin') {
  17. $user_icon = 'fa-user-tie';
  18. } else {
  19. $user_icon = 'fa-user';
  20. }
  21. ?>
  22. <div class="top-bar-usage-inner">
  23. <span class="top-bar-usage-item">
  24. <i class="fas <?=$user_icon;?>" title="<?=_('Logged in as');?>: <?=htmlspecialchars($panel[$user]['NAME'])?>"></i>
  25. <b><?=htmlspecialchars($user)?></b>
  26. </span>
  27. <span class="top-bar-usage-item">
  28. <i class="fas fa-hard-drive" title="<?=_('Disk');?>: <?=humanize_usage_size($panel[$user]['U_DISK'])?> <?=humanize_usage_measure($panel[$user]['U_DISK'])?>"></i>
  29. <b><?=humanize_usage_size($panel[$user]['U_DISK'])?></b> <?=humanize_usage_measure($panel[$user]['U_DISK'])?>
  30. </span>
  31. <span class="top-bar-usage-item">
  32. <i class="fas fa-right-left" title="<?=_('Bandwidth');?>: <?=humanize_usage_size($panel[$user]['U_BANDWIDTH'])?> <?=humanize_usage_measure($panel[$user]['U_BANDWIDTH'])?>"></i>
  33. <b><?=humanize_usage_size($panel[$user]['U_BANDWIDTH'])?></b> <?=humanize_usage_measure($panel[$user]['U_BANDWIDTH'])?>
  34. </span>
  35. </div>
  36. </div>
  37. </div>
  38. <!-- Notifications / Menu wrapper -->
  39. <div class="top-bar-right">
  40. <!-- Notifications -->
  41. <?php if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look']) && ($user == 'admin'))) {?>
  42. <!-- Do not show notifications panel when impersonating 'admin' user -->
  43. <?php } else { ?>
  44. <div class="top-bar-notifications">
  45. <button type="button" class="top-bar-menu-link js-notifications" title="<?=_('Notifications');?>">
  46. <i class="fas fa-bell <?php if($panel[$user]['NOTIFICATIONS'] == 'yes') echo 'animate__animated animate__swing status-icon orange' ?>"></i>
  47. <span class="u-hidden"><?=_('Notifications');?></span>
  48. </button>
  49. <ul class="top-bar-notifications-list animate__animated animate__fadeIn u-hidden"></ul>
  50. </div>
  51. <?php } ?>
  52. <!-- Menu -->
  53. <nav class="top-bar-menu">
  54. <button type="button" class="top-bar-menu-link u-hide-tablet js-toggle-top-bar-menu" title="<?=_('Toggle menu');?>">
  55. <i class="fas fa-bars"></i>
  56. <span class="u-hidden"><?=_('Toggle menu');?></span>
  57. </button>
  58. <ul class="top-bar-menu-list animate__animated animate__fadeIn">
  59. <!-- File Manager -->
  60. <?php if ((isset($_SESSION['FILE_MANAGER'])) && (!empty($_SESSION['FILE_MANAGER'])) && ($_SESSION['FILE_MANAGER'] == "true")) {?>
  61. <?php if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look']) && ($_SESSION['look'] === 'admin') && ($_SESSION['POLICY_SYSTEM_PROTECTED_ADMIN'] == 'yes'))) {?>
  62. <!-- Hide file manager when impersonating admin-->
  63. <?php } else { ?>
  64. <li class="top-bar-menu-item">
  65. <a title="<?=_('File manager');?>" class="top-bar-menu-link <?php if($TAB == 'FM') echo 'active' ?>" href="/fm/">
  66. <i class="fas fa-folder-open"></i>
  67. <span class="top-bar-menu-link-label u-hide-desktop"><?=_('File manager');?></span>
  68. </a>
  69. </li>
  70. <?php } ?>
  71. <?php } ?>
  72. <!-- Server Settings -->
  73. <?php if (($_SESSION['userContext'] === 'admin') && ($_SESSION['POLICY_SYSTEM_HIDE_SERVICES'] !== 'yes') || ($_SESSION['user'] === 'admin')) {?>
  74. <?php if (($_SESSION['userContext'] === 'admin') && (!empty($_SESSION['look']))) {?>
  75. <!-- Hide 'Server Settings' button when impersonating 'admin' or other users -->
  76. <?php } else { ?>
  77. <li class="top-bar-menu-item">
  78. <a title="<?=_('Server');?>" class="top-bar-menu-link <?php if(in_array($TAB, ['SERVER', 'IP', 'RRD', 'FIREWALL'])) echo 'active' ?>" href="/list/server/">
  79. <i class="fas fa-gear"></i>
  80. <span class="top-bar-menu-link-label u-hide-desktop"><?=_('Server');?></span>
  81. </a>
  82. </li>
  83. <?php } ?>
  84. <?php } ?>
  85. <!-- Edit User -->
  86. <?php if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look']) && ($user == 'admin'))) {?>
  87. <!-- Hide 'edit user' entry point from other administrators for default 'admin' account-->
  88. <li class="top-bar-menu-item">
  89. <a title="<?=_('Logs');?>" class="top-bar-menu-link <?php if($TAB == 'LOG') echo 'active' ?>" href="/list/log/">
  90. <i class="fas fa-clock-rotate-left"></i>
  91. <span class="top-bar-menu-link-label u-hide-desktop"><?=_('Logs');?></span>
  92. </a>
  93. </li>
  94. <?php } else { ?>
  95. <?php if ($panel[$user]['SUSPENDED'] === 'no') {?>
  96. <li class="top-bar-menu-item">
  97. <a title="<?=htmlspecialchars($user)?> (<?=htmlspecialchars($panel[$user]['NAME'])?>)" class="top-bar-menu-link" href="/edit/user/?user=<?=$user; ?>&token=<?=$_SESSION['token']?>">
  98. <i class="fas fa-circle-user"></i>
  99. <span class="top-bar-menu-link-label u-hide-desktop"><?=htmlspecialchars($user)?> (<?=htmlspecialchars($panel[$user]['NAME'])?>)</span>
  100. </a>
  101. </li>
  102. <?php } ?>
  103. <?php } ?>
  104. <!-- Statistics -->
  105. <li class="top-bar-menu-item">
  106. <a title="<?=_('Statistics');?>" class="top-bar-menu-link <?php if($TAB == 'STATS') echo 'active' ?>" href="/list/stats/">
  107. <i class="fas fa-chart-line"></i>
  108. <span class="top-bar-menu-link-label u-hide-desktop"><?=_('Statistics');?></span>
  109. </a>
  110. </li>
  111. <!-- Help / Documentation -->
  112. <li class="top-bar-menu-item">
  113. <a title="<?=_('Help');?>" class="top-bar-menu-link" href="https://docs.hestiacp.com/" target="_blank" rel="noopener">
  114. <i class="fas fa-circle-question"></i>
  115. <span class="top-bar-menu-link-label u-hide-desktop"><?=_('Help');?></span>
  116. </a>
  117. </li>
  118. <!-- Logout -->
  119. <?php if (isset($_SESSION['look']) && (!empty($_SESSION['look']))) { ?>
  120. <li class="top-bar-menu-item">
  121. <a title="<?=_('Log out');?> (<?=$user?>)" class="top-bar-menu-link top-bar-menu-link-logout" href="/logout/?token=<?=$_SESSION['token']?>">
  122. <i class="fas fa-circle-up"></i>
  123. <span class="top-bar-menu-link-label u-hide-desktop"><?=_('Log out');?> (<?=$user?>)</span>
  124. </a>
  125. </li>
  126. <?php } else { ?>
  127. <li class="top-bar-menu-item">
  128. <a title="<?=_('Log out');?>" class="top-bar-menu-link top-bar-menu-link-logout" href="/logout/?token=<?=$_SESSION['token']?>">
  129. <i class="fas fa-right-from-bracket"></i>
  130. <span class="top-bar-menu-link-label u-hide-desktop"><?=_('Log out');?></span>
  131. </a>
  132. </li>
  133. <?php } ?>
  134. </ul>
  135. </nav>
  136. </div>
  137. </div>
  138. </div>
  139. <nav class="main-menu">
  140. <div class="container">
  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. </div>
  266. </nav>
  267. </header>
  268. <main class="app-content">