From 2cd0b56b143b8a2741488ae1735bf6d74253247f Mon Sep 17 00:00:00 2001
From: andryyy <andre.peters@debinux.de>
Date: Mon, 9 Aug 2021 08:28:22 +0200
Subject: [PATCH] [Web] Various PHP 8 fixes, partly fixes #4219

---
 data/web/edit.php                         | 766 +++++++++++-----------
 data/web/inc/ajax/dns_diagnostics.php     |   6 +-
 data/web/inc/functions.dkim.inc.php       |  12 +-
 data/web/inc/functions.fail2ban.inc.php   |   4 +-
 data/web/inc/functions.fwdhost.inc.php    |   8 +-
 data/web/inc/functions.inc.php            |   8 +-
 data/web/inc/functions.mailbox.inc.php    |  42 +-
 data/web/inc/functions.oauth2.inc.php     |  26 +-
 data/web/inc/functions.policy.inc.php     |  12 +-
 data/web/inc/functions.pushover.inc.php   |   4 +-
 data/web/inc/functions.transports.inc.php |  18 +-
 data/web/js/site/mailbox.js               |  78 +--
 data/web/lang/lang.de.json                |   2 +
 data/web/lang/lang.en.json                |  14 +-
 data/web/mailbox.php                      |  30 +-
 15 files changed, 524 insertions(+), 506 deletions(-)

diff --git a/data/web/edit.php b/data/web/edit.php
index ba582292..30d584f3 100644
--- a/data/web/edit.php
+++ b/data/web/edit.php
@@ -2,19 +2,19 @@
 require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
 $AuthUsers = array("admin", "domainadmin", "user");
 if (!isset($_SESSION['mailcow_cc_role']) OR !in_array($_SESSION['mailcow_cc_role'], $AuthUsers)) {
-	header('Location: /');
-	exit();
+  header('Location: /');
+  exit();
 }
 require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
 ?>
 <div class="container">
-	<div class="row">
-		<div class="col-md-12">
-			<div class="panel panel-default">
-				<div class="panel-heading">
-					<h3 class="panel-title"><?=$lang['edit']['title'];?></h3>
-				</div>
-				<div class="panel-body">
+  <div class="row">
+    <div class="col-md-12">
+      <div class="panel panel-default">
+        <div class="panel-heading">
+          <h3 class="panel-title"><?=$lang['edit']['title'];?></h3>
+        </div>
+        <div class="panel-body">
 <?php
 if (isset($_SESSION['mailcow_cc_role'])) {
   if ($_SESSION['mailcow_cc_role'] == "admin"  || $_SESSION['mailcow_cc_role'] == "domainadmin") {
@@ -460,7 +460,7 @@ if (isset($_SESSION['mailcow_cc_role'])) {
                     <div class="form-group">
                       <label class="control-label col-sm-2" for="script_data"><?=$lang['edit']['target_address'];?>:</label>
                       <div class="col-sm-10">
-                        <textarea spellcheck="false" autocorrect="off" autocapitalize="none" class="form-control" rows="10" id="bcc_rcpt" name="bcc_rcpt"><?=implode(PHP_EOL, $quota_notification_bcc['bcc_rcpts']);?></textarea>
+                        <textarea spellcheck="false" autocorrect="off" autocapitalize="none" class="form-control" rows="10" id="bcc_rcpt" name="bcc_rcpt"><?=implode(PHP_EOL, (array)$quota_notification_bcc['bcc_rcpts']);?></textarea>
                       </div>
                     </div>
                     <div class="form-group">
@@ -623,385 +623,399 @@ if (isset($_SESSION['mailcow_cc_role'])) {
       $rlyhosts = relayhost('get');
       if (!empty($result)) {
         ?>
-        <h4><?=$lang['edit']['mailbox'];?></h4>
-        <form class="form-horizontal" data-id="editmailbox" role="form" method="post">
-          <input type="hidden" value="default" name="sender_acl">
-          <input type="hidden" value="0" name="force_pw_update">
-          <input type="hidden" value="0" name="sogo_access">
-          <input type="hidden" value="0" name="protocol_access">
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="name"><?=$lang['edit']['full_name'];?></label>
-            <div class="col-sm-10">
-            <input type="text" class="form-control" name="name" value="<?=htmlspecialchars($result['name'], ENT_QUOTES, 'UTF-8');?>">
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="quota"><?=$lang['edit']['quota_mb'];?>
-              <br><span id="quotaBadge" class="badge">max. <?=intval($result['max_new_quota'] / 1048576)?> MiB</span>
-            </label>
-            <div class="col-sm-10">
-              <input type="number" name="quota" style="width:100%" min="0" max="<?=intval($result['max_new_quota'] / 1048576);?>" value="<?=intval($result['quota']) / 1048576;?>" class="form-control">
-              <small class="help-block">0 = ∞</small>
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="sender_acl"><?=$lang['edit']['sender_acl'];?></label>
-            <div class="col-sm-10">
-              <select data-live-search="true" data-width="100%" style="width:100%" id="editSelectSenderACL" name="sender_acl" size="10" multiple>
-              <?php
-              $sender_acl_handles = mailbox('get', 'sender_acl_handles', $mailbox);
-
-              foreach ($sender_acl_handles['sender_acl_domains']['ro'] as $domain):
-                ?>
-                <option data-subtext="Admin" value="<?=htmlspecialchars($domain);?>" disabled selected><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], $domain));?></option>
-                <?php
-              endforeach;
-
-              foreach ($sender_acl_handles['sender_acl_addresses']['ro'] as $alias):
-                ?>
-              <option data-subtext="Admin" disabled selected><?=htmlspecialchars($alias);?></option>
-                <?php
-              endforeach;
-
-              foreach ($sender_acl_handles['fixed_sender_aliases'] as $alias):
-                ?>
-                <option data-subtext="Alias" disabled selected><?=htmlspecialchars($alias);?></option>
-                <?php
-              endforeach;
-
-              foreach ($sender_acl_handles['sender_acl_domains']['rw'] as $domain):
-                ?>
-                <option value="<?=htmlspecialchars($domain);?>" selected><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], $domain));?></option>
-                <?php
-              endforeach;
-
-              foreach ($sender_acl_handles['sender_acl_domains']['selectable'] as $domain):
-                ?>
-                <option value="<?=htmlspecialchars($domain);?>"><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], $domain));?></option>
-                <?php
-              endforeach;
-
-              foreach ($sender_acl_handles['sender_acl_addresses']['rw'] as $address):
-                ?>
-                  <option selected><?=htmlspecialchars($address);?></option>
-                <?php
-              endforeach;
-
-              foreach ($sender_acl_handles['sender_acl_addresses']['selectable'] as $address):
-                ?>
-                  <option><?=htmlspecialchars($address);?></option>
-                <?php
-              endforeach;
-
-              // Generated here, but used in extended_sender_acl
-              if (!empty($sender_acl_handles['external_sender_aliases'])) {
-                $ext_sender_acl = implode(', ', $sender_acl_handles['external_sender_aliases']);
-              }
-              else {
-                $ext_sender_acl = '';
-              }
-
-              ?>
-              </select>
-              <div id="sender_acl_disabled"><i class="bi bi-shield-exclamation"></i> <?=$lang['edit']['sender_acl_disabled'];?></div>
-              <small class="help-block"><?=$lang['edit']['sender_acl_info'];?></small>
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="relayhost"><?=$lang['edit']['relayhost'];?></label>
-            <div class="col-sm-10">
-              <select data-acl="<?=$_SESSION['acl']['mailbox_relayhost'];?>" data-live-search="true" id="relayhost" name="relayhost" class="form-control space20">
-                <?php
-                foreach ($rlyhosts as $rlyhost) {
-                ?>
-                    <option style="<?=($rlyhost['active'] == 1) ? '' : 'background: #ff4136; color: #fff';?>" value="<?=$rlyhost['id'];?>" <?=($result['attributes']['relayhost'] == $rlyhost['id']) ? 'selected' : null;?>>ID <?=$rlyhost['id'];?>: <?=$rlyhost['hostname'];?> (<?=$rlyhost['username'];?>)</option>
-                <?php
-                }
-                ?>
-                <option value="" <?=($result['attributes']['relayhost'] == "0" || empty($result['attributes']['relayhost'])) ? 'selected' : null;?>><?=$lang['edit']['none_inherit'];?></option>
-              </select>
-              <p class="visible-xs" style="margin: 0;padding: 0">&nbsp;</p>
-              <small class="help-block"><?=$lang['edit']['mailbox_relayhost_info'];?></small>
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2"><?=$lang['user']['quarantine_notification'];?></label>
-            <div class="col-sm-10">
-            <div class="btn-group" data-acl="<?=$_SESSION['acl']['quarantine_notification'];?>">
-              <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "never") ? "active" : null;?>"
-                data-action="edit_selected"
-                data-item="<?= htmlentities($mailbox); ?>"
-                data-id="quarantine_notification"
-                data-api-url='edit/quarantine_notification'
-                data-api-attr='{"quarantine_notification":"never"}'><?=$lang['user']['never'];?></button>
-              <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "hourly") ? "active" : null;?>"
-                data-action="edit_selected"
-                data-item="<?= htmlentities($mailbox); ?>"
-                data-id="quarantine_notification"
-                data-api-url='edit/quarantine_notification'
-                data-api-attr='{"quarantine_notification":"hourly"}'><?=$lang['user']['hourly'];?></button>
-              <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "daily") ? "active" : null;?>"
-                data-action="edit_selected"
-                data-item="<?= htmlentities($mailbox); ?>"
-                data-id="quarantine_notification"
-                data-api-url='edit/quarantine_notification'
-                data-api-attr='{"quarantine_notification":"daily"}'><?=$lang['user']['daily'];?></button>
-              <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "weekly") ? "active" : null;?>"
-                data-action="edit_selected"
-                data-item="<?= htmlentities($mailbox); ?>"
-                data-id="quarantine_notification"
-                data-api-url='edit/quarantine_notification'
-                data-api-attr='{"quarantine_notification":"weekly"}'><?=$lang['user']['weekly'];?></button>
-                <div class="clearfix visible-xs"></div>
-            </div>
-            <p class="help-block"><small><?=$lang['user']['quarantine_notification_info'];?></small></p>
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2"><?=$lang['user']['quarantine_category'];?></label>
-            <div class="col-sm-10">
-            <div class="btn-group" data-acl="<?=$_SESSION['acl']['quarantine_category'];?>">
-              <button type="button" class="btn btn-sm btn-xs-third visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_category == "reject") ? "active" : null;?>"
-                data-action="edit_selected"
-                data-item="<?= htmlentities($mailbox); ?>"
-                data-id="quarantine_category"
-                data-api-url='edit/quarantine_category'
-                data-api-attr='{"quarantine_category":"reject"}'><?=$lang['user']['q_reject'];?></button>
-              <button type="button" class="btn btn-sm btn-xs-third visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_category == "add_header") ? "active" : null;?>"
-                data-action="edit_selected"
-                data-item="<?= htmlentities($mailbox); ?>"
-                data-id="quarantine_category"
-                data-api-url='edit/quarantine_category'
-                data-api-attr='{"quarantine_category":"add_header"}'><?=$lang['user']['q_add_header'];?></button>
-              <button type="button" class="btn btn-sm btn-xs-third visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_category == "all") ? "active" : null;?>"
-                data-action="edit_selected"
-                data-item="<?= htmlentities($mailbox); ?>"
-                data-id="quarantine_category"
-                data-api-url='edit/quarantine_category'
-                data-api-attr='{"quarantine_category":"all"}'><?=$lang['user']['q_all'];?></button>
-                <div class="clearfix visible-xs"></div>
-            </div>
-            <p class="help-block"><small><?=$lang['user']['quarantine_category_info'];?></small></p>
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="sender_acl"><?=$lang['user']['tls_policy'];?></label>
-            <div class="col-sm-10">
-              <div class="btn-group" data-acl="<?=$_SESSION['acl']['tls_policy'];?>">
-                <button type="button" class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($get_tls_policy['tls_enforce_in'] == "1") ? "active" : null;?>"
-                  data-action="edit_selected"
-                  data-item="<?= htmlentities($mailbox); ?>"
-                  data-id="tls_policy"
-                  data-api-url='edit/tls_policy'
-                  data-api-attr='{"tls_enforce_in":<?=($get_tls_policy['tls_enforce_in'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_in'];?></button>
-                <button type="button" class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($get_tls_policy['tls_enforce_out'] == "1") ? "active" : null;?>"
-                  data-action="edit_selected"
-                  data-item="<?= htmlentities($mailbox); ?>"
-                  data-id="tls_policy"
-                  data-api-url='edit/tls_policy'
-                  data-api-attr='{"tls_enforce_out":<?=($get_tls_policy['tls_enforce_out'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_out'];?></button>
-                  <div class="clearfix visible-xs"></div>
-              </div>
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="password"><?=$lang['edit']['password'];?> (<a href="#" class="generate_password"><?=$lang['edit']['generate'];?></a>)</label>
-            <div class="col-sm-10">
-            <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="<?=$lang['edit']['unchanged_if_empty'];?>" autocomplete="new-password">
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="password2"><?=$lang['edit']['password_repeat'];?></label>
-            <div class="col-sm-10">
-            <input type="password" data-pwgen-field="true" class="form-control" name="password2" autocomplete="new-password">
-            </div>
-          </div>
-          <div data-acl="<?=$_SESSION['acl']['extend_sender_acl'];?>" class="form-group">
-            <label class="control-label col-sm-2" for="extended_sender_acl"><?=$lang['edit']['extended_sender_acl'];?></label>
-            <div class="col-sm-10">
-            <input type="text" class="form-control" name="extended_sender_acl" value="<?=empty($ext_sender_acl) ? '' : $ext_sender_acl; ?>" placeholder="user1@example.com, user2@example.org, @example.com, ...">
-            <small class="help-block"><?=$lang['edit']['extended_sender_acl_info'];?></small>
-            </div>
-          </div>
-          <div class="form-group">
-            <label class="control-label col-sm-2" for="protocol_access"><?=$lang['edit']['allowed_protocols'];?></label>
-            <div class="col-sm-10">
-            <select data-acl="<?=$_SESSION['acl']['protocol_access'];?>" name="protocol_access" multiple class="form-control">
-              <option value="imap" <?=($result['attributes']['imap_access']=="1") ? 'selected' : null;?>>IMAP</option>
-              <option value="pop3" <?=($result['attributes']['pop3_access']=="1") ? 'selected' : null;?>>POP3</option>
-              <option value="smtp" <?=($result['attributes']['smtp_access']=="1") ? 'selected' : null;?>>SMTP</option>
-            </select>
-            </div>
-          </div>
-          <div hidden data-acl="<?=$_SESSION['acl']['smtp_ip_access'];?>" class="form-group">
-            <label class="control-label col-sm-2" for="allow_from_smtp"><?=$lang['edit']['allow_from_smtp'];?></label>
-            <div class="col-sm-10">
-            <input type="text" class="form-control" name="allow_from_smtp" value="<?=empty($allow_from_smtp) ? '' : $allow_from_smtp; ?>" placeholder="1.1.1.1, 10.2.0.0/24, ...">
-            <small class="help-block"><?=$lang['edit']['allow_from_smtp_info'];?></small>
-            </div>
-          </div>
-          <hr>
-          <div class="form-group">
-            <div class="col-sm-offset-2 col-sm-10">
-            <select name="active" class="form-control">
-              <option value="1" <?=($result['active']=="1") ? 'selected' : null;?>><?=$lang['edit']['active'];?></option>
-              <option value="2" <?=($result['active']=="2") ? 'selected' : null;?>><?=$lang['edit']['disable_login'];?></option>
-              <option value="0" <?=($result['active']=="0") ? 'selected' : null;?>><?=$lang['edit']['inactive'];?></option>
-            </select>
-            </div>
-          </div>
-          <div class="form-group">
-            <div class="col-sm-offset-2 col-sm-10">
-              <div class="checkbox">
-              <label><input type="checkbox" value="1" name="force_pw_update" <?=($result['attributes']['force_pw_update']=="1") ? "checked" : null;?>> <?=$lang['edit']['force_pw_update'];?></label>
-              <small class="help-block"><?=sprintf($lang['edit']['force_pw_update_info'], $UI_TEXTS['main_name']);?></small>
-              </div>
-            </div>
-          </div>
-          <?php if (getenv('SKIP_SOGO') != "y") { ?>
-          <div data-acl="<?=$_SESSION['acl']['sogo_access'];?>" class="form-group">
-            <div class="col-sm-offset-2 col-sm-10">
-              <div class="checkbox">
-              <label><input type="checkbox" value="1" name="sogo_access" <?=($result['attributes']['sogo_access']=="1") ? "checked" : null;?>> <?=$lang['edit']['sogo_access'];?></label>
-              <small class="help-block"><?=$lang['edit']['sogo_access_info'];?></small>
-              </div>
-            </div>
-          </div>
-          <?php } ?>
-          <div class="form-group">
-            <div class="col-sm-offset-2 col-sm-10">
-              <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="edit_selected" data-id="editmailbox" data-item="<?=htmlspecialchars($result['username']);?>" data-api-url='edit/mailbox' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
-            </div>
-          </div>
-        </form>
+        <ul class="nav nav-tabs responsive-tabs" role="tablist">
+          <li class="active"><a data-toggle="tab" href="#medit"><?=$lang['edit']['mailbox'];?></a></li>
+          <li><a data-toggle="tab" href="#mpushover"><?=$lang['edit']['pushover'];?></a></li>
+          <li><a data-toggle="tab" href="#macl"><?=$lang['edit']['acl'];?></a></li>
+          <li><a data-toggle="tab" href="#mrl"><?=$lang['edit']['ratelimit'];?></a></li>
+        </ul>
         <hr>
-        <form data-id="pushover" class="form well" method="post">
-          <input type="hidden" value="0" name="evaluate_x_prio">
-          <input type="hidden" value="0" name="only_x_prio">
-          <input type="hidden" value="0" name="active">
-          <div class="row">
-            <div class="col-sm-1">
-              <p class="help-block"><a href="https://pushover.net" target="_blank"><img src="data:image/png;base64,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" class="img img-fluid"></a></p>
-            </div>
-            <div class="col-sm-10">
-              <p class="help-block"><?=sprintf($lang['edit']['pushover_info'], $mailbox);?></p>
-              <p class="help-block"><?=$lang['edit']['pushover_vars'];?>: <code>{SUBJECT}</code>, <code>{SENDER}</code></p>
+        <div class="tab-content">
+          <div id="medit" class="tab-pane in active">
+            <form class="form-horizontal" data-id="editmailbox" role="form" method="post">
+              <input type="hidden" value="default" name="sender_acl">
+              <input type="hidden" value="0" name="force_pw_update">
+              <input type="hidden" value="0" name="sogo_access">
+              <input type="hidden" value="0" name="protocol_access">
               <div class="form-group">
-                <div class="row">
-                  <div class="col-sm-6">
-                    <div class="form-group">
-                      <label for="token">API Token/Key (Application)</label>
-                      <input type="text" class="form-control" name="token" maxlength="30" value="<?=$pushover_data['token'];?>" required>
-                    </div>
+                <label class="control-label col-sm-2" for="name"><?=$lang['edit']['full_name'];?></label>
+                <div class="col-sm-10">
+                <input type="text" class="form-control" name="name" value="<?=htmlspecialchars($result['name'], ENT_QUOTES, 'UTF-8');?>">
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2" for="quota"><?=$lang['edit']['quota_mb'];?>
+                  <br><span id="quotaBadge" class="badge">max. <?=intval($result['max_new_quota'] / 1048576)?> MiB</span>
+                </label>
+                <div class="col-sm-10">
+                  <input type="number" name="quota" style="width:100%" min="0" max="<?=intval($result['max_new_quota'] / 1048576);?>" value="<?=intval($result['quota']) / 1048576;?>" class="form-control">
+                  <small class="help-block">0 = ∞</small>
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2" for="sender_acl"><?=$lang['edit']['sender_acl'];?></label>
+                <div class="col-sm-10">
+                  <select data-live-search="true" data-width="100%" style="width:100%" id="editSelectSenderACL" name="sender_acl" size="10" multiple>
+                  <?php
+                  $sender_acl_handles = mailbox('get', 'sender_acl_handles', $mailbox);
+
+                  foreach ($sender_acl_handles['sender_acl_domains']['ro'] as $domain):
+                    ?>
+                    <option data-subtext="Admin" value="<?=htmlspecialchars($domain);?>" disabled selected><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], $domain));?></option>
+                    <?php
+                  endforeach;
+
+                  foreach ($sender_acl_handles['sender_acl_addresses']['ro'] as $alias):
+                    ?>
+                  <option data-subtext="Admin" disabled selected><?=htmlspecialchars($alias);?></option>
+                    <?php
+                  endforeach;
+
+                  foreach ($sender_acl_handles['fixed_sender_aliases'] as $alias):
+                    ?>
+                    <option data-subtext="Alias" disabled selected><?=htmlspecialchars($alias);?></option>
+                    <?php
+                  endforeach;
+
+                  foreach ($sender_acl_handles['sender_acl_domains']['rw'] as $domain):
+                    ?>
+                    <option value="<?=htmlspecialchars($domain);?>" selected><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], $domain));?></option>
+                    <?php
+                  endforeach;
+
+                  foreach ($sender_acl_handles['sender_acl_domains']['selectable'] as $domain):
+                    ?>
+                    <option value="<?=htmlspecialchars($domain);?>"><?=htmlspecialchars(sprintf($lang['edit']['dont_check_sender_acl'], $domain));?></option>
+                    <?php
+                  endforeach;
+
+                  foreach ($sender_acl_handles['sender_acl_addresses']['rw'] as $address):
+                    ?>
+                      <option selected><?=htmlspecialchars($address);?></option>
+                    <?php
+                  endforeach;
+
+                  foreach ($sender_acl_handles['sender_acl_addresses']['selectable'] as $address):
+                    ?>
+                      <option><?=htmlspecialchars($address);?></option>
+                    <?php
+                  endforeach;
+
+                  // Generated here, but used in extended_sender_acl
+                  if (!empty($sender_acl_handles['external_sender_aliases'])) {
+                    $ext_sender_acl = implode(', ', $sender_acl_handles['external_sender_aliases']);
+                  }
+                  else {
+                    $ext_sender_acl = '';
+                  }
+
+                  ?>
+                  </select>
+                  <div id="sender_acl_disabled"><i class="bi bi-shield-exclamation"></i> <?=$lang['edit']['sender_acl_disabled'];?></div>
+                  <small class="help-block"><?=$lang['edit']['sender_acl_info'];?></small>
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2" for="relayhost"><?=$lang['edit']['relayhost'];?></label>
+                <div class="col-sm-10">
+                  <select data-acl="<?=$_SESSION['acl']['mailbox_relayhost'];?>" data-live-search="true" id="relayhost" name="relayhost" class="form-control space20">
+                    <?php
+                    foreach ($rlyhosts as $rlyhost) {
+                    ?>
+                        <option style="<?=($rlyhost['active'] == 1) ? '' : 'background: #ff4136; color: #fff';?>" value="<?=$rlyhost['id'];?>" <?=($result['attributes']['relayhost'] == $rlyhost['id']) ? 'selected' : null;?>>ID <?=$rlyhost['id'];?>: <?=$rlyhost['hostname'];?> (<?=$rlyhost['username'];?>)</option>
+                    <?php
+                    }
+                    ?>
+                    <option value="" <?=($result['attributes']['relayhost'] == "0" || empty($result['attributes']['relayhost'])) ? 'selected' : null;?>><?=$lang['edit']['none_inherit'];?></option>
+                  </select>
+                  <p class="visible-xs" style="margin: 0;padding: 0">&nbsp;</p>
+                  <small class="help-block"><?=$lang['edit']['mailbox_relayhost_info'];?></small>
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2"><?=$lang['user']['quarantine_notification'];?></label>
+                <div class="col-sm-10">
+                <div class="btn-group" data-acl="<?=$_SESSION['acl']['quarantine_notification'];?>">
+                  <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "never") ? "active" : null;?>"
+                    data-action="edit_selected"
+                    data-item="<?= htmlentities($mailbox); ?>"
+                    data-id="quarantine_notification"
+                    data-api-url='edit/quarantine_notification'
+                    data-api-attr='{"quarantine_notification":"never"}'><?=$lang['user']['never'];?></button>
+                  <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "hourly") ? "active" : null;?>"
+                    data-action="edit_selected"
+                    data-item="<?= htmlentities($mailbox); ?>"
+                    data-id="quarantine_notification"
+                    data-api-url='edit/quarantine_notification'
+                    data-api-attr='{"quarantine_notification":"hourly"}'><?=$lang['user']['hourly'];?></button>
+                  <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "daily") ? "active" : null;?>"
+                    data-action="edit_selected"
+                    data-item="<?= htmlentities($mailbox); ?>"
+                    data-id="quarantine_notification"
+                    data-api-url='edit/quarantine_notification'
+                    data-api-attr='{"quarantine_notification":"daily"}'><?=$lang['user']['daily'];?></button>
+                  <button type="button" class="btn btn-sm btn-xs-quart visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_notification == "weekly") ? "active" : null;?>"
+                    data-action="edit_selected"
+                    data-item="<?= htmlentities($mailbox); ?>"
+                    data-id="quarantine_notification"
+                    data-api-url='edit/quarantine_notification'
+                    data-api-attr='{"quarantine_notification":"weekly"}'><?=$lang['user']['weekly'];?></button>
+                    <div class="clearfix visible-xs"></div>
+                </div>
+                <p class="help-block"><small><?=$lang['user']['quarantine_notification_info'];?></small></p>
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2"><?=$lang['user']['quarantine_category'];?></label>
+                <div class="col-sm-10">
+                <div class="btn-group" data-acl="<?=$_SESSION['acl']['quarantine_category'];?>">
+                  <button type="button" class="btn btn-sm btn-xs-third visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_category == "reject") ? "active" : null;?>"
+                    data-action="edit_selected"
+                    data-item="<?= htmlentities($mailbox); ?>"
+                    data-id="quarantine_category"
+                    data-api-url='edit/quarantine_category'
+                    data-api-attr='{"quarantine_category":"reject"}'><?=$lang['user']['q_reject'];?></button>
+                  <button type="button" class="btn btn-sm btn-xs-third visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_category == "add_header") ? "active" : null;?>"
+                    data-action="edit_selected"
+                    data-item="<?= htmlentities($mailbox); ?>"
+                    data-id="quarantine_category"
+                    data-api-url='edit/quarantine_category'
+                    data-api-attr='{"quarantine_category":"add_header"}'><?=$lang['user']['q_add_header'];?></button>
+                  <button type="button" class="btn btn-sm btn-xs-third visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($quarantine_category == "all") ? "active" : null;?>"
+                    data-action="edit_selected"
+                    data-item="<?= htmlentities($mailbox); ?>"
+                    data-id="quarantine_category"
+                    data-api-url='edit/quarantine_category'
+                    data-api-attr='{"quarantine_category":"all"}'><?=$lang['user']['q_all'];?></button>
+                    <div class="clearfix visible-xs"></div>
+                </div>
+                <p class="help-block"><small><?=$lang['user']['quarantine_category_info'];?></small></p>
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2" for="sender_acl"><?=$lang['user']['tls_policy'];?></label>
+                <div class="col-sm-10">
+                  <div class="btn-group" data-acl="<?=$_SESSION['acl']['tls_policy'];?>">
+                    <button type="button" class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($get_tls_policy['tls_enforce_in'] == "1") ? "active" : null;?>"
+                      data-action="edit_selected"
+                      data-item="<?= htmlentities($mailbox); ?>"
+                      data-id="tls_policy"
+                      data-api-url='edit/tls_policy'
+                      data-api-attr='{"tls_enforce_in":<?=($get_tls_policy['tls_enforce_in'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_in'];?></button>
+                    <button type="button" class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default <?=($get_tls_policy['tls_enforce_out'] == "1") ? "active" : null;?>"
+                      data-action="edit_selected"
+                      data-item="<?= htmlentities($mailbox); ?>"
+                      data-id="tls_policy"
+                      data-api-url='edit/tls_policy'
+                      data-api-attr='{"tls_enforce_out":<?=($get_tls_policy['tls_enforce_out'] == "1") ? "0" : "1";?>}'><?=$lang['user']['tls_enforce_out'];?></button>
+                      <div class="clearfix visible-xs"></div>
                   </div>
-                  <div class="col-sm-6">
-                    <div class="form-group">
-                      <label for="key">User/Group Key</label>
-                      <input type="text" class="form-control" name="key" maxlength="30" value="<?=$pushover_data['key'];?>" required>
-                    </div>
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2" for="password"><?=$lang['edit']['password'];?> (<a href="#" class="generate_password"><?=$lang['edit']['generate'];?></a>)</label>
+                <div class="col-sm-10">
+                <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="password" placeholder="<?=$lang['edit']['unchanged_if_empty'];?>" autocomplete="new-password">
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2" for="password2"><?=$lang['edit']['password_repeat'];?></label>
+                <div class="col-sm-10">
+                <input type="password" data-pwgen-field="true" class="form-control" name="password2" autocomplete="new-password">
+                </div>
+              </div>
+              <div data-acl="<?=$_SESSION['acl']['extend_sender_acl'];?>" class="form-group">
+                <label class="control-label col-sm-2" for="extended_sender_acl"><?=$lang['edit']['extended_sender_acl'];?></label>
+                <div class="col-sm-10">
+                <input type="text" class="form-control" name="extended_sender_acl" value="<?=empty($ext_sender_acl) ? '' : $ext_sender_acl; ?>" placeholder="user1@example.com, user2@example.org, @example.com, ...">
+                <small class="help-block"><?=$lang['edit']['extended_sender_acl_info'];?></small>
+                </div>
+              </div>
+              <div class="form-group">
+                <label class="control-label col-sm-2" for="protocol_access"><?=$lang['edit']['allowed_protocols'];?></label>
+                <div class="col-sm-10">
+                <select data-acl="<?=$_SESSION['acl']['protocol_access'];?>" name="protocol_access" multiple class="form-control">
+                  <option value="imap" <?=($result['attributes']['imap_access']=="1") ? 'selected' : null;?>>IMAP</option>
+                  <option value="pop3" <?=($result['attributes']['pop3_access']=="1") ? 'selected' : null;?>>POP3</option>
+                  <option value="smtp" <?=($result['attributes']['smtp_access']=="1") ? 'selected' : null;?>>SMTP</option>
+                </select>
+                </div>
+              </div>
+              <div hidden data-acl="<?=$_SESSION['acl']['smtp_ip_access'];?>" class="form-group">
+                <label class="control-label col-sm-2" for="allow_from_smtp"><?=$lang['edit']['allow_from_smtp'];?></label>
+                <div class="col-sm-10">
+                <input type="text" class="form-control" name="allow_from_smtp" value="<?=empty($allow_from_smtp) ? '' : $allow_from_smtp; ?>" placeholder="1.1.1.1, 10.2.0.0/24, ...">
+                <small class="help-block"><?=$lang['edit']['allow_from_smtp_info'];?></small>
+                </div>
+              </div>
+              <hr>
+              <div class="form-group">
+                <div class="col-sm-offset-2 col-sm-10">
+                <select name="active" class="form-control">
+                  <option value="1" <?=($result['active']=="1") ? 'selected' : null;?>><?=$lang['edit']['active'];?></option>
+                  <option value="2" <?=($result['active']=="2") ? 'selected' : null;?>><?=$lang['edit']['disable_login'];?></option>
+                  <option value="0" <?=($result['active']=="0") ? 'selected' : null;?>><?=$lang['edit']['inactive'];?></option>
+                </select>
+                </div>
+              </div>
+              <div class="form-group">
+                <div class="col-sm-offset-2 col-sm-10">
+                  <div class="checkbox">
+                  <label><input type="checkbox" value="1" name="force_pw_update" <?=($result['attributes']['force_pw_update']=="1") ? "checked" : null;?>> <?=$lang['edit']['force_pw_update'];?></label>
+                  <small class="help-block"><?=sprintf($lang['edit']['force_pw_update_info'], $UI_TEXTS['main_name']);?></small>
                   </div>
-                  <div class="col-sm-6">
-                    <div class="form-group">
-                      <label for="title"><?=$lang['edit']['pushover_title'];?></label>
-                      <input type="text" class="form-control" name="title" value="<?=$pushover_data['title'];?>" placeholder="Mail">
-                    </div>
+                </div>
+              </div>
+              <?php if (getenv('SKIP_SOGO') != "y") { ?>
+              <div data-acl="<?=$_SESSION['acl']['sogo_access'];?>" class="form-group">
+                <div class="col-sm-offset-2 col-sm-10">
+                  <div class="checkbox">
+                  <label><input type="checkbox" value="1" name="sogo_access" <?=($result['attributes']['sogo_access']=="1") ? "checked" : null;?>> <?=$lang['edit']['sogo_access'];?></label>
+                  <small class="help-block"><?=$lang['edit']['sogo_access_info'];?></small>
                   </div>
-                  <div class="col-sm-6">
-                    <div class="form-group">
-                      <label for="text"><?=$lang['edit']['pushover_text'];?></label>
-                      <input type="text" class="form-control" name="text" value="<?=$pushover_data['text'];?>" placeholder="You've got mail 📧">
-                    </div>
-                  </div>
-                  <div class="col-sm-12">
-                    <div class="form-group">
-                      <label for="text"><?=$lang['edit']['pushover_sender_array'];?></label>
-                      <input type="text" class="form-control" name="senders" value="<?=$pushover_data['senders'];?>" placeholder="sender1@example.com, sender2@example.com">
-                    </div>
-                  </div>
-                  <div class="col-sm-12">
-                    <div class="checkbox">
-                    <label><input type="checkbox" value="1" name="active" <?=($pushover_data['active']=="1") ? "checked" : null;?>> <?=$lang['edit']['active'];?></label>
-                    </div>
-                  </div>
-                  <div class="col-sm-12">
-                    <legend style="cursor:pointer;margin-top:10px" data-target="#po_advanced" unselectable="on" data-toggle="collapse">
-                      <i class="bi bi-plus"></i> <?=$lang['edit']['advanced_settings'];?>
-                    </legend>
-                  </div>
-                  <div class="col-sm-12">
-                    <div id="po_advanced" class="collapse">
-                      <div class="form-group">
-                        <label for="text"><?=$lang['edit']['pushover_sender_regex'];?></label>
-                        <input type="text" class="form-control" name="senders_regex" value="<?=$pushover_data['senders_regex'];?>" placeholder="/(.*@example\.org$|^foo@example\.com$)/i" regex="true">
-                        <div class="checkbox">
-                          <label><input type="checkbox" value="1" name="evaluate_x_prio" <?=($pushover_data['attributes']['evaluate_x_prio']=="1") ? "checked" : null;?>> <?=$lang['edit']['pushover_evaluate_x_prio'];?></label>
+                </div>
+              </div>
+              <?php } ?>
+              <div class="form-group">
+                <div class="col-sm-offset-2 col-sm-10">
+                  <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="edit_selected" data-id="editmailbox" data-item="<?=htmlspecialchars($result['username']);?>" data-api-url='edit/mailbox' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
+                </div>
+              </div>
+            </form>
+          </div>
+          <div id="mpushover" class="tab-pane">
+            <form data-id="pushover" class="form well" method="post">
+              <input type="hidden" value="0" name="evaluate_x_prio">
+              <input type="hidden" value="0" name="only_x_prio">
+              <input type="hidden" value="0" name="active">
+              <div class="row">
+                <div class="col-sm-1">
+                  <p class="help-block"><a href="https://pushover.net" target="_blank"><img src="data:image/png;base64,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" class="img img-fluid"></a></p>
+                </div>
+                <div class="col-sm-10">
+                  <p class="help-block"><?=sprintf($lang['edit']['pushover_info'], $mailbox);?></p>
+                  <p class="help-block"><?=$lang['edit']['pushover_vars'];?>: <code>{SUBJECT}</code>, <code>{SENDER}</code></p>
+                  <div class="form-group">
+                    <div class="row">
+                      <div class="col-sm-6">
+                        <div class="form-group">
+                          <label for="token">API Token/Key (Application)</label>
+                          <input type="text" class="form-control" name="token" maxlength="30" value="<?=$pushover_data['token'];?>" required>
                         </div>
+                      </div>
+                      <div class="col-sm-6">
+                        <div class="form-group">
+                          <label for="key">User/Group Key</label>
+                          <input type="text" class="form-control" name="key" maxlength="30" value="<?=$pushover_data['key'];?>" required>
+                        </div>
+                      </div>
+                      <div class="col-sm-6">
+                        <div class="form-group">
+                          <label for="title"><?=$lang['edit']['pushover_title'];?></label>
+                          <input type="text" class="form-control" name="title" value="<?=$pushover_data['title'];?>" placeholder="Mail">
+                        </div>
+                      </div>
+                      <div class="col-sm-6">
+                        <div class="form-group">
+                          <label for="text"><?=$lang['edit']['pushover_text'];?></label>
+                          <input type="text" class="form-control" name="text" value="<?=$pushover_data['text'];?>" placeholder="You've got mail 📧">
+                        </div>
+                      </div>
+                      <div class="col-sm-12">
+                        <div class="form-group">
+                          <label for="text"><?=$lang['edit']['pushover_sender_array'];?></label>
+                          <input type="text" class="form-control" name="senders" value="<?=$pushover_data['senders'];?>" placeholder="sender1@example.com, sender2@example.com">
+                        </div>
+                      </div>
+                      <div class="col-sm-12">
                         <div class="checkbox">
-                          <label><input type="checkbox" value="1" name="only_x_prio" <?=($pushover_data['attributes']['only_x_prio']=="1") ? "checked" : null;?>> <?=$lang['edit']['pushover_only_x_prio'];?></label>
+                        <label><input type="checkbox" value="1" name="active" <?=($pushover_data['active']=="1") ? "checked" : null;?>> <?=$lang['edit']['active'];?></label>
+                        </div>
+                      </div>
+                      <div class="col-sm-12">
+                        <legend style="cursor:pointer;margin-top:10px" data-target="#po_advanced" unselectable="on" data-toggle="collapse">
+                          <i class="bi bi-plus"></i> <?=$lang['edit']['advanced_settings'];?>
+                        </legend>
+                      </div>
+                      <div class="col-sm-12">
+                        <div id="po_advanced" class="collapse">
+                          <div class="form-group">
+                            <label for="text"><?=$lang['edit']['pushover_sender_regex'];?></label>
+                            <input type="text" class="form-control" name="senders_regex" value="<?=$pushover_data['senders_regex'];?>" placeholder="/(.*@example\.org$|^foo@example\.com$)/i" regex="true">
+                            <div class="checkbox">
+                              <label><input type="checkbox" value="1" name="evaluate_x_prio" <?=($pushover_data['attributes']['evaluate_x_prio']=="1") ? "checked" : null;?>> <?=$lang['edit']['pushover_evaluate_x_prio'];?></label>
+                            </div>
+                            <div class="checkbox">
+                              <label><input type="checkbox" value="1" name="only_x_prio" <?=($pushover_data['attributes']['only_x_prio']=="1") ? "checked" : null;?>> <?=$lang['edit']['pushover_only_x_prio'];?></label>
+                            </div>
+                          </div>
                         </div>
                       </div>
                     </div>
                   </div>
+                  <div class="btn-group" data-acl="<?=$_SESSION['acl']['pushover'];?>">
+                      <a class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="pushover" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/pushover' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></a>
+                      <a class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="pushover-test" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/pushover-test' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> <?=$lang['edit']['pushover_verify'];?></a>
+                      <div class="clearfix visible-xs"></div>
+                      <a id="pushover_delete" class="btn btn-sm visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-danger" data-action="edit_selected" data-id="pushover-delete" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/pushover' data-api-attr='{"delete":"true"}' href="#"><i class="bi bi-trash"></i> <?=$lang['edit']['remove'];?></a>
+                  </div>
                 </div>
               </div>
-              <div class="btn-group" data-acl="<?=$_SESSION['acl']['pushover'];?>">
-                  <a class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="pushover" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/pushover' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></a>
-                  <a class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="pushover-test" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/pushover-test' data-api-attr='{}' href="#"><i class="bi bi-check-lg"></i> <?=$lang['edit']['pushover_verify'];?></a>
-                  <div class="clearfix visible-xs"></div>
-                  <a id="pushover_delete" class="btn btn-sm visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-danger" data-action="edit_selected" data-id="pushover-delete" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/pushover' data-api-attr='{"delete":"true"}' href="#"><i class="bi bi-trash"></i> <?=$lang['edit']['remove'];?></a>
-              </div>
-            </div>
+            </form>
           </div>
-        </form>
-        <hr>
-        <form data-id="mboxratelimit" class="form-inline well" method="post">
-          <div class="row">
-            <div class="col-sm-1">
-              <p class="help-block"><?=$lang['acl']['ratelimit'];?></p>
-            </div>
-            <div class="col-sm-10">
-              <div class="form-group">
-                <input name="rl_value" type="number" autocomplete="off" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="<?=$lang['ratelimit']['disabled']?>">
+          <div id="macl" class="tab-pane">
+            <form data-id="useracl" class="form-inline well" method="post">
+              <div class="row">
+                <div class="col-sm-1">
+                  <p class="help-block">ACL</p>
+                </div>
+                <div class="col-sm-10">
+                  <div class="form-group">
+                    <select id="user_acl" name="user_acl" size="10" multiple>
+                    <?php
+                    $user_acls = acl('get', 'user', $mailbox);
+                    foreach ($user_acls as $acl => $val):
+                      ?>
+                      <option value="<?=$acl;?>" <?=($val == 1) ? 'selected' : null;?>><?=$lang['acl'][$acl];?></option>
+                      <?php
+                    endforeach;
+                    ?>
+                    </select>
+                  </div>
+                  <div class="form-group">
+                    <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="useracl" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/user-acl' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
+                  </div>
+                </div>
               </div>
-              <div class="form-group">
-                <select name="rl_frame" class="form-control">
-                  <option value="s" <?=(isset($rl['frame']) && $rl['frame'] == 's') ? 'selected' : null;?>><?=$lang['ratelimit']['second']?></option>
-                  <option value="m" <?=(isset($rl['frame']) && $rl['frame'] == 'm') ? 'selected' : null;?>><?=$lang['ratelimit']['minute']?></option>
-                  <option value="h" <?=(isset($rl['frame']) && $rl['frame'] == 'h') ? 'selected' : null;?>><?=$lang['ratelimit']['hour']?></option>
-                  <option value="d" <?=(isset($rl['frame']) && $rl['frame'] == 'd') ? 'selected' : null;?>><?=$lang['ratelimit']['day']?></option>
-                </select>
-              </div>
-              <div class="form-group">
-                <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="mboxratelimit" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/rl-mbox' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
-              </div>
-              <p class="help-block"><?=$lang['edit']['mbox_rl_info'];?></p>
-            </div>
+            </form>
           </div>
-        </form>
-        <form data-id="useracl" class="form-inline well" method="post">
-          <div class="row">
-            <div class="col-sm-1">
-              <p class="help-block">ACL</p>
-            </div>
-            <div class="col-sm-10">
-              <div class="form-group">
-                <select id="user_acl" name="user_acl" size="10" multiple>
-                <?php
-                $user_acls = acl('get', 'user', $mailbox);
-                foreach ($user_acls as $acl => $val):
-                  ?>
-                  <option value="<?=$acl;?>" <?=($val == 1) ? 'selected' : null;?>><?=$lang['acl'][$acl];?></option>
-                  <?php
-                endforeach;
-                ?>
-                </select>
+          <div id="mrl" class="tab-pane">
+            <form data-id="mboxratelimit" class="form-inline well" method="post">
+              <div class="row">
+                <div class="col-sm-1">
+                  <p class="help-block"><?=$lang['acl']['ratelimit'];?></p>
+                </div>
+                <div class="col-sm-10">
+                  <div class="form-group">
+                    <input name="rl_value" type="number" autocomplete="off" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="<?=$lang['ratelimit']['disabled']?>">
+                  </div>
+                  <div class="form-group">
+                    <select name="rl_frame" class="form-control">
+                      <option value="s" <?=(isset($rl['frame']) && $rl['frame'] == 's') ? 'selected' : null;?>><?=$lang['ratelimit']['second']?></option>
+                      <option value="m" <?=(isset($rl['frame']) && $rl['frame'] == 'm') ? 'selected' : null;?>><?=$lang['ratelimit']['minute']?></option>
+                      <option value="h" <?=(isset($rl['frame']) && $rl['frame'] == 'h') ? 'selected' : null;?>><?=$lang['ratelimit']['hour']?></option>
+                      <option value="d" <?=(isset($rl['frame']) && $rl['frame'] == 'd') ? 'selected' : null;?>><?=$lang['ratelimit']['day']?></option>
+                    </select>
+                  </div>
+                  <div class="form-group">
+                    <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="mboxratelimit" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/rl-mbox' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
+                  </div>
+                  <p class="help-block"><?=$lang['edit']['mbox_rl_info'];?></p>
+                </div>
               </div>
-              <div class="form-group">
-                <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="useracl" data-item="<?=htmlspecialchars($mailbox);?>" data-api-url='edit/user-acl' data-api-attr='{}' href="#"><?=$lang['edit']['save'];?></button>
-              </div>
-            </div>
+            </form>
           </div>
-        </form>
+        </div>
       <?php
       }
     }
@@ -1601,14 +1615,14 @@ if (isset($_SESSION['mailcow_cc_role'])) {
 }
 else {
 ?>
-	<div class="alert alert-danger" role="alert"><?=$lang['danger']['access_denied'];?></div>
+  <div class="alert alert-danger" role="alert"><?=$lang['danger']['access_denied'];?></div>
 <?php
 }
 ?>
-				</div>
-			</div>
-		</div>
-	</div>
+        </div>
+      </div>
+    </div>
+  </div>
 <a href="<?=$_SESSION['return_to'];?>">&#8592; <?=$lang['edit']['previous'];?></a>
 </div> <!-- /container -->
 <script type='text/javascript'>
diff --git a/data/web/inc/ajax/dns_diagnostics.php b/data/web/inc/ajax/dns_diagnostics.php
index 2d2eda7f..a315680c 100644
--- a/data/web/inc/ajax/dns_diagnostics.php
+++ b/data/web/inc/ajax/dns_diagnostics.php
@@ -268,9 +268,9 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm
           $currents = dns_get_record($record[0], 52, $_, $_, TRUE);
           foreach ($currents as &$current) {
             $current['type'] = 'TLSA';
-            $current['cert_usage'] = hexdec(bin2hex($current['data']{0}));
-            $current['selector'] = hexdec(bin2hex($current['data']{1}));
-            $current['match_type'] = hexdec(bin2hex($current['data']{2}));
+            $current['cert_usage'] = hexdec(bin2hex($current['data'][0]));
+            $current['selector'] = hexdec(bin2hex($current['data'][1]));
+            $current['match_type'] = hexdec(bin2hex($current['data'][2]));
             $current['cert_data'] = bin2hex(substr($current['data'], 3));
             $current['data'] = $current['cert_usage'] . ' ' . $current['selector'] . ' ' . $current['match_type'] . ' ' . $current['cert_data'];
           }
diff --git a/data/web/inc/functions.dkim.inc.php b/data/web/inc/functions.dkim.inc.php
index f6b2055a..7ca463a3 100644
--- a/data/web/inc/functions.dkim.inc.php
+++ b/data/web/inc/functions.dkim.inc.php
@@ -1,8 +1,8 @@
 <?php
 
 function dkim($_action, $_data = null, $privkey = false) {
-	global $redis;
-	global $lang;
+  global $redis;
+  global $lang;
   switch ($_action) {
     case 'add':
       if ($_SESSION['mailcow_cc_role'] != "admin") {
@@ -13,7 +13,7 @@ function dkim($_action, $_data = null, $privkey = false) {
         );
         return false;
       }
-      $key_length	= intval($_data['key_size']);
+      $key_length = intval($_data['key_size']);
       $dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';
       $domains = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['domains']));
       $domains = array_filter($domains);
@@ -167,9 +167,9 @@ function dkim($_action, $_data = null, $privkey = false) {
       array_shift($pem_public_key_array);
       array_pop($pem_public_key_array);
       // Implode as single string
-      $pem_public_key = implode('', $pem_public_key_array);
+      $pem_public_key = implode('', (array)$pem_public_key_array);
       $dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';
-      $domain	= $_data['domain'];
+      $domain = $_data['domain'];
       if (!is_valid_domain_name($domain)) {
         $_SESSION['return'][] = array(
           'type' => 'danger',
@@ -251,7 +251,7 @@ function dkim($_action, $_data = null, $privkey = false) {
         }
         if ($GLOBALS['SPLIT_DKIM_255'] === true) {
           $dkim_txt_tmp = str_split('v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data, 255);
-          $dkimdata['dkim_txt'] = sprintf('"%s"', implode('" "', $dkim_txt_tmp ) );
+          $dkimdata['dkim_txt'] = sprintf('"%s"', implode('" "', (array)$dkim_txt_tmp ) );
         }
         else {
           $dkimdata['dkim_txt'] = 'v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data;
diff --git a/data/web/inc/functions.fail2ban.inc.php b/data/web/inc/functions.fail2ban.inc.php
index 1e94aadf..2a7f11e8 100644
--- a/data/web/inc/functions.fail2ban.inc.php
+++ b/data/web/inc/functions.fail2ban.inc.php
@@ -18,7 +18,7 @@ function fail2ban($_action, $_data = null) {
           }
           if (isset($tmp_wl_data)) {
             natsort($tmp_wl_data);
-            $f2b_options['whitelist'] = implode(PHP_EOL, $tmp_wl_data);
+            $f2b_options['whitelist'] = implode(PHP_EOL, (array)$tmp_wl_data);
           }
           else {
             $f2b_options['whitelist'] = "";
@@ -34,7 +34,7 @@ function fail2ban($_action, $_data = null) {
           }
           if (isset($tmp_bl_data)) {
             natsort($tmp_bl_data);
-            $f2b_options['blacklist'] = implode(PHP_EOL, $tmp_bl_data);
+            $f2b_options['blacklist'] = implode(PHP_EOL, (array)$tmp_bl_data);
           }
           else {
             $f2b_options['blacklist'] = "";
diff --git a/data/web/inc/functions.fwdhost.inc.php b/data/web/inc/functions.fwdhost.inc.php
index 5c511f4f..d7ac2567 100644
--- a/data/web/inc/functions.fwdhost.inc.php
+++ b/data/web/inc/functions.fwdhost.inc.php
@@ -1,8 +1,8 @@
 <?php
 function fwdhost($_action, $_data = null) {
   require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/spf.inc.php';
-	global $redis;
-	global $lang;
+  global $redis;
+  global $lang;
   $_data_log = $_data;
   switch ($_action) {
     case 'add':
@@ -57,7 +57,7 @@ function fwdhost($_action, $_data = null) {
       $_SESSION['return'][] = array(
         'type' => 'success',
         'log' => array(__FUNCTION__, $_action, $_data_log),
-        'msg' => array('forwarding_host_added', htmlspecialchars(implode(', ', $hosts)))
+        'msg' => array('forwarding_host_added', htmlspecialchars(implode(', ', (array)$hosts)))
       );
     break;
     case 'edit':
@@ -180,4 +180,4 @@ function fwdhost($_action, $_data = null) {
       return $fwdhostdetails;
     break;
   }
-}
\ No newline at end of file
+}
diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php
index 65c7ab1d..c6642418 100644
--- a/data/web/inc/functions.inc.php
+++ b/data/web/inc/functions.inc.php
@@ -201,7 +201,7 @@ function password_complexity($_action, $_data = null) {
           $policy_text[] = sprintf($lang['admin']["password_policy_$name"], $value);
         }
       }
-      return '<p class="help-block small">- ' . implode('<br>- ', $policy_text) . '</p>';
+      return '<p class="help-block small">- ' . implode('<br>- ', (array)$policy_text) . '</p>';
     break;
   }
 }
@@ -982,8 +982,8 @@ function edit_user_account($_data) {
     return false;
   }
   if (!empty($_data['user_new_pass']) && !empty($_data['user_new_pass2'])) {
-    $password_new	= $_data['user_new_pass'];
-    $password_new2	= $_data['user_new_pass2'];
+    $password_new = $_data['user_new_pass'];
+    $password_new2  = $_data['user_new_pass2'];
     if (password_check($password_new, $password_new2) !== true) {
       return false;
     }
@@ -1010,7 +1010,7 @@ function user_get_alias_details($username) {
   $data['direct_aliases'] = array();
   $data['shared_aliases'] = array();
   if ($_SESSION['mailcow_cc_role'] == "user") {
-    $username	= $_SESSION['mailcow_cc_username'];
+    $username = $_SESSION['mailcow_cc_username'];
   }
   if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
     return false;
diff --git a/data/web/inc/functions.mailbox.inc.php b/data/web/inc/functions.mailbox.inc.php
index c2654319..24e5dabf 100644
--- a/data/web/inc/functions.mailbox.inc.php
+++ b/data/web/inc/functions.mailbox.inc.php
@@ -448,17 +448,17 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             );
             return false;
           }
-          $domain				= idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);
+          $domain       = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);
           $description  = $_data['description'];
           if (empty($description)) {
             $description = $domain;
           }
-          $aliases			= (int)$_data['aliases'];
+          $aliases      = (int)$_data['aliases'];
           $mailboxes    = (int)$_data['mailboxes'];
-          $defquota			= (int)$_data['defquota'];
-          $maxquota			= (int)$_data['maxquota'];
+          $defquota     = (int)$_data['defquota'];
+          $maxquota     = (int)$_data['maxquota'];
           $restart_sogo = (int)$_data['restart_sogo'];
-          $quota				= (int)$_data['quota'];
+          $quota        = (int)$_data['quota'];
           if ($defquota > $maxquota) {
             $_SESSION['return'][] = array(
                 'type' => 'danger',
@@ -683,7 +683,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             $gotos = array_unique($gotos);
             $gotos = array_filter($gotos);
             if (empty($gotos)) { return false; }
-            $goto = implode(",", $gotos);
+            $goto = implode(",", (array)$gotos);
           }
           foreach ($addresses as $address) {
             if (empty($address)) {
@@ -936,7 +936,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
           $password     = $_data['password'];
           $password2    = $_data['password2'];
           $name         = ltrim(rtrim($_data['name'], '>'), '<');
-          $quota_m			= intval($_data['quota']);
+          $quota_m      = intval($_data['quota']);
           if ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && $quota_m === 0) {
             $_SESSION['return'][] = array(
               'type' => 'danger',
@@ -959,7 +959,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
           $relayhost = (isset($_data['relayhost'])) ? intval($_data['relayhost']) : 0;
           $quarantine_notification = (isset($_data['quarantine_notification'])) ? strval($_data['quarantine_notification']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']);
           $quarantine_category = (isset($_data['quarantine_category'])) ? strval($_data['quarantine_category']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']);
-          $quota_b		= ($quota_m * 1048576);
+          $quota_b    = ($quota_m * 1048576);
           $mailbox_attrs = json_encode(
             array(
               'force_pw_update' => strval($force_pw_update),
@@ -1494,8 +1494,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
               );
               continue;
             }
-            $lowspamlevel	= explode(',', $_data['spam_score'])[0];
-            $highspamlevel	= explode(',', $_data['spam_score'])[1];
+            $lowspamlevel = explode(',', $_data['spam_score'])[0];
+            $highspamlevel  = explode(',', $_data['spam_score'])[1];
             if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {
               $_SESSION['return'][] = array(
                 'type' => 'danger',
@@ -1572,7 +1572,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             $_SESSION['return'][] = array(
               'type' => 'success',
               'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
-              'msg' => array('mailbox_modified', htmlspecialchars(implode(', ', $usernames)))
+              'msg' => array('mailbox_modified', htmlspecialchars(implode(', ', (array)$usernames)))
             );
           }
         break;
@@ -2080,7 +2080,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
               }
               $gotos = array_unique($gotos);
               $gotos = array_filter($gotos);
-              $goto = implode(",", $gotos);
+              $goto = implode(",", (array)$gotos);
             }
             if (!empty($goto)) {
               $stmt = $pdo->prepare("UPDATE `alias` SET
@@ -3002,7 +3002,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             while($field = array_shift($fields)) {
               $shown_fields[] = $field['Field'];
             }
-            $stmt = $pdo->prepare("SELECT " . implode(',', $shown_fields) . ",
+            $stmt = $pdo->prepare("SELECT " . implode(',', (array)$shown_fields) . ",
               `active`
                 FROM `imapsync` WHERE id = :id");
           }
@@ -3017,7 +3017,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             while($field = array_shift($fields)) {
               $shown_fields[] = $field['Field'];
             }
-            $stmt = $pdo->prepare("SELECT " . implode(',', $shown_fields) . ",
+            $stmt = $pdo->prepare("SELECT " . implode(',', (array)$shown_fields) . ",
               `active`
                 FROM `imapsync` WHERE id = :id");
           }
@@ -3399,7 +3399,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
           $stmt->execute(array(':domain' => $row['domain']));
           $SumQuotaInUse = $stmt->fetch(PDO::FETCH_ASSOC);
           $rl = ratelimit('get', 'domain', $_data);
-          $domaindata['max_new_mailbox_quota']	= ($row['quota'] * 1048576) - $MailboxDataDomain['in_use'];
+          $domaindata['max_new_mailbox_quota']  = ($row['quota'] * 1048576) - $MailboxDataDomain['in_use'];
           if ($domaindata['max_new_mailbox_quota'] > ($row['maxquota'] * 1048576)) {
             $domaindata['max_new_mailbox_quota'] = ($row['maxquota'] * 1048576);
           }
@@ -3421,7 +3421,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             $domaindata['msgs_total'] = 0;
           }
           $domaindata['mboxes_in_domain'] = $MailboxDataDomain['count'];
-          $domaindata['mboxes_left'] = $row['mailboxes']	- $MailboxDataDomain['count'];
+          $domaindata['mboxes_left'] = $row['mailboxes']  - $MailboxDataDomain['count'];
           $domaindata['domain_name'] = $row['domain'];
           $domaindata['description'] = $row['description'];
           $domaindata['max_num_aliases_for_domain'] = $row['aliases'];
@@ -3452,7 +3452,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
           ));
           $AliasDataDomain = $stmt->fetch(PDO::FETCH_ASSOC);
           (isset($AliasDataDomain['alias_count'])) ? $domaindata['aliases_in_domain'] = $AliasDataDomain['alias_count'] : $domaindata['aliases_in_domain'] = "0";
-          $domaindata['aliases_left'] = $row['aliases']	- $AliasDataDomain['alias_count'];
+          $domaindata['aliases_left'] = $row['aliases'] - $AliasDataDomain['alias_count'];
           if ($_SESSION['mailcow_cc_role'] == "admin")
           {
               $stmt = $pdo->prepare("SELECT GROUP_CONCAT(`username` SEPARATOR ', ') AS domain_admins FROM `domain_admins` WHERE `domain` = :domain");
@@ -3577,10 +3577,10 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
             $PushoverActive  = $stmt->fetch(PDO::FETCH_ASSOC);
             $stmt = $pdo->prepare("SELECT COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE (`kind` = '' OR `kind` = NULL) AND `domain` = :domain AND `username` != :username");
             $stmt->execute(array(':domain' => $row['domain'], ':username' => $_data));
-            $MailboxUsage	= $stmt->fetch(PDO::FETCH_ASSOC);
+            $MailboxUsage = $stmt->fetch(PDO::FETCH_ASSOC);
             $stmt = $pdo->prepare("SELECT IFNULL(COUNT(`address`), 0) AS `sa_count` FROM `spamalias` WHERE `goto` = :address AND `validity` >= :unixnow");
             $stmt->execute(array(':address' => $_data, ':unixnow' => time()));
-            $SpamaliasUsage	= $stmt->fetch(PDO::FETCH_ASSOC);
+            $SpamaliasUsage = $stmt->fetch(PDO::FETCH_ASSOC);
             $mailboxdata['max_new_quota'] = ($DomainQuota['quota'] * 1048576) - $MailboxUsage['in_use'];
             $mailboxdata['spam_aliases'] = $SpamaliasUsage['sa_count'];
             $mailboxdata['pushover_active'] = ($PushoverActive['pushover_active'] == 1) ? 1 : 0;
@@ -3877,7 +3877,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
               );
               continue;
             }
-            $domain	= idn_to_ascii(strtolower(trim($domain)), 0, INTL_IDNA_VARIANT_UTS46);
+            $domain = idn_to_ascii(strtolower(trim($domain)), 0, INTL_IDNA_VARIANT_UTS46);
             $stmt = $pdo->prepare("SELECT `username` FROM `mailbox`
               WHERE `domain` = :domain");
             $stmt->execute(array(':domain' => $domain));
@@ -4231,7 +4231,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
               if (($key = array_search($username, $goto_exploded)) !== false) {
                 unset($goto_exploded[$key]);
               }
-              $gotos_rebuild = implode(',', $goto_exploded);
+              $gotos_rebuild = implode(',', (array)$goto_exploded);
               $stmt = $pdo->prepare("UPDATE `alias` SET
                 `goto` = :goto
                   WHERE `address` = :address");
diff --git a/data/web/inc/functions.oauth2.inc.php b/data/web/inc/functions.oauth2.inc.php
index 7bc7dea6..7dc56025 100644
--- a/data/web/inc/functions.oauth2.inc.php
+++ b/data/web/inc/functions.oauth2.inc.php
@@ -1,16 +1,16 @@
 <?php
 function oauth2($_action, $_type, $_data = null) {
-	global $pdo;
-	global $redis;
-	global $lang;
-	if ($_SESSION['mailcow_cc_role'] != "admin") {
-		$_SESSION['return'][] = array(
-			'type' => 'danger',
+  global $pdo;
+  global $redis;
+  global $lang;
+  if ($_SESSION['mailcow_cc_role'] != "admin") {
+    $_SESSION['return'][] = array(
+      'type' => 'danger',
       'log' => array(__FUNCTION__, $_action, $_type, $_data),
-			'msg' => 'access_denied'
-		);
-		return false;
-	}
+      'msg' => 'access_denied'
+    );
+    return false;
+  }
   switch ($_action) {
     case 'add':
       switch ($_type) {
@@ -188,7 +188,7 @@ function oauth2($_action, $_type, $_data = null) {
           $_SESSION['return'][] = array(
             'type' => 'success',
             'log' => array(__FUNCTION__, $_action, $_type, $_data),
-            'msg' => sprintf($lang['success']['items_deleted'], implode(', ', $access_tokens))
+            'msg' => sprintf($lang['success']['items_deleted'], implode(', ', (array)$access_tokens))
           );
         break;
         case 'refresh_token':
@@ -210,7 +210,7 @@ function oauth2($_action, $_type, $_data = null) {
           $_SESSION['return'][] = array(
             'type' => 'success',
             'log' => array(__FUNCTION__, $_action, $_type, $_data),
-            'msg' => sprintf($lang['success']['items_deleted'], implode(', ', $refresh_tokens))
+            'msg' => sprintf($lang['success']['items_deleted'], implode(', ', (array)$refresh_tokens))
           );
         break;
       }
@@ -239,4 +239,4 @@ function oauth2($_action, $_type, $_data = null) {
       }
     break;
   }
-}
\ No newline at end of file
+}
diff --git a/data/web/inc/functions.policy.inc.php b/data/web/inc/functions.policy.inc.php
index ad29bd24..498f991f 100644
--- a/data/web/inc/functions.policy.inc.php
+++ b/data/web/inc/functions.policy.inc.php
@@ -1,9 +1,9 @@
 <?php
 function policy($_action, $_scope, $_data = null) {
-	global $pdo;
-	global $redis;
-	global $lang;
-	$_data_log = $_data;
+  global $pdo;
+  global $redis;
+  global $lang;
+  $_data_log = $_data;
   switch ($_action) {
     case 'add':
       if (!isset($_SESSION['acl']['spam_policy']) || $_SESSION['acl']['spam_policy'] != "1" ) {
@@ -261,7 +261,7 @@ function policy($_action, $_scope, $_data = null) {
             $_SESSION['return'][] = array(
               'type' => 'success',
               'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
-              'msg' => array('items_deleted', implode(', ', $prefids))
+              'msg' => array('items_deleted', implode(', ', (array)$prefids))
             );
           }
         break;
@@ -317,4 +317,4 @@ function policy($_action, $_scope, $_data = null) {
       }
     break;
   }
-}
\ No newline at end of file
+}
diff --git a/data/web/inc/functions.pushover.inc.php b/data/web/inc/functions.pushover.inc.php
index e8d4670e..74e8bb1c 100644
--- a/data/web/inc/functions.pushover.inc.php
+++ b/data/web/inc/functions.pushover.inc.php
@@ -1,6 +1,6 @@
 <?php
 function pushover($_action, $_data = null) {
-	global $pdo;
+  global $pdo;
   switch ($_action) {
     case 'edit':
       if (!isset($_SESSION['acl']['pushover']) || $_SESSION['acl']['pushover'] != "1" ) {
@@ -81,7 +81,7 @@ function pushover($_action, $_data = null) {
         }
         $senders = array_filter($senders);
         if (empty($senders)) { $senders = ''; }
-        $senders = implode(",", $senders);
+        $senders = implode(",", (array)$senders);
         if (!ctype_alnum($key) || strlen($key) != 30) {
           $_SESSION['return'][] = array(
             'type' => 'danger',
diff --git a/data/web/inc/functions.transports.inc.php b/data/web/inc/functions.transports.inc.php
index bbcce8cf..7b229175 100644
--- a/data/web/inc/functions.transports.inc.php
+++ b/data/web/inc/functions.transports.inc.php
@@ -1,7 +1,7 @@
 <?php
 function relayhost($_action, $_data = null) {
-	global $pdo;
-	global $lang;
+  global $pdo;
+  global $lang;
   $_data_log = $_data;
   switch ($_action) {
     case 'add':
@@ -45,7 +45,7 @@ function relayhost($_action, $_data = null) {
       $_SESSION['return'][] = array(
         'type' => 'success',
         'log' => array(__FUNCTION__, $_action, $_data_log),
-        'msg' => array('relayhost_added', htmlspecialchars(implode(', ', $hosts)))
+        'msg' => array('relayhost_added', htmlspecialchars(implode(', ', (array)$hosts)))
       );
     break;
     case 'edit':
@@ -100,7 +100,7 @@ function relayhost($_action, $_data = null) {
         $_SESSION['return'][] = array(
           'type' => 'success',
           'log' => array(__FUNCTION__, $_action, $_data_log),
-          'msg' => array('object_modified', htmlspecialchars(implode(', ', $hostnames)))
+          'msg' => array('object_modified', htmlspecialchars(implode(', ', (array)$hostnames)))
         );
       }
     break;
@@ -177,8 +177,8 @@ function relayhost($_action, $_data = null) {
   }
 }
 function transport($_action, $_data = null) {
-	global $pdo;
-	global $lang;
+  global $pdo;
+  global $lang;
   $_data_log = $_data;
   switch ($_action) {
     case 'add':
@@ -307,7 +307,7 @@ function transport($_action, $_data = null) {
       $_SESSION['return'][] = array(
         'type' => 'success',
         'log' => array(__FUNCTION__, $_action, $_data_log),
-        'msg' => array('relayhost_added', htmlspecialchars(implode(', ', $hosts)))
+        'msg' => array('relayhost_added', htmlspecialchars(implode(', ', (array)$hosts)))
       );
     break;
     case 'edit':
@@ -442,7 +442,7 @@ function transport($_action, $_data = null) {
         $_SESSION['return'][] = array(
           'type' => 'success',
           'log' => array(__FUNCTION__, $_action, $_data_log),
-          'msg' => array('object_modified', htmlspecialchars(implode(', ', $hostnames)))
+          'msg' => array('object_modified', htmlspecialchars(implode(', ', (array)$hostnames)))
         );
       }
     break;
@@ -505,4 +505,4 @@ function transport($_action, $_data = null) {
       return $transportdata;
     break;
   }
-}
\ No newline at end of file
+}
diff --git a/data/web/js/site/mailbox.js b/data/web/js/site/mailbox.js
index 91492b09..5cac48d5 100644
--- a/data/web/js/site/mailbox.js
+++ b/data/web/js/site/mailbox.js
@@ -94,9 +94,9 @@ $(document).ready(function() {
       }
     });
   }
-	$('#addSelectDomain').on('change', function() {
+  $('#addSelectDomain').on('change', function() {
     auto_fill_quota($('#addSelectDomain').val());
-	});
+  });
   auto_fill_quota($('#addSelectDomain').val());
   $(".goto_checkbox").click(function( event ) {
    $("form[data-id='add_alias'] .goto_checkbox").not(this).prop('checked', false);
@@ -152,10 +152,10 @@ $(document).ready(function() {
     $(e.currentTarget).find('#sieveDataText').html('<pre style="font-size:14px;line-height:1.1">' + sieveScript + '</pre>');
   });
   // Disable submit button on script change
-	$('.textarea-code').on('keyup', function() {
+  $('.textarea-code').on('keyup', function() {
     // Disable all "save" buttons, could be a "related button only" function, todo
     $('.add_sieve_script').attr({"disabled": true});
-	});
+  });
   // Validate script data
   $(".validate_sieve").click(function( event ) {
     event.preventDefault();
@@ -258,11 +258,11 @@ jQuery(function($){
         }},
         {"name":"def_quota_for_mbox","title":lang.mailbox_defquota,"breakpoints":"xs sm md","style":{"width":"125px"}},
         {"name":"max_quota_for_mbox","title":lang.mailbox_quota,"breakpoints":"xs sm","style":{"width":"125px"}},
-        {"name":"rl","title":"RL","breakpoints":"xs sm md lg","style":{"maxWidth":"100px","width":"100px"}},
-        {"name":"backupmx","filterable": false,"style":{"maxWidth":"120px","width":"120px"},"title":lang.backup_mx,"breakpoints":"xs sm md lg","formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"rl","title":"RL","breakpoints":"xs sm md lg","style":{"min-width":"100px","width":"100px"}},
+        {"name":"backupmx","filterable": false,"style":{"min-width":"120px","width":"120px"},"title":lang.backup_mx,"breakpoints":"xs sm md lg","formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
         {"name":"domain_admins","title":lang.domain_admins,"style":{"word-break":"break-all","min-width":"200px"},"breakpoints":"xs sm md lg","filterable":(role == "admin"),"visible":(role == "admin")},
-        {"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"240px","width":"240px"},"type":"html","title":lang.action,"breakpoints":"xs sm md"}
+        {"name":"active","filterable": false,"style":{"min-width":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"240px","width":"240px"},"type":"html","title":lang.action,"breakpoints":"xs sm md"}
       ],
       "rows": $.ajax({
         dataType: 'json',
@@ -297,7 +297,7 @@ jQuery(function($){
               item.action += '<a href="/edit/domain/' + encodeURIComponent(item.domain_name) + '" class="btn btn-xs btn-xs-half btn-default"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
               '<a href="#dnsInfoModal" class="btn btn-xs btn-xs-half btn-info" data-toggle="modal" data-domain="' + encodeURIComponent(item.domain_name) + '"><i class="bi bi-globe2"></i> DNS</a></div>';
             }
-            
+
             if (item.backupmx == 1) {
               if (item.relay_unknown_only == 1) {
                 item.domain_name = '<div class="label label-info">Relay Non-Local</div> ' + item.domain_name;
@@ -374,7 +374,7 @@ jQuery(function($){
         "formatter": function(value){
           res = value.split("/");
           return '<div class="label label-last-login">IMAP @ ' + unix_time_format(Number(res[0])) + '</div><br>' +
-            '<div class="label label-last-login">POP3 @ ' + unix_time_format(Number(res[1])) + '</div><br>' + 
+            '<div class="label label-last-login">POP3 @ ' + unix_time_format(Number(res[1])) + '</div><br>' +
             '<div class="label label-last-login">SMTP @ ' + unix_time_format(Number(res[2])) + '</div>';
         }},
         {"name":"last_pw_change","filterable": false,"title":lang.last_pw_change,"breakpoints":"all"},
@@ -386,7 +386,7 @@ jQuery(function($){
         },
         {"name":"messages","filterable": false,"title":lang.msg_num,"breakpoints":"xs sm md"},
         /* {"name":"rl","title":"RL","breakpoints":"all","style":{"width":"125px"}}, */
-        {"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':(0==value?'<i class="bi bi-x-lg"></i>':2==value&&'&#8212;');}},
+        {"name":"active","filterable": false,"style":{"min-width":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':(0==value?'<i class="bi bi-x-lg"></i>':2==value&&'&#8212;');}},
         {"name":"action","filterable": false,"sortable": false,"style":{"min-width":"290px","text-align":"right"},"type":"html","title":lang.action,"breakpoints":"xs sm md"}
       ],
       "empty": lang.empty,
@@ -443,9 +443,9 @@ jQuery(function($){
               item.quarantine_category = lang.q_all;
             }
             if (acl_data.login_as === 1) {
-	            var btnSize = 'btn-xs-third';
-	            if (ALLOW_ADMIN_EMAIL_LOGIN) btnSize = 'btn-xs-quart';
-	            
+              var btnSize = 'btn-xs-third';
+              if (ALLOW_ADMIN_EMAIL_LOGIN) btnSize = 'btn-xs-quart';
+
             item.action = '<div class="btn-group footable-actions">' +
               '<a href="/edit/mailbox/' + encodeURIComponent(item.username) + '" class="btn btn-xs ' + btnSize + ' btn-default"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
               '<a href="#" data-action="delete_selected" data-id="single-mailbox" data-api-url="delete/mailbox" data-item="' + encodeURIComponent(item.username) + '" class="btn btn-xs ' + btnSize + ' btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
@@ -512,9 +512,9 @@ jQuery(function($){
         {"name":"name","title":lang.alias},
         {"name":"kind","title":lang.kind},
         {"name":"domain","title":lang.domain,"breakpoints":"xs sm"},
-        {"name":"multiple_bookings","filterable": false,"style":{"maxWidth":"150px","width":"140px"},"title":lang.multiple_bookings,"breakpoints":"xs sm"},
-        {"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
+        {"name":"multiple_bookings","filterable": false,"style":{"min-width":"150px","width":"140px"},"title":lang.multiple_bookings,"breakpoints":"xs sm"},
+        {"name":"active","filterable": false,"style":{"min-width":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
       ],
       "empty": lang.empty,
       "rows": $.ajax({
@@ -650,11 +650,11 @@ jQuery(function($){
     ft_recipient_map_table = FooTable.init('#recipient_map_table', {
       "columns": [
         {"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
-        {"sorted": true,"name":"id","title":"ID","style":{"maxWidth":"60px","width":"60px","text-align":"center"}},
+        {"sorted": true,"name":"id","title":"ID","style":{"min-width":"60px","width":"60px","text-align":"center"}},
         {"name":"recipient_map_old","title":lang.recipient_map_old},
         {"name":"recipient_map_new","title":lang.recipient_map_new},
-        {"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":(role == "admin" ? lang.action : ""),"breakpoints":"xs sm"}
+        {"name":"active","filterable": false,"style":{"min-width":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"180px","width":"180px"},"type":"html","title":(role == "admin" ? lang.action : ""),"breakpoints":"xs sm"}
       ],
       "empty": lang.empty,
       "rows": $.ajax({
@@ -714,12 +714,12 @@ jQuery(function($){
     ft_tls_policy_table = FooTable.init('#tls_policy_table', {
       "columns": [
         {"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
-        {"sorted": true,"name":"id","title":"ID","style":{"maxWidth":"60px","width":"60px","text-align":"center"}},
+        {"sorted": true,"name":"id","title":"ID","style":{"min-width":"60px","width":"60px","text-align":"center"}},
         {"name":"dest","title":lang.tls_map_dest},
         {"name":"policy","title":lang.tls_map_policy},
         {"name":"parameters","title":lang.tls_map_parameters},
-        {"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":(role == "admin" ? lang.action : ""),"breakpoints":"xs sm"}
+        {"name":"active","filterable": false,"style":{"min-width":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"180px","width":"180px"},"type":"html","title":(role == "admin" ? lang.action : ""),"breakpoints":"xs sm"}
       ],
       "empty": lang.empty,
       "rows": $.ajax({
@@ -784,15 +784,15 @@ jQuery(function($){
     ft_alias_table = FooTable.init('#alias_table', {
       "columns": [
         {"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
-        {"name":"id","title":"ID","style":{"maxWidth":"60px","width":"60px","text-align":"center"}},
+        {"name":"id","title":"ID","style":{"min-width":"60px","width":"60px","text-align":"center"}},
         {"sorted": true,"name":"address","title":lang.alias,"style":{"width":"250px"}},
         {"name":"goto","title":lang.target_address},
         {"name":"domain","title":lang.domain,"breakpoints":"xs sm"},
         {"name":"public_comment","title":lang.public_comment,"breakpoints":"all"},
         {"name":"private_comment","title":lang.private_comment,"breakpoints":"all"},
         {"name":"sogo_visible","title":lang.sogo_visible,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';},"breakpoints":"all"},
-        {"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
+        {"name":"active","filterable": false,"style":{"min-width":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
       ],
       "empty": lang.empty,
       "rows": $.ajax({
@@ -886,8 +886,8 @@ jQuery(function($){
         {"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
         {"sorted": true,"name":"alias_domain","title":lang.alias,"style":{"width":"250px"}},
         {"name":"target_domain","title":lang.target_domain,"type":"html"},
-        {"name":"active","filterable": false,"style":{"maxWidth":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"250px","width":"250px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
+        {"name":"active","filterable": false,"style":{"min-width":"80px","width":"80px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"250px","width":"250px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
       ],
       "empty": lang.empty,
       "rows": $.ajax({
@@ -949,17 +949,17 @@ jQuery(function($){
   function draw_sync_job_table() {
     ft_syncjob_table = FooTable.init('#sync_job_table', {
       "columns": [
-        {"name":"chkbox","title":"","style":{"maxWidth":"60px","width":"60px","text-align":"center"},"filterable": false,"sortable": false,"type":"html"},
-        {"sorted": true,"name":"id","title":"ID","style":{"maxWidth":"60px","width":"60px","text-align":"center"}},
+        {"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px","text-align":"center"},"filterable": false,"sortable": false,"type":"html"},
+        {"sorted": true,"name":"id","title":"ID","style":{"min-width":"60px","width":"60px","text-align":"center"}},
         {"name":"user2","title":lang.owner},
         {"name":"server_w_port","title":"Server","breakpoints":"xs sm md","style":{"word-break":"break-all"}},
         {"name":"exclude","title":lang.excludes,"breakpoints":"all"},
         {"name":"mins_interval","title":lang.mins_interval,"breakpoints":"all"},
         {"name":"last_run","title":lang.last_run,"breakpoints":"xs sm md"},
         {"name":"log","title":"Log"},
-        {"name":"active","filterable": false,"style":{"maxWidth":"70px","width":"70px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
-        {"name":"is_running","filterable": false,"style":{"maxWidth":"120px","width":"100px"},"title":lang.status},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
+        {"name":"active","filterable": false,"style":{"min-width":"70px","width":"70px"},"title":lang.active,"formatter": function(value){return 1==value?'<i class="bi bi-check-lg"></i>':0==value&&'<i class="bi bi-x-lg"></i>';}},
+        {"name":"is_running","filterable": false,"style":{"min-width":"120px","width":"100px"},"title":lang.status},
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
       ],
       "empty": lang.empty,
       "rows": $.ajax({
@@ -1031,14 +1031,14 @@ jQuery(function($){
   function draw_filter_table() {
     ft_filter_table = FooTable.init('#filter_table', {
       "columns": [
-        {"name":"chkbox","title":"","style":{"maxWidth":"60px","width":"60px","text-align":"center"},"filterable": false,"sortable": false,"type":"html"},
-        {"name":"id","title":"ID","style":{"maxWidth":"60px","width":"60px","text-align":"center"}},
-        {"name":"active","style":{"maxWidth":"80px","width":"80px"},"title":lang.active},
-        {"name":"filter_type","style":{"maxWidth":"80px","width":"80px"},"title":"Type"},
-        {"sorted": true,"name":"username","title":lang.owner,"style":{"maxWidth":"550px","width":"350px"}},
+        {"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px","text-align":"center"},"filterable": false,"sortable": false,"type":"html"},
+        {"name":"id","title":"ID","style":{"min-width":"60px","width":"60px","text-align":"center"}},
+        {"name":"active","style":{"min-width":"80px","width":"80px"},"title":lang.active},
+        {"name":"filter_type","style":{"min-width":"80px","width":"80px"},"title":"Type"},
+        {"sorted": true,"name":"username","title":lang.owner,"style":{"min-width":"550px","width":"350px"}},
         {"name":"script_desc","title":lang.description,"breakpoints":"xs"},
         {"name":"script_data","title":"Script","breakpoints":"all"},
-        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","maxWidth":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
+        {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right","min-width":"180px","width":"180px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
       ],
       "empty": lang.empty,
       "rows": $.ajax({
diff --git a/data/web/lang/lang.de.json b/data/web/lang/lang.de.json
index fb8e9f38..4d2f27aa 100644
--- a/data/web/lang/lang.de.json
+++ b/data/web/lang/lang.de.json
@@ -514,6 +514,7 @@
         "optional": "Dieser Eintrag ist optional."
     },
     "edit": {
+        "acl": "ACL (Berechtigungen)",
         "active": "Aktiv",
         "admin": "Administrator bearbeiten",
         "advanced_settings": "Erweiterte Einstellungen",
@@ -574,6 +575,7 @@
         "previous": "Vorherige Seite",
         "private_comment": "Privater Kommentar",
         "public_comment": "Öffentlicher Kommentar",
+        "pushover": "Pushover",
         "pushover_evaluate_x_prio": "Hohe Priorität eskalieren [<code>X-Priority: 1</code>]",
         "pushover_info": "Push-Benachrichtigungen werden angewendet auf alle nicht-Spam Nachrichten zugestellt an <b>%s</b>, einschließlich Alias-Adressen (shared, non-shared, tagged).",
         "pushover_only_x_prio": "Nur Mail mit hoher Priorität berücksichtigen [<code>X-Priority: 1</code>]",
diff --git a/data/web/lang/lang.en.json b/data/web/lang/lang.en.json
index db9338fe..d5494e59 100644
--- a/data/web/lang/lang.en.json
+++ b/data/web/lang/lang.en.json
@@ -517,6 +517,7 @@
         "optional": "This record is optional."
     },
     "edit": {
+        "acl": "ACL (Permission)",
         "active": "Active",
         "admin": "Edit administrator",
         "advanced_settings": "Advanced settings",
@@ -577,6 +578,7 @@
         "previous": "Previous page",
         "private_comment": "Private comment",
         "public_comment": "Public comment",
+        "pushover": "Pushover",
         "pushover_evaluate_x_prio": "Escalate high priority mail [<code>X-Priority: 1</code>]",
         "pushover_info": "Push notification settings will apply to all clean (non-spam) mail delivered to <b>%s</b> including aliases (shared, non-shared, tagged).",
         "pushover_only_x_prio": "Only consider high priority mail [<code>X-Priority: 1</code>]",
@@ -901,11 +903,11 @@
         "type": "Type"
     },
     "ratelimit": {
-	    "disabled": "Disabled",
-	    "second": "msgs / second",
-	    "minute": "msgs / minute",
-	    "hour": "msgs / hour",
-	    "day": "msgs / day"
+      "disabled": "Disabled",
+      "second": "msgs / second",
+      "minute": "msgs / minute",
+      "hour": "msgs / hour",
+      "day": "msgs / day"
     },
     "start": {
         "help": "Show/Hide help panel",
@@ -1179,4 +1181,4 @@
         "session_token": "Form token invalid: Token mismatch",
         "session_ua": "Form token invalid: User-Agent validation error"
     }
-}
\ No newline at end of file
+}
diff --git a/data/web/mailbox.php b/data/web/mailbox.php
index 2ed8855e..6dfe3af5 100644
--- a/data/web/mailbox.php
+++ b/data/web/mailbox.php
@@ -33,8 +33,8 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
     <li role="presentation"<?=($_SESSION['mailcow_cc_role'] == "admin") ?: ' class="hidden"';?>><a href="#tab-tls-policy" aria-controls="tab-tls-policy" role="tab" data-toggle="tab"><?=$lang['mailbox']['tls_policy_maps'];?></a></li>
   </ul>
 
-	<div class="row">
-		<div class="col-md-12">
+  <div class="row">
+    <div class="col-md-12">
       <div class="tab-content" style="padding-top:20px">
         <div role="tabpanel" class="tab-pane active" id="tab-domains">
           <div class="panel panel-default">
@@ -43,7 +43,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <? if($_SESSION['mailcow_cc_role'] == "admin"): ?><button class="btn btn-xs btn-success" href="#" data-toggle="modal" data-target="#addDomainModal"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_domain'];?></button><? endif; ?>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_domain_table" data-table="domain_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="domain_table" role="menu">
@@ -99,7 +99,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-toggle="modal" data-target="#addMailboxModal"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_mailbox'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_mailbox_table" data-table="mailbox_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="mailbox_table" role="menu">
@@ -226,7 +226,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-toggle="modal" data-target="#addResourceModal"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_resource'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_resource_table" data-table="resource_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="resource_table" role="menu">
@@ -272,7 +272,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-acl="<?=$_SESSION['acl']['alias_domains'];?>" data-toggle="modal" data-target="#addAliasDomainModal"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_domain_alias'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_aliasdomain_table" data-table="aliasdomain_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="aliasdomain_table" role="menu">
@@ -313,7 +313,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-toggle="modal" data-target="#addAliasModal"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_alias'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_alias_table" data-table="alias_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="alias_table" role="menu">
@@ -363,7 +363,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button data-acl="<?=$_SESSION['acl']['syncjobs'];?>" class="btn btn-xs btn-success" href="#" data-toggle="modal" data-target="#addSyncJobModalAdmin"><i class="bi bi-plus-lg"></i> <?=$lang['user']['create_syncjob'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_sync_job_table" data-table="sync_job_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="sync_job_table" role="menu">
@@ -406,7 +406,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-acl="<?=$_SESSION['acl']['filters'];?>" data-toggle="modal" data-target="#addFilterModalAdmin"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_filter'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_filter_table" data-table="filter_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="filter_table" role="menu">
@@ -498,7 +498,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-acl="<?=$_SESSION['acl']['bcc_maps'];?>" data-toggle="modal" data-target="#addBCCModalAdmin"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_bcc_entry'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_bcc_table" data-table="bcc_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="bcc_table" role="menu">
@@ -540,7 +540,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-toggle="modal" data-target="#addRecipientMapModalAdmin"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_recipient_map_entry'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_recipient_map_table" data-table="recipient_map_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="recipient_map_table" role="menu">
@@ -582,7 +582,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               <div class="btn-group pull-right hidden-xs">
                 <button class="btn btn-xs btn-success" href="#" data-toggle="modal" data-target="#addTLSPolicyMapAdmin"><i class="bi bi-plus-lg"></i> <?=$lang['mailbox']['add_tls_policy_map'];?></button>
                 <button class="btn btn-xs btn-default refresh_table" data-draw="draw_tls_policy_table" data-table="tls_policy_table"><?=$lang['admin']['refresh'];?></button>
-                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?> 
+                <button type="button" class="btn btn-xs btn-default dropdown-toggle" data-toggle="dropdown"><?=$lang['mailbox']['table_size'];?>
                   <span class="caret"></span>
                 </button>
                 <ul class="dropdown-menu" data-table-id="tls_policy_table" role="menu">
@@ -635,7 +635,7 @@ echo "var role = '". $role . "';\n";
 echo "var is_dual = " . $is_dual . ";\n";
 echo "var pagination_size = '". $PAGINATION_SIZE . "';\n";
 $ALLOW_ADMIN_EMAIL_LOGIN = (preg_match(
-	"/^([yY][eE][sS]|[yY])+$/",
+  "/^([yY][eE][sS]|[yY])+$/",
     $_ENV["ALLOW_ADMIN_EMAIL_LOGIN"]
 )) ? "true" : "false";
 echo "var ALLOW_ADMIN_EMAIL_LOGIN = " . $ALLOW_ADMIN_EMAIL_LOGIN . ";\n";
@@ -648,7 +648,7 @@ $js_minifier->add('/web/js/site/pwgen.js');
 require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';
 }
 else {
-	header('Location: /');
-	exit();
+  header('Location: /');
+  exit();
 }
 ?>