diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index d8e4e178a..94a414bd6 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -842,11 +842,11 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ); continue; } - if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { - $_SESSION['return'][] = array( - 'type' => 'danger', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), - 'msg' => 'access_denied' + if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) { + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => 'access_denied' ); continue; } @@ -2753,11 +2753,11 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ':domain' => $domain )); // save tags - foreach($tags as $index => $tag){ - if (empty($tag)) continue; - if ($index > $GLOBALS['TAGGING_LIMIT']) { - $_SESSION['return'][] = array( - 'type' => 'warning', + foreach($tags as $index => $tag){ + if (empty($tag)) continue; + if ($index > $GLOBALS['TAGGING_LIMIT']) { + $_SESSION['return'][] = array( + 'type' => 'warning', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), 'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT']) ); @@ -2769,6 +2769,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ':tag_name' => $tag, )); } + $stmt = $pdo->prepare("UPDATE `domain` SET `modified` = NOW() WHERE `domain` = :domain"); + $stmt->execute(array(':domain' => $domain)); $_SESSION['return'][] = array( 'type' => 'success', @@ -2931,17 +2933,19 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { ); break; } - $stmt = $pdo->prepare("INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)"); - $stmt->execute(array( - ':domain' => $domain, - ':tag_name' => $tag, - )); - } - - $_SESSION['return'][] = array( - 'type' => 'success', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), - 'msg' => array('domain_modified', htmlspecialchars($domain)) + $stmt = $pdo->prepare("INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)"); + $stmt->execute(array( + ':domain' => $domain, + ':tag_name' => $tag, + )); + } + $stmt = $pdo->prepare("UPDATE `domain` SET `modified` = NOW() WHERE `domain` = :domain"); + $stmt->execute(array(':domain' => $domain)); + + $_SESSION['return'][] = array( + 'type' => 'success', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => array('domain_modified', htmlspecialchars($domain)) ); } } @@ -6111,11 +6115,11 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { $tags = $_data['tags']; if (!is_array($tags)) $tags = array(); - - $wasModified = false; - foreach ($domains as $domain) { - if (!is_valid_domain_name($domain)) { - $_SESSION['return'][] = array( + $modifiedDomains = array(); + $wasModified = false; + foreach ($domains as $domain) { + if (!is_valid_domain_name($domain)) { + $_SESSION['return'][] = array( 'type' => 'danger', 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), 'msg' => 'domain_invalid' @@ -6128,27 +6132,44 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), 'msg' => 'access_denied' ); - return false; + return false; } - foreach($tags as $tag){ - // delete tag - $wasModified = true; - $stmt = $pdo->prepare("DELETE FROM `tags_domain` WHERE `domain` = :domain AND `tag_name` = :tag_name"); - $stmt->execute(array( - ':domain' => $domain, - ':tag_name' => $tag, - )); - } - } - - if (!$wasModified) return false; - $_SESSION['return'][] = array( - 'type' => 'success', - 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), - 'msg' => array('domain_modified', $domain) - ); - break; + $domainModified = false; + foreach($tags as $tag){ + // delete tag + $domainModified = true; + $wasModified = true; + $stmt = $pdo->prepare("DELETE FROM `tags_domain` WHERE `domain` = :domain AND `tag_name` = :tag_name"); + $stmt->execute(array( + ':domain' => $domain, + ':tag_name' => $tag, + )); + } + if ($domainModified) { + $modifiedDomains[] = $domain; + } + } + + if (!$wasModified) return false; + if (!empty($modifiedDomains)) { + $placeholders = array(); + $params = array(); + foreach ($modifiedDomains as $idx => $modifiedDomain) { + $placeholders[] = ":domain".$idx; + $params[":domain".$idx] = $modifiedDomain; + } + $stmt = $pdo->prepare("UPDATE `domain` SET `modified` = NOW() WHERE `domain` IN (".implode(',', $placeholders).")"); + $stmt->execute($params); + $modifiedDomains = array_map('htmlspecialchars', $modifiedDomains); + } + $modifiedDomains = (empty($modifiedDomains)) ? array('-') : $modifiedDomains; + $_SESSION['return'][] = array( + 'type' => 'success', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => array('domain_modified', implode(', ', $modifiedDomains)) + ); + break; case 'tags_mailbox': if (!is_array($_data['username'])) { $usernames = array();