From 892f2197cb1b37bb6b3f58da937d0a7fab9d9c3e Mon Sep 17 00:00:00 2001 From: root Date: Tue, 21 Mar 2017 10:02:23 +0100 Subject: [PATCH] Add footable --- data/conf/nginx/server_name.active | 2 +- data/web/inc/functions.inc.php | 2 +- data/web/inc/header.inc.php | 1 + data/web/js/mailbox.js | 176 +++++++++++++++++++++++++---- data/web/json_api.php | 105 ++++++++++++++++- data/web/mailbox.php | 57 +++++----- docker-compose.yml | 3 + 7 files changed, 286 insertions(+), 60 deletions(-) diff --git a/data/conf/nginx/server_name.active b/data/conf/nginx/server_name.active index ce429200..7309d8f6 100644 --- a/data/conf/nginx/server_name.active +++ b/data/conf/nginx/server_name.active @@ -1 +1 @@ -server_name logs.servercow.de autodiscover.* autoconfig.*; +server_name mail.develcow.de autodiscover.* autoconfig.*; diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index 9c2bdbc1..c37e39ab 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -4422,7 +4422,7 @@ function mailbox_get_resource_details($resource) { $resourcedata['name'] = $row['username']; $resourcedata['kind'] = $row['kind']; $resourcedata['multiple_bookings'] = $row['multiple_bookings']; - $resourcedata['multiple_bookings_int'] = $row['multiple_bookings']; + $resourcedata['multiple_bookings_int'] = $row['multiple_bookings_int']; $resourcedata['description'] = $row['name']; $resourcedata['active'] = $row['active']; $resourcedata['active_int'] = $row['active_int']; diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php index a128df88..ceacaf8e 100644 --- a/data/web/inc/header.inc.php +++ b/data/web/inc/header.inc.php @@ -15,6 +15,7 @@ + diff --git a/data/web/js/mailbox.js b/data/web/js/mailbox.js index 3a12b610..55e21c32 100644 --- a/data/web/js/mailbox.js +++ b/data/web/js/mailbox.js @@ -28,22 +28,23 @@ $(document).ready(function() { item.quota = humanFileSize(item.quota_used_in_domain) + " / " + humanFileSize(item.max_quota_for_domain); item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox); item.action = '
' + - ' Edit' + - ' Remove' + + ' ' + lang.edit + '' + + ' ' + lang.remove + '' + '
'; }); $('#domain_table').footable({ "columns": [ - {"sorted": true,"name":"domain_name","title":lang_domain}, - {"name":"aliases","title":lang_aliases,"breakpoints":"xs sm"}, - {"name":"mailboxes","title":lang_mailboxes}, - {"name":"quota","title":lang_domain_quota}, - {"name":"max_quota_for_mbox","title":lang_mailbox_quota}, - {"name":"backupmx","title":lang_backup_mx,"breakpoints":"xs sm"}, - {"name":"active","title":lang_active,"breakpoints":"xs sm"}, - {"name":"action","type":"html","title":lang_action,"breakpoints":"xs sm"} + {"sorted": true,"name":"domain_name","title":lang.domain,"style":{"width":"250px"}}, + {"name":"aliases","title":lang.aliases,"breakpoints":"xs sm"}, + {"name":"mailboxes","title":lang.mailboxes}, + {"name":"quota","title":lang.domain_quota}, + {"name":"max_quota_for_mbox","title":lang.mailbox_quota}, + {"name":"backupmx","title":lang.backup_mx,"breakpoints":"xs sm"}, + {"name":"active","style":{"maxWidth":"50px","width":"70px"},"title":lang.active}, + {"name":"action","sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"} ], "rows": data, + "empty": lang.empty, "paging": { "enabled": true, "limit": 5, @@ -51,7 +52,8 @@ $(document).ready(function() { }, "filtering": { "enabled": true, - "position": "left" + "position": "left", + "placeholder": lang.search }, "sorting": { "enabled": true @@ -72,8 +74,8 @@ $(document).ready(function() { item.quota = humanFileSize(item.quota_used) + " / " + humanFileSize(item.quota); item.max_quota_for_mbox = humanFileSize(item.max_quota_for_mbox); item.action = '
' + - ' Edit' + - ' Remove' + + ' ' + lang.edit + '' + + ' ' + lang.remove + '' + '
'; item.in_use = '
' + '
' + lang.edit + '' + + ' ' + lang.remove + '' + + '
'; + }); + $('#resources_table').footable({ + "columns": [ + {"sorted": true,"name":"description","title":lang.description,"style":{"width":"250px"}}, + {"name":"kind","title":lang.kind,"breakpoints":"xs sm"}, + {"name":"domain","title":lang.domain}, + {"name":"multiple_bookings","title":lang.multiple_bookings}, + {"name":"domain","title":lang.domain}, + {"name":"active","style":{"maxWidth":"50px","width":"70px"},"title":lang.active}, + {"name":"action","sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"} + ], + "empty": lang.empty, + "rows": data, + "paging": { + "enabled": true, + "limit": 5, + "size": 25 + }, + "filtering": { + "enabled": true, + "position": "left", + "placeholder": lang.search + }, + "sorting": { + "enabled": true + } + }); + } + }); + + $.ajax({ + dataType: 'json', + url: '/json_api.php?action=domain_alias_table_data', + jsonp: false, + error: function () { + alert('Cannot receive history'); + }, + success: function (data) { + $.each(data, function (i, item) { + item.action = ''; + }); + $('#aliasdomain_table').footable({ + "columns": [ + {"sorted": true,"name":"alias_domain","title":lang.alias,"style":{"width":"250px"}}, + {"name":"target_domain","title":lang.target_domain,"breakpoints":"xs sm"}, + {"name":"active","style":{"maxWidth":"50px","width":"70px"},"title":lang.active}, + {"name":"action","sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"} + ], + "empty": lang.empty, + "rows": data, + "paging": { + "enabled": true, + "limit": 5, + "size": 25 + }, + "filtering": { + "enabled": true, + "position": "left", + "placeholder": lang.search + }, + "sorting": { + "enabled": true + } + }); + } + }); + + $.ajax({ + dataType: 'json', + url: '/json_api.php?action=alias_table_data', + jsonp: false, + error: function () { + alert('Cannot receive history'); + }, + success: function (data) { + $.each(data, function (i, item) { + if (item.is_catch_all == 1) { + item.address = '
Catch-All
' + item.address; + } + item.action = ''; + }); + $('#alias_table').footable({ + "columns": [ + {"sorted": true,"name":"address","title":lang.alias,"style":{"width":"250px"}}, + {"name":"goto","title":lang.target_address}, + {"name":"domain","title":lang.domain}, + {"name":"active","style":{"maxWidth":"50px","width":"70px"},"title":lang.active}, + {"name":"action","sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"} + ], + "empty": lang.empty, + "rows": data, + "paging": { + "enabled": true, + "limit": 5, + "size": 5 + }, + "filtering": { + "enabled": true, + "position": "left", + "placeholder": lang.search + }, + "sorting": { + "enabled": true + } + }); + } + }); }); diff --git a/data/web/json_api.php b/data/web/json_api.php index d404b0bd..89ed85a0 100644 --- a/data/web/json_api.php +++ b/data/web/json_api.php @@ -2,13 +2,104 @@ require_once 'inc/prerequisites.inc.php'; error_reporting(E_ALL); if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_username'])) { - if ($_GET['action'] && $_GET['object']) { + if (isset($_GET['action'])) { $action = $_GET['action']; - $object = $_GET['object']; switch ($action) { + case "domain_table_data": + $domains = mailbox_get_domains(); + if (!empty($domains)) { + foreach ($domains as $domain) { + $data[] = mailbox_get_domain_details($domain); + } + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + } + break; + case "mailbox_table_data": + $domains = mailbox_get_domains(); + if (!empty($domains)) { + foreach ($domains as $domain) { + $mailboxes = mailbox_get_mailboxes($domain); + if (!empty($mailboxes)) { + foreach ($mailboxes as $mailbox) { + $data[] = mailbox_get_mailbox_details($mailbox); + } + } + } + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + } + break; + case "resource_table_data": + $domains = mailbox_get_domains(); + if (!empty($domains)) { + foreach ($domains as $domain) { + $resources = mailbox_get_resources($domain); + if (!empty($resources)) { + foreach ($resources as $resource) { + $data[] = mailbox_get_resource_details($resource); + } + } + } + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + } + break; + case "domain_alias_table_data": + $domains = mailbox_get_domains(); + if (!empty($domains)) { + foreach ($domains as $domain) { + $alias_domains = mailbox_get_alias_domains($domain); + if (!empty($alias_domains)) { + foreach ($alias_domains as $alias_domain) { + $data[] = mailbox_get_alias_domain_details($alias_domain); + } + } + } + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + } + break; + case "alias_table_data": + $domains = array_merge(mailbox_get_domains(), mailbox_get_alias_domains()); + if (!empty($domains)) { + foreach ($domains as $domain) { + $aliases = mailbox_get_aliases($domain); + if (!empty($aliases)) { + foreach ($aliases as $alias) { + $data[] = mailbox_get_alias_details($alias); + } + } + } + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + } + break; case "get_mailbox_details": + if (!isset($_GET['object'])) { return false; } + $object = $_GET['object']; $data = mailbox_get_mailbox_details($object); - if (!$data || empty($data)) { + if (!isset($data) || empty($data)) { echo '{}'; } else { @@ -16,8 +107,10 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u } break; case "get_domain_details": + if (!isset($_GET['object'])) { return false; } + $object = $_GET['object']; $data = mailbox_get_domain_details($object); - if (!$data || empty($data)) { + if (!isset($data) || empty($data)) { echo '{}'; } else { @@ -25,6 +118,8 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u } break; case "get_u2f_reg_challenge": + if (!isset($_GET['object'])) { return false; } + $object = $_GET['object']; if ( ($_SESSION["mailcow_cc_role"] == "admin" || $_SESSION["mailcow_cc_role"] == "domainadmin") && @@ -40,6 +135,8 @@ if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_u } break; case "get_u2f_auth_challenge": + if (!isset($_GET['object'])) { return false; } + $object = $_GET['object']; if (isset($_SESSION['pending_mailcow_cc_username']) && $_SESSION['pending_mailcow_cc_username'] == $object) { $reqs = json_encode($u2f->getAuthenticateData(get_u2f_registrations($object))); $_SESSION['authReq'] = $reqs; diff --git a/data/web/mailbox.php b/data/web/mailbox.php index 5f2187c0..8873859a 100644 --- a/data/web/mailbox.php +++ b/data/web/mailbox.php @@ -5,6 +5,15 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm require_once "inc/header.inc.php"; $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; ?> +
@@ -36,9 +45,9 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
-
-
-
+
+
+
@@ -51,11 +60,9 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; -
-
-
-
-
+
+
+
@@ -68,11 +75,9 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; -
-
-
-
-
+
+
+
@@ -86,28 +91,18 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; -
-
-
-
-
+
+
+
- diff --git a/docker-compose.yml b/docker-compose.yml index 76ca1b6b..47528305 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -261,6 +261,9 @@ networks: volumes: vmail-vol-1: + driver: nfs + driver_opts: + share: io.servercow.de:/nfs_test mysql-vol-1: dkim-vol-1: redis-vol-1: