From c8fec24da30162c1fe56bcab4042402f05f2be03 Mon Sep 17 00:00:00 2001 From: FreddleSpl0it Date: Tue, 16 May 2023 11:16:56 +0200 Subject: [PATCH] [Web] add "edit mailbox_from_template" function --- data/web/inc/functions.mailbox.inc.php | 60 ++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php index b9a98043b..afa952e68 100644 --- a/data/web/inc/functions.mailbox.inc.php +++ b/data/web/inc/functions.mailbox.inc.php @@ -3196,6 +3196,66 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) { } return true; break; + case 'mailbox_from_template': + $stmt = $pdo->prepare("SELECT * FROM `templates` + WHERE `template` = :template AND type = 'mailbox'"); + $stmt->execute(array( + ":template" => $_data['template'] + )); + $mbox_template_data = $stmt->fetch(PDO::FETCH_ASSOC); + if (empty($mbox_template_data)){ + $_SESSION['return'][] = array( + 'type' => 'danger', + 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr), + 'msg' => 'template_missing' + ); + return false; + } + + $mbox_template_data = json_decode($mbox_template_data["attributes"], true); + $quarantine_attributes = array('username' => $_data['username']); + $tls_attributes = array('username' => $_data['username']); + $ratelimit_attributes = array('object' => $_data['username']); + $acl_attributes = array('username' => $_data['username'], 'user_acl' => array()); + $mailbox_attributes = array('username' => $_data['username']); + foreach ($mbox_template_data as $key => $value){ + switch (true) { + case (strpos($key, 'quarantine_') === 0): + $quarantine_attributes[$key] = $value; + break; + case (strpos($key, 'tls_') === 0): + if ($value == null) + $value = 0; + $tls_attributes[$key] = $value; + break; + case (strpos($key, 'rl_') === 0): + $ratelimit_attributes[$key] = $value; + break; + case (strpos($key, 'acl_') === 0 && $value != 0): + array_push($acl_attributes['user_acl'], str_replace('acl_' , '', $key)); + break; + default: + $mailbox_attributes[$key] = $value; + break; + } + } + + $mailbox_attributes['quota'] = intval($mailbox_attributes['quota'] / 1048576); + $result = mailbox('edit', 'mailbox', $mailbox_attributes); + if ($result === false) return $result; + $result = mailbox('edit', 'tls_policy', $tls_attributes); + if ($result === false) return $result; + $result = mailbox('edit', 'quarantine_notification', $quarantine_attributes); + if ($result === false) return $result; + $result = mailbox('edit', 'quarantine_category', $quarantine_attributes); + if ($result === false) return $result; + $result = ratelimit('edit', 'mailbox', $ratelimit_attributes); + if ($result === false) return $result; + $result = acl('edit', 'user', $acl_attributes); + if ($result === false) return $result; + + return true; + break; case 'mailbox_templates': if ($_SESSION['mailcow_cc_role'] != "admin") { $_SESSION['return'][] = array(