From 5586bd2bb519ab23032aab9473e434c42521e465 Mon Sep 17 00:00:00 2001 From: andryyy Date: Wed, 26 Apr 2017 23:38:18 +0200 Subject: [PATCH] Initial push or quick actions in alias table --- data/web/css/mailbox.css | 15 +- data/web/css/mailcow.css | 5 + data/web/inc/functions.inc.php | 240 ++++++++-------- data/web/js/mailbox.js | 78 +++++- data/web/json_api.php | 481 +++++++++++++++++++-------------- data/web/lang/lang.en.php | 4 +- data/web/mailbox.php | 8 + 7 files changed, 504 insertions(+), 327 deletions(-) diff --git a/data/web/css/mailbox.css b/data/web/css/mailbox.css index 23f5ad84..a22f5fe2 100644 --- a/data/web/css/mailbox.css +++ b/data/web/css/mailbox.css @@ -16,4 +16,17 @@ table.footable>tbody>tr.footable-empty>td { font-style: italic; display:block; padding: 10px; -} \ No newline at end of file +} +.mass-each-action { + font-style: italic; + padding: 0 3px 0 3px; + user-select: none; +} +.mass-actions { + user-select: none; + padding:10px; +} +.mass-select-all { + cursor:pointer; + color:grey; +} diff --git a/data/web/css/mailcow.css b/data/web/css/mailcow.css index 1b3a691c..f7db5296 100644 --- a/data/web/css/mailcow.css +++ b/data/web/css/mailcow.css @@ -50,3 +50,8 @@ pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-s -ms-user-select: none; user-select: none; } +/* Fix modal moving content left */ +body.modal-open { + overflow: inherit; + padding-right: inherit !important; +} diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index 8da40386..091b3623 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -3308,82 +3308,95 @@ function mailbox_edit_alias_domain($postarray) { ); } function mailbox_edit_alias($postarray) { - // Array elements - // address string - // goto string (separated by " ", "," ";" "\n") - email address or domain - // active int + // We can edit multiple addresses at once, but only set one "goto" and/or "active" attribute for all + // address string or array containing strings | email | required + // goto string | separated by " ", "," ";" "\n", email or domain | optional + // active set (active) or unset (inactive) global $lang; global $pdo; - $address = $postarray['address']; - $domain = idn_to_ascii(substr(strstr($address, '@'), 1)); - $local_part = strstr($address, '@', true); - if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['access_denied']) - ); - return false; - } - if (empty($postarray['goto'])) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['goto_empty']) - ); - return false; - } - $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $postarray['goto'])); - foreach ($gotos as &$goto) { - if (empty($goto)) { - continue; - } - if (!filter_var($goto, FILTER_VALIDATE_EMAIL)) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' =>sprintf($lang['danger']['goto_invalid']) - ); - return false; - } - if ($goto == $address) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['alias_goto_identical']) - ); - return false; - } - } - $gotos = array_filter($gotos); - $goto = implode(",", $gotos); + if (!is_array($postarray['address'])) { + $address_array = array(); + $address_array[] = $postarray['address']; + } + else { + $address_array = $postarray['address']; + } + if (isset($postarray['goto']) || !empty($postarray['goto'])) { + $gotos = array_map('trim', preg_split( "/( |,|;|\n)/", $postarray['goto'])); + foreach ($gotos as &$goto) { + if (empty($goto)) { + continue; + } + if (!filter_var($goto, FILTER_VALIDATE_EMAIL)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' =>sprintf($lang['danger']['goto_invalid']) + ); + return false; + } + if ($goto == $address) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['alias_goto_identical']) + ); + return false; + } + } + $gotos = array_filter($gotos); + $goto = implode(",", $gotos); + } isset($postarray['active']) ? $active = '1' : $active = '0'; - if ((!filter_var($address, FILTER_VALIDATE_EMAIL) === true) && !empty($local_part)) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['alias_invalid']) - ); - return false; - } - - try { - $stmt = $pdo->prepare("UPDATE `alias` SET - `goto` = :goto, - `active`= :active - WHERE `address` = :address"); - $stmt->execute(array( - ':goto' => $goto, - ':active' => $active, - ':address' => $address - )); - $_SESSION['return'] = array( - 'type' => 'success', - 'msg' => sprintf($lang['success']['alias_modified'], htmlspecialchars($address)) - ); - } - catch (PDOException $e) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => 'MySQL: '.$e - ); - return false; + foreach ($address_array as $address) { + $domain = idn_to_ascii(substr(strstr($address, '@'), 1)); + $local_part = strstr($address, '@', true); + if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['access_denied']) + ); + return false; + } + if ((!filter_var($address, FILTER_VALIDATE_EMAIL) === true) && !empty($local_part)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['alias_invalid']) + ); + return false; + } + try { + if (isset($goto) && !empty($goto)) { + $stmt = $pdo->prepare("UPDATE `alias` SET + `goto` = :goto, + `active`= :active + WHERE `address` = :address"); + $stmt->execute(array( + ':goto' => $goto, + ':active' => $active, + ':address' => $address + )); + } + else { + $stmt = $pdo->prepare("UPDATE `alias` SET + `active`= :active + WHERE `address` = :address"); + $stmt->execute(array( + ':active' => $active, + ':address' => $address + )); + } + } + catch (PDOException $e) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => 'MySQL: '.$e + ); + return false; + } } + $_SESSION['return'] = array( + 'type' => 'success', + 'msg' => sprintf($lang['success']['alias_modified'], htmlspecialchars(implode(', ', $address_array))) + ); } function mailbox_edit_domain($postarray) { // Array elements @@ -4527,48 +4540,57 @@ function mailbox_delete_domain($postarray) { return true; } function mailbox_delete_alias($postarray) { + // $postarray['address'] can be a single element or an array global $lang; global $pdo; - $address = $postarray['address']; - $local_part = strstr($address, '@', true); - $domain = mailbox_get_alias_details($address)['domain']; - try { - $stmt = $pdo->prepare("SELECT `goto` FROM `alias` WHERE `address` = :address"); - $stmt->execute(array(':address' => $address)); - $gotos = $stmt->fetch(PDO::FETCH_ASSOC); - } - catch(PDOException $e) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => 'MySQL: '.$e - ); - return false; - } - $goto_array = explode(',', $gotos['goto']); + if (!is_array($postarray['address'])) { + $address_array = array(); + $address_array[] = $postarray['address']; + } + else { + $address_array = $postarray['address']; + } + foreach ($address_array as $address) { + $local_part = strstr($address, '@', true); + $domain = mailbox_get_alias_details($address)['domain']; + try { + $stmt = $pdo->prepare("SELECT `goto` FROM `alias` WHERE `address` = :address"); + $stmt->execute(array(':address' => $address)); + $gotos = $stmt->fetch(PDO::FETCH_ASSOC); + } + catch(PDOException $e) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => 'MySQL: '.$e + ); + return false; + } + $goto_array = explode(',', $gotos['goto']); - if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['access_denied']) - ); - return false; - } - try { - $stmt = $pdo->prepare("DELETE FROM `alias` WHERE `address` = :address AND `address` NOT IN (SELECT `username` FROM `mailbox`)"); - $stmt->execute(array( - ':address' => $address - )); - } - catch (PDOException $e) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => 'MySQL: '.$e - ); - return false; - } + if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['access_denied']) + ); + return false; + } + try { + $stmt = $pdo->prepare("DELETE FROM `alias` WHERE `address` = :address AND `address` NOT IN (SELECT `username` FROM `mailbox`)"); + $stmt->execute(array( + ':address' => $address + )); + } + catch (PDOException $e) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => 'MySQL: '.$e + ); + return false; + } + } $_SESSION['return'] = array( 'type' => 'success', - 'msg' => sprintf($lang['success']['alias_removed'], htmlspecialchars($address)) + 'msg' => sprintf($lang['success']['alias_removed'], htmlspecialchars(implode(', ', $address_array))) ); } diff --git a/data/web/js/mailbox.js b/data/web/js/mailbox.js index b2aeb5b9..b68cf8e4 100644 --- a/data/web/js/mailbox.js +++ b/data/web/js/mailbox.js @@ -12,10 +12,10 @@ $(document).ready(function() { } while(Math.abs(bytes) >= 1024 && u < units.length - 1); return bytes.toFixed(1)+' '+units[u]; } - + $.ajax({ dataType: 'json', - url: '/api/v1/domain/all', + url: '/api/v1/get/domain/all', jsonp: false, error: function () { alert('Cannot draw domain table'); @@ -78,7 +78,7 @@ $(document).ready(function() { $.ajax({ dataType: 'json', - url: '/api/v1/mailbox/all', + url: '/api/v1/get/mailbox/all', jsonp: false, error: function () { alert('Cannot draw mailbox table'); @@ -146,7 +146,7 @@ $(document).ready(function() { $.ajax({ dataType: 'json', - url: '/api/v1/resource/all', + url: '/api/v1/get/resource/all', jsonp: false, error: function () { alert('Cannot draw resource table'); @@ -188,7 +188,7 @@ $(document).ready(function() { $.ajax({ dataType: 'json', - url: '/api/v1/alias-domain/all', + url: '/api/v1/get/alias-domain/all', jsonp: false, error: function () { alert('Cannot draw alias domain table'); @@ -228,7 +228,7 @@ $(document).ready(function() { $.ajax({ dataType: 'json', - url: '/api/v1/alias/all', + url: '/api/v1/get/alias/all', jsonp: false, error: function () { alert('Cannot draw alias table'); @@ -239,6 +239,7 @@ $(document).ready(function() { ' ' + lang.edit + '' + ' ' + lang.remove + '' + ''; + item.chkbox = ''; if (item.is_catch_all == 1) { item.address = '
Catch-All
' + item.address; } @@ -246,8 +247,9 @@ $(document).ready(function() { item.domain = "↳ " + item.domain + " (" + item.in_primary_domain + ")"; } }); - $('#alias_table').footable({ + ft_aliases = FooTable.init("#alias_table", { "columns": [ + {"name":"chkbox","title":"","style":{"maxWidth":"40px","width":"40px"},"filterable": false,"sortable": false,"type":"html"}, {"sorted": true,"name":"address","title":lang.alias,"style":{"width":"250px"}}, {"name":"goto","title":lang.target_address}, {"name":"domain","title":lang.domain,"breakpoints":"xs sm"}, @@ -269,6 +271,68 @@ $(document).ready(function() { "sorting": { "enabled": true } + }, function aliases_table_hook() { + var selected_aliases = {}; + $('input[name=sel_aliases]').change(function() { + selected_aliases = {}; + $('input[name=sel_aliases]:checked').each(function(i) { + selected_aliases[i] = ($(this).val()); + }); + }); + $("#select_all_aliases").click(function(e) { + e.preventDefault(); + var alias_chkbxs = $("input[name=sel_aliases]"); + alias_chkbxs.prop("checked", !alias_chkbxs.prop("checked")).change(); + }); + $("#activate_selected_alias").click(function(e) { + e.preventDefault(); + if (Object.keys(selected_aliases).length !== 0) { + $.ajax({ + type: "POST", + dataType: "json", + data: { "address": JSON.stringify(selected_aliases), "active": "1" }, + url: '/api/v1/edit/alias/post', + jsonp: false, + complete: function (data) { + location.reload(); + } + }); + } + }); + $("#deactivate_selected_alias").click(function(e) { + e.preventDefault(); + if (Object.keys(selected_aliases).length !== 0) { + $.ajax({ + type: "POST", + dataType: "json", + data: { "address": JSON.stringify(selected_aliases), "active": "0" }, + url: '/api/v1/edit/alias/post', + jsonp: false, + complete: function (data) { + location.reload(); + } + }); + } + }); + $("#delete_selected_alias").click(function(e) { + e.preventDefault(); + if (Object.keys(selected_aliases).length !== 0) { + $.ajax({ + type: "POST", + dataType: "json", + data: { "address": JSON.stringify(selected_aliases) }, + url: '/api/v1/delete/alias/post', + jsonp: false, + complete: function (data) { + location.reload(); + } + }); + } + }); + $("tr").on('click',function(event) { + var checkbox = $(this).find(':checkbox'); + checkbox.trigger('click'); + }); }); } }); diff --git a/data/web/json_api.php b/data/web/json_api.php index 66b46cfb..b09caa67 100644 --- a/data/web/json_api.php +++ b/data/web/json_api.php @@ -2,242 +2,307 @@ require_once 'inc/prerequisites.inc.php'; error_reporting(E_ALL); if (isset($_SESSION['mailcow_cc_role']) || isset($_SESSION['pending_mailcow_cc_username'])) { - if (isset($_GET['action']) && isset($_GET['object'])) { + if (isset($_GET['action']) && isset($_GET['cat'])) { + $category = filter_input(INPUT_GET, 'cat', FILTER_SANITIZE_STRING); $action = filter_input(INPUT_GET, 'action', FILTER_SANITIZE_STRING); - $object = filter_input(INPUT_GET, 'object', FILTER_SANITIZE_STRING); + + if (isset($_GET['object'])) { + $object = filter_input(INPUT_GET, 'object', FILTER_SANITIZE_STRING); + } + switch ($action) { - case "domain": - switch ($object) { - case "all": - $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); - } - } - else { - echo '{}'; - } - break; - - default: - $data = mailbox_get_domain_details($object); - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode(mailbox_get_domain_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - break; - } - break; - case "mailbox": - switch ($object) { - case "all": - $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); + case "get": + switch ($category) { + case "domain": + switch ($object) { + case "all": + $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); } } - } - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - } - else { - echo '{}'; + else { + echo '{}'; + } + break; + + default: + $data = mailbox_get_domain_details($object); + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode(mailbox_get_domain_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + break; } break; - - default: - $data = mailbox_get_mailbox_details($object); - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode(mailbox_get_mailbox_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - break; - - } - break; - case "resource": - switch ($object) { - case "all": - $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); + case "mailbox": + switch ($object) { + case "all": + $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); } } - } - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - } - else { - echo '{}'; + else { + echo '{}'; + } + break; + + default: + $data = mailbox_get_mailbox_details($object); + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode(mailbox_get_mailbox_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + break; + } break; - - default: - $data = mailbox_get_resource_details($object); - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode(mailbox_get_resource_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - break; - - } - break; - case "alias-domain": - switch ($object) { - case "all": - $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); + case "resource": + switch ($object) { + case "all": + $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); } } - } - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - } - else { - echo '{}'; - } - break; + else { + echo '{}'; + } + break; + + default: + $data = mailbox_get_resource_details($object); + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode(mailbox_get_resource_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + break; - default: - $data = mailbox_get_alias_domains($object); - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode(mailbox_get_alias_domains($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); } break; - } - break; - case "alias": - switch ($object) { - case "all": - $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); + case "alias-domain": + switch ($object) { + case "all": + $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); } } - } - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - } - else { - echo '{}'; - } - break; + else { + echo '{}'; + } + break; - default: - $data = mailbox_get_alias_details($object); - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode(mailbox_get_alias_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - break; - } - break; - case "domain-admin": - switch ($object) { - case "all": - $domain_admins = get_domain_admins(); - if (!empty($domain_admins)) { - foreach ($domain_admins as $domain_admin) { - $data[] = get_domain_admin_details($domain_admin); - } - if (!isset($data) || empty($data)) { - echo '{}'; - } - else { - echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - } - } - else { - echo '{}'; + default: + $data = mailbox_get_alias_domains($object); + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode(mailbox_get_alias_domains($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + break; } break; + case "alias": + switch ($object) { + case "all": + $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); + } + } + else { + echo '{}'; + } + break; - default: - $data = get_domain_admin_details($object); - if (!isset($data) || empty($data)) { - echo '{}'; + default: + $data = mailbox_get_alias_details($object); + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode(mailbox_get_alias_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + break; + } + break; + case "domain-admin": + switch ($object) { + case "all": + $domain_admins = get_domain_admins(); + if (!empty($domain_admins)) { + foreach ($domain_admins as $domain_admin) { + $data[] = get_domain_admin_details($domain_admin); + } + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + } + else { + echo '{}'; + } + break; + + default: + $data = get_domain_admin_details($object); + if (!isset($data) || empty($data)) { + echo '{}'; + } + else { + echo json_encode(get_domain_admin_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + } + break; + } + break; + case "u2f-registration": + if (($_SESSION["mailcow_cc_role"] == "admin" || $_SESSION["mailcow_cc_role"] == "domainadmin") && $_SESSION["mailcow_cc_username"] == $object) { + $data = $u2f->getRegisterData(get_u2f_registrations($object)); + list($req, $sigs) = $data; + $_SESSION['regReq'] = json_encode($req); + echo 'var req = ' . json_encode($req) . '; var sigs = ' . json_encode($sigs) . ';'; } else { - echo json_encode(get_domain_admin_details($object), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + return; + } + break; + case "u2f-authentication": + 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; + echo 'var req = ' . $reqs . ';'; + } + else { + return; + } + break; + default: + echo '{}'; + break; + } + break; + case "delete": + switch ($category) { + case "alias": + if (isset($_POST['address'])) { + $address = json_decode($_POST['address'], true); + if (is_array($address)) { + if (mailbox_delete_alias(array('address' => $address)) === false) { + echo json_encode(array( + 'type' => 'error', + 'message' => 'Deletion of item failed' + )); + exit(); + } + echo json_encode(array( + 'type' => 'success', + 'message' => 'Task completed' + )); + } + } + else { + echo json_encode(array( + 'type' => 'error', + 'message' => 'Cannot find address array in post data' + )); } break; } break; - case "u2f-registration": - if (($_SESSION["mailcow_cc_role"] == "admin" || $_SESSION["mailcow_cc_role"] == "domainadmin") && $_SESSION["mailcow_cc_username"] == $object) { - $data = $u2f->getRegisterData(get_u2f_registrations($object)); - list($req, $sigs) = $data; - $_SESSION['regReq'] = json_encode($req); - echo 'var req = ' . json_encode($req) . '; var sigs = ' . json_encode($sigs) . ';'; + case "edit": + switch ($category) { + case "alias": + if (isset($_POST['address']) && isset($_POST['active'])) { + $address = json_decode($_POST['address'], true); + if (is_array($address)) { + if (mailbox_edit_alias(array('address' => $address, 'active' => ($_POST['active'] == "1") ? $active = 1 : null)) === false) { + echo json_encode(array( + 'type' => 'error', + 'message' => 'Edit item failed' + )); + exit(); + } + echo json_encode(array( + 'type' => 'success', + 'message' => 'Task completed' + )); + } + } + else { + echo json_encode(array( + 'type' => 'error', + 'message' => 'Cannot find address array in post data' + )); + } + break; } - else { - return; - } - break; - case "u2f-authentication": - 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; - echo 'var req = ' . $reqs . ';'; - } - else { - return; - } - break; - default: - echo '{}'; break; } } -} \ No newline at end of file +} diff --git a/data/web/lang/lang.en.php b/data/web/lang/lang.en.php index 4bc48f2c..d3a615c6 100644 --- a/data/web/lang/lang.en.php +++ b/data/web/lang/lang.en.php @@ -40,7 +40,7 @@ $lang['danger']['alias_goto_identical'] = "Alias and goto address must not be id $lang['danger']['aliasd_targetd_identical'] = "Alias domain must not be equal to target domain"; $lang['danger']['maxquota_empty'] = 'Max. quota per mailbox must not be 0.'; $lang['success']['alias_added'] = "Alias address/es has/have been added"; -$lang['success']['alias_modified'] = "Changes to alias have been saved"; +$lang['success']['alias_modified'] = "Changes to alias/es %s have been saved"; $lang['success']['aliasd_modified'] = "Changes to alias domain have been saved"; $lang['success']['mailbox_modified'] = "Changes to mailbox %s have been saved"; $lang['success']['resource_modified'] = "Changes to mailbox %s have been saved"; @@ -79,7 +79,7 @@ $lang['danger']['mailbox_quota_left_exceeded'] = "Not enough space left (space l $lang['success']['mailbox_added'] = "Mailbox %s has been added"; $lang['success']['resource_added'] = "Resource %s has been added"; $lang['success']['domain_removed'] = "Domain %s has been removed"; -$lang['success']['alias_removed'] = "Alias-Adresse %s has been removed"; +$lang['success']['alias_removed'] = "Alias %s has been removed"; $lang['success']['alias_domain_removed'] = "Alias domain %s has been removed"; $lang['success']['domain_admin_removed'] = "Domain administrator %s has been removed"; $lang['success']['mailbox_removed'] = "Mailbox %s has been removed"; diff --git a/data/web/mailbox.php b/data/web/mailbox.php index fe2cd803..2640a58b 100644 --- a/data/web/mailbox.php +++ b/data/web/mailbox.php @@ -89,6 +89,14 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
+
+ Toggle all +
( + delete | + activate | + deactivate) + +