dashboard.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
  3. require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.admin.inc.php';
  4. if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'domainadmin') {
  5. header('Location: /domainadmin/mailbox');
  6. exit();
  7. }
  8. elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'user') {
  9. header('Location: /user');
  10. exit();
  11. }
  12. elseif (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != "admin") {
  13. header('Location: /admin');
  14. exit();
  15. }
  16. require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
  17. $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
  18. $clamd_status = (preg_match("/^([yY][eE][sS]|[yY])+$/", $_ENV["SKIP_CLAMD"])) ? false : true;
  19. if (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CACHE')) {
  20. $_SESSION['gal'] = json_decode($license_cache, true);
  21. }
  22. $js_minifier->add('/web/js/site/dashboard.js');
  23. // vmail df
  24. $exec_fields = array('cmd' => 'system', 'task' => 'df', 'dir' => '/var/vmail');
  25. $vmail_df = explode(',', (string)json_decode(docker('post', 'dovecot-mailcow', 'exec', $exec_fields), true));
  26. // containers
  27. $containers_info = (array) docker('info');
  28. if ($clamd_status === false) unset($containers_info['clamd-mailcow']);
  29. ksort($containers_info);
  30. $containers = array();
  31. foreach ($containers_info as $container => $container_info) {
  32. if (!isset($container_info['State']) || !is_array($container_info['State']) || !isset($container_info['State']['StartedAt'])){
  33. continue;
  34. }
  35. date_default_timezone_set('UTC');
  36. $StartedAt = date_parse($container_info['State']['StartedAt']);
  37. if ($StartedAt['hour'] !== false) {
  38. $date = new \DateTime();
  39. $date->setTimestamp(mktime(
  40. $StartedAt['hour'],
  41. $StartedAt['minute'],
  42. $StartedAt['second'],
  43. $StartedAt['month'],
  44. $StartedAt['day'],
  45. $StartedAt['year']));
  46. try {
  47. $user_tz = new DateTimeZone(getenv('TZ'));
  48. $date->setTimezone($user_tz);
  49. $container_info['State']['StartedAtHR'] = $date->format('r');
  50. } catch(Exception $e) {
  51. $container_info['State']['StartedAtHR'] = '?';
  52. }
  53. }
  54. else {
  55. $container_info['State']['StartedAtHR'] = '?';
  56. }
  57. $containers[$container] = $container_info;
  58. }
  59. // get mailcow data
  60. $hostname = getenv('MAILCOW_HOSTNAME');
  61. $timezone = getenv('TZ');
  62. $template = 'dashboard.twig';
  63. $template_data = [
  64. 'log_lines' => getenv('LOG_LINES'),
  65. 'vmail_df' => $vmail_df,
  66. 'hostname' => $hostname,
  67. 'timezone' => $timezone,
  68. 'gal' => @$_SESSION['gal'],
  69. 'license_guid' => license('guid'),
  70. 'clamd_status' => $clamd_status,
  71. 'containers' => $containers,
  72. 'ip_check' => customize('get', 'ip_check'),
  73. 'lang_admin' => json_encode($lang['admin']),
  74. 'lang_debug' => json_encode($lang['debug']),
  75. 'lang_datatables' => json_encode($lang['datatables']),
  76. ];
  77. require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';