git subrepo commit (merge) mailcow/src/mailcow-dockerized
subrepo: subdir: "mailcow/src/mailcow-dockerized"
merged: "02ae5285"
upstream: origin: "https://github.com/mailcow/mailcow-dockerized.git"
branch: "master"
commit: "649a5c01"
git-subrepo: version: "0.4.3"
origin: "???"
commit: "???"
Change-Id: I870ad468fba026cc5abf3c5699ed1e12ff28b32b
diff --git a/mailcow/src/mailcow-dockerized/data/web/modals/admin.php b/mailcow/src/mailcow-dockerized/data/web/modals/admin.php
index e796d2e..22bb412 100644
--- a/mailcow/src/mailcow-dockerized/data/web/modals/admin.php
+++ b/mailcow/src/mailcow-dockerized/data/web/modals/admin.php
@@ -23,7 +23,7 @@
<div class="form-group">
<label class="control-label col-sm-2" for="content"><?=$lang['admin']['rsetting_content'];?>:</label>
<div class="col-sm-10">
- <textarea class="form-control" id="adminRspamdSettingsContent" name="content" rows="10"><?=$rsetting_details['content'];?></textarea>
+ <textarea class="form-control" id="adminRspamdSettingsContent" name="content" rows="10"><?=(isset($rsetting_details['content'])) ? $rsetting_details['content'] : '';?></textarea>
</div>
</div>
<div class="form-group">
@@ -35,7 +35,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="rsetting" data-api-url='add/rsetting' data-api-attr='{}' href="#"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> <?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="rsetting" data-api-url='add/rsetting' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> <?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -59,8 +59,8 @@
<div class="form-group">
<label class="control-label col-sm-2" for="username"><?=$lang['admin']['username'];?>:</label>
<div class="col-sm-10">
- <input type="text" class="form-control" name="username" required>
- ↳ <kbd>a-z A-Z - _ .</kbd>
+ <input type="text" class="form-control" name="username" onkeyup="this.value = this.value.toLowerCase();" required>
+ ↳ <kbd>a-z - _ .</kbd>
</div>
</div>
<div class="form-group">
@@ -96,7 +96,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_domain_admin" data-api-url='add/domain-admin' data-api-attr='{}' href="#"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> <?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_domain_admin" data-api-url='add/domain-admin' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> <?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -124,7 +124,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
- <button class="btn btn-default" data-action="edit_selected" data-id="fido2ChangeFn" data-item="null" data-api-url='edit/fido2-fn' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
+ <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="fido2ChangeFn" data-item="null" data-api-url='edit/fido2-fn' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
</div>
</div>
</form>
@@ -150,7 +150,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_oauth2_client" data-api-url='add/oauth2-client' data-api-attr='{}' href="#"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> <?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_oauth2_client" data-api-url='add/oauth2-client' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> <?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -171,8 +171,8 @@
<div class="form-group">
<label class="control-label col-sm-2" for="username"><?=$lang['admin']['username'];?>:</label>
<div class="col-sm-10">
- <input type="text" class="form-control" name="username" required>
- ↳ <kbd>a-z A-Z - _ .</kbd>
+ <input type="text" class="form-control" name="username" onkeyup="this.value = this.value.toLowerCase();" required>
+ ↳ <kbd>a-z - _ .</kbd>
</div>
</div>
<div class="form-group">
@@ -196,7 +196,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_admin" data-api-url='add/admin' data-api-attr='{}' href="#"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> <?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_admin" data-api-url='add/admin' data-api-attr='{}' href="#"><i class="bi bi-plus-lg"></i> <?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -210,7 +210,7 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
- <h3 class="modal-title"><span class="glyphicon glyphicon-stats"></span> Transport</h3>
+ <h3 class="modal-title"><i class="bi bi-info-circle-fill"></i> Transport</h3>
</div>
<div class="modal-body">
<form class="form-horizontal" data-cached-form="true" id="test_transport_form" role="form" method="post">
@@ -223,8 +223,15 @@
</div>
</div>
<div class="form-group">
+ <label class="control-label col-sm-2" for="mail_rcpt"><?=$lang['admin']['relay_rcpt'];?></label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" name="mail_rcpt" placeholder="null@hosted.mailcow.de" value="null@hosted.mailcow.de">
+ <p class="help-block"><?=$lang['admin']['transport_test_rcpt_info'];?></p>
+ </div>
+ </div>
+ <div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" id="test_transport" href="#"><?=$lang['admin']['relay_run'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" id="test_transport" href="#"><?=$lang['admin']['relay_run'];?></button>
</div>
</div>
</form>
@@ -240,7 +247,7 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
- <h3 class="modal-title"><span class="glyphicon glyphicon-hourglass" style="font-size:18px"></span> ID <span id="queue_id"></span></h3>
+ <h3 class="modal-title"><i class="bi bi-card-checklist" style="font-size:18px"></i> ID <span id="queue_id"></span></h3>
</div>
<div class="modal-body">
<textarea class="form-control" id="queue_msg_content" name="content" rows="40"></textarea>
@@ -254,7 +261,7 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
- <h3 class="modal-title"><span class="glyphicon glyphicon-lock"></span> Private key</h3>
+ <h3 class="modal-title"><i class="bi bi-key-fill"></i> Private key</h3>
</div>
<div class="modal-body">
<pre id="priv_key_pre"></pre>
diff --git a/mailcow/src/mailcow-dockerized/data/web/modals/footer.php b/mailcow/src/mailcow-dockerized/data/web/modals/footer.php
index 42d1278..7f73262 100644
--- a/mailcow/src/mailcow-dockerized/data/web/modals/footer.php
+++ b/mailcow/src/mailcow-dockerized/data/web/modals/footer.php
@@ -1,10 +1,13 @@
<?php
-if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin")):
+if (isset($_SESSION['mailcow_cc_role'])) {
?>
<div class="modal fade" id="YubiOTPModal" tabindex="-1" role="dialog" aria-labelledby="YubiOTPModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
- <div class="modal-header"><b><?=$lang['tfa']['yubi_otp'];?></b></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?=$lang['tfa']['yubi_otp'];?></h3>
+ </div>
<div class="modal-body">
<form role="form" method="post">
<div class="form-group">
@@ -29,7 +32,7 @@
<input type="hidden" name="tfa_method" value="yubi_otp">
</div>
</div>
- <button class="btn btn-sm btn-default" type="submit" name="set_tfa"><?=$lang['user']['save_changes'];?></button>
+ <button class="btn btn-sm visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" type="submit" name="set_tfa"><?=$lang['user']['save_changes'];?></button>
</form>
</div>
</div>
@@ -39,7 +42,10 @@
<div class="modal fade" id="U2FModal" tabindex="-1" role="dialog" aria-labelledby="U2FModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
- <div class="modal-header"><b><?=$lang['tfa']['u2f'];?></b></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?=$lang['tfa']['u2f'];?></h3>
+ </div>
<div class="modal-body">
<form role="form" method="post" id="u2f_reg_form">
<div class="form-group">
@@ -72,7 +78,10 @@
<div class="modal fade" id="TOTPModal" tabindex="-1" role="dialog" aria-labelledby="TOTPModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
- <div class="modal-header"><b><?=$lang['tfa']['totp'];?></b></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?=$lang['tfa']['totp'];?></h3>
+ </div>
<div class="modal-body">
<form role="form" method="post">
<div class="form-group">
@@ -98,7 +107,7 @@
<li>
<p><?=$lang['tfa']['confirm_totp_token'];?>:</p>
<p><input type="number" style="width:33%" class="form-control" name="totp_confirm_token" autocomplete="off" required></p>
- <p><button class="btn btn-default" type="submit" name="set_tfa"><?=$lang['tfa']['confirm'];?></button></p>
+ <p><button class="btn btn-sm visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" type="submit" name="set_tfa"><?=$lang['tfa']['confirm'];?></button></p>
</li>
</ol>
</form>
@@ -110,14 +119,17 @@
<div class="modal fade" id="DisableTFAModal" tabindex="-1" role="dialog" aria-labelledby="DisableTFAModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
- <div class="modal-header"><b><?=$lang['tfa']['delete_tfa'];?></b></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?=$lang['tfa']['delete_tfa'];?></h3>
+ </div>
<div class="modal-body">
<form role="form" method="post">
<div class="input-group">
- <input type="password" class="form-control" name="confirm_password" placeholder="<?=$lang['user']['password_now'];?>" autocomplete="off" required>
+ <input type="password" class="form-control input-xs-lg" name="confirm_password" placeholder="<?=$lang['user']['password_now'];?>" autocomplete="off" required>
<span class="input-group-btn">
<input type="hidden" name="tfa_method" value="none">
- <button class="btn btn-danger" type="submit" name="set_tfa"><?=$lang['tfa']['delete_tfa'];?></button>
+ <button class="btn btn-sm visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-danger" type="submit" name="set_tfa"><?=str_replace(' ', ' ', $lang['tfa']['delete_tfa']);?></button>
</span>
</div>
</form>
@@ -127,14 +139,17 @@
</div>
<?php
-endif;
+}
if (isset($_SESSION['pending_tfa_method'])):
$tfa_method = $_SESSION['pending_tfa_method'];
?>
<div class="modal fade" id="ConfirmTFAModal" tabindex="-1" role="dialog" aria-labelledby="ConfirmTFAModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
- <div class="modal-header"><button type="button" class="close" data-dismiss="modal">×</button><b><?=$lang['tfa'][$tfa_method];?></b></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?=$lang['tfa'][$tfa_method];?></h3>
+ </div>
<div class="modal-body">
<?php
switch ($tfa_method) {
@@ -148,7 +163,7 @@
<input type="hidden" name="tfa_method" value="yubi_otp">
</div>
</div>
- <button class="btn btn-sm btn-default" type="submit" name="verify_tfa_login"><?=$lang['login']['login'];?></button>
+ <button class="btn btn-sm visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-sm btn-default" type="submit" name="verify_tfa_login"><?=$lang['login']['login'];?></button>
</form>
<?php
break;
@@ -177,12 +192,12 @@
<form role="form" method="post">
<div class="form-group">
<div class="input-group">
- <span class="input-group-addon" id="tfa-addon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></span>
+ <span class="input-group-addon" id="tfa-addon"><i class="bi bi-shield-lock-fill"></i></span>
<input type="number" min="000000" max="999999" name="token" class="form-control" placeholder="123456" autocomplete="one-time-code" aria-describedby="tfa-addon">
<input type="hidden" name="tfa_method" value="totp">
</div>
</div>
- <button class="btn btn-sm btn-default" type="submit" name="verify_tfa_login"><?=$lang['login']['login'];?></button>
+ <button class="btn btn-sm visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" type="submit" name="verify_tfa_login"><?=$lang['login']['login'];?></button>
</form>
<?php
break;
@@ -205,13 +220,13 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal">×</button>
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
<h4 class="modal-title"><?= $lang['footer']['restart_container']; ?> (<code id="containerName"></code>)</h4>
</div>
<div class="modal-body">
<p><?= $lang['footer']['restart_container_info']; ?></p>
<hr>
- <button class="btn btn-md btn-primary" id="triggerRestartContainer"><?= $lang['footer']['restart_now']; ?></button>
+ <button class="btn btn-md visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-primary" id="triggerRestartContainer"><?= $lang['footer']['restart_now']; ?></button>
<br><br>
<div id="statusTriggerRestartContainer"></div>
</div>
@@ -225,15 +240,16 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal">×</button>
- <h4 class="modal-title"><?= $lang['footer']['confirm_delete']; ?></h4>
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?= $lang['footer']['confirm_delete']; ?></h3>
</div>
<div class="modal-body">
<p id="DeleteText"><?= $lang['footer']['delete_these_items']; ?></p>
<ul id="ItemsToDelete"></ul>
<hr>
- <button class="btn btn-sm btn-danger" id="IsConfirmed"><?= $lang['footer']['delete_now']; ?></button>
- <button class="btn btn-sm btn-default" id="isCanceled"><?= $lang['footer']['cancel']; ?></button>
+ <button class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-danger" id="IsConfirmed"><?= $lang['footer']['delete_now']; ?></button>
+ <button class="btn btn-sm btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" id="isCanceled"><?= $lang['footer']['cancel']; ?></button>
+ <div class="clearfix visible-xs"></div>
</div>
</div>
</div>
diff --git a/mailcow/src/mailcow-dockerized/data/web/modals/mailbox.php b/mailcow/src/mailcow-dockerized/data/web/modals/mailbox.php
index c1362c4..77533ea 100644
--- a/mailcow/src/mailcow-dockerized/data/web/modals/mailbox.php
+++ b/mailcow/src/mailcow-dockerized/data/web/modals/mailbox.php
@@ -72,7 +72,7 @@
<hr>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_mailbox" data-api-url='add/mailbox' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_mailbox" data-api-url='add/mailbox' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -153,14 +153,14 @@
<div class="form-group">
<label class="control-label col-sm-2" for="rl_frame"><?=$lang['acl']['ratelimit'];?></label>
<div class="col-sm-7">
- <input name="rl_value" type="number" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="disabled">
+ <input name="rl_value" type="number" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="<?=$lang['ratelimit']['disabled']?>">
</div>
<div class="col-sm-3">
<select name="rl_frame" class="form-control">
- <option value="s" <?=(isset($rl['frame']) && $rl['frame'] == 's') ? 'selected' : null;?>>msgs / second</option>
- <option value="m" <?=(isset($rl['frame']) && $rl['frame'] == 'm') ? 'selected' : null;?>>msgs / minute</option>
- <option value="h" <?=(isset($rl['frame']) && $rl['frame'] == 'h') ? 'selected' : null;?>>msgs / hour</option>
- <option value="d" <?=(isset($rl['frame']) && $rl['frame'] == 'd') ? 'selected' : null;?>>msgs / day</option>
+ <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>
@@ -182,18 +182,19 @@
</div>
<hr>
<div class="form-group">
- <div class="col-sm-offset-2 col-sm-10">
+ <div class="col-sm-offset-2 col-sm-10 btn-group">
<?php if (getenv('SKIP_SOGO') != "y") { ?>
- <button class="btn btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{}' href="#"><?=$lang['add']['add_domain_only'];?></button>
- <button class="btn btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{"restart_sogo":"1"}' href="#"><?=$lang['add']['add_domain_restart'];?></button>
+ <button class="btn btn-xs-lg btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{}' href="#"><?=$lang['add']['add_domain_only'];?></button>
+ <button class="btn btn-xs-lg btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{"restart_sogo":"1"}' href="#"><?=$lang['add']['add_domain_restart'];?></button>
+ <div class="clearfix visible-xs"></div>
<?php } else { ?>
- <button class="btn btn-default" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{}' href="#"><?=$lang['add']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_domain" data-api-url='add/domain' data-api-attr='{}' href="#"><?=$lang['add']['add'];?></button>
<?php } ?>
</div>
</div>
<?php // TODO: Separate SOGo-related text
if (getenv('SKIP_SOGO') != "y") { ?>
- <p><span class="glyphicon glyphicon-exclamation-sign text-danger"></span> <?=$lang['add']['post_domain_add'];?></p>
+ <p><i class="bi bi-shield-fill-exclamation text-danger"></i> <?=$lang['add']['post_domain_add'];?></p>
<?php } ?>
</form>
</div>
@@ -262,7 +263,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_resource" data-api-url='add/resource' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_resource" data-api-url='add/resource' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -320,7 +321,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_alias" data-api-url='add/alias' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_alias" data-api-url='add/alias' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -369,20 +370,20 @@
<div class="form-group">
<label class="control-label col-sm-2" for="rl_frame"><?=$lang['acl']['ratelimit'];?></label>
<div class="col-sm-7">
- <input name="rl_value" type="number" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="disabled">
+ <input name="rl_value" type="number" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="<?=$lang['ratelimit']['disabled']?>">
</div>
<div class="col-sm-3">
<select name="rl_frame" class="form-control">
- <option value="s" <?=(isset($rl['frame']) && $rl['frame'] == 's') ? 'selected' : null;?>>msgs / second</option>
- <option value="m" <?=(isset($rl['frame']) && $rl['frame'] == 'm') ? 'selected' : null;?>>msgs / minute</option>
- <option value="h" <?=(isset($rl['frame']) && $rl['frame'] == 'h') ? 'selected' : null;?>>msgs / hour</option>
- <option value="d" <?=(isset($rl['frame']) && $rl['frame'] == 'd') ? 'selected' : null;?>>msgs / day</option>
+ <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>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_alias_domain" data-api-url='add/alias-domain' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_alias_domain" data-api-url='add/alias-domain' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -559,7 +560,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_syncjob" data-api-url='add/syncjob' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_syncjob" data-api-url='add/syncjob' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -625,9 +626,10 @@
</div>
</div>
<div class="form-group">
- <div class="col-sm-offset-2 col-sm-10 add_filter_btns">
- <button class="btn btn-default validate_sieve" href="#"><?=$lang['add']['validate'];?></button>
- <button class="btn btn-success add_sieve_script" data-action="add_item" data-id="add_filter" data-api-url='add/filter' data-api-attr='{}' href="#" disabled><?=$lang['admin']['add'];?></button>
+ <div class="col-sm-offset-2 col-sm-10 add_filter_btns btn-group">
+ <button class="btn btn-xs-lg btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default validate_sieve" href="#"><?=$lang['add']['validate'];?></button>
+ <button class="btn btn-xs-lg btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success add_sieve_script" data-action="add_item" data-id="add_filter" data-api-url='add/filter' data-api-attr='{}' href="#" disabled><?=$lang['admin']['add'];?></button>
+ <div class="clearfix visible-xs"></div>
</div>
</div>
</form>
@@ -650,25 +652,38 @@
<div class="form-group">
<label class="control-label col-sm-2" for="local_dest"><?=$lang['mailbox']['bcc_local_dest'];?></label>
<div class="col-sm-10">
- <select data-live-search="true" name="local_dest" required>
+ <select data-live-search="true" data-size="20" name="local_dest" required>
<?php
$domains = mailbox('get', 'domains');
$alias_domains = mailbox('get', 'alias_domains');
if (!empty($domains)) {
+ echo '<optgroup label="',$lang['mailbox']['domains'],'">';
foreach ($domains as $domain) {
echo "<option>".htmlspecialchars($domain)."</option>";
}
+ echo "</optgroup>";
}
if (!empty($alias_domains)) {
+ echo '<optgroup label="',$lang['mailbox']['domain_aliases'],'">';
foreach ($alias_domains as $alias_domain) {
echo "<option>".htmlspecialchars($alias_domain)."</option>";
}
+ echo "</optgroup>";
}
if (!empty($domains)) {
foreach ($domains as $domain) {
$mailboxes = mailbox('get', 'mailboxes', $domain);
foreach ($mailboxes as $mailbox) {
- echo "<option>".htmlspecialchars($mailbox)."</option>";
+ echo "<optgroup label=\"" . htmlspecialchars($mailbox) . "\">";
+ echo "<option> " . htmlspecialchars($mailbox) . "</option>";
+ $user_alias_details = user_get_alias_details($mailbox);
+ foreach ($user_alias_details['direct_aliases'] as $k => $v) {
+ echo "<option>" . htmlspecialchars($k) . "</option>";
+ }
+ foreach ($user_alias_details['shared_aliases'] as $k => $v) {
+ echo "<option>" . htmlspecialchars($k) . "</option>";
+ }
+ echo "</optgroup>";
}
}
}
@@ -689,6 +704,7 @@
<label class="control-label col-sm-2" for="bcc_dest"><?=$lang['mailbox']['bcc_destination'];?></label>
<div class="col-sm-10">
<input type="text" class="form-control" name="bcc_dest">
+ <small><?=$lang['add']['bcc_dest_format'];?></small>
</div>
</div>
<div class="form-group">
@@ -700,7 +716,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-success" data-action="add_item" data-id="add_bcc" data-api-url='add/bcc' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_bcc" data-api-url='add/bcc' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -741,7 +757,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-success" data-action="add_item" data-id="add_recipient_map" data-api-url='add/recipient_map' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_recipient_map" data-api-url='add/recipient_map' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -797,7 +813,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-success" data-action="add_item" data-id="add_tls_policy_map" data-api-url='add/tls-policy-map' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_tls_policy_map" data-api-url='add/tls-policy-map' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -809,7 +825,10 @@
<div class="modal fade" id="syncjobLogModal" tabindex="-1" role="dialog" aria-labelledby="syncjobLogModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
- <div class="modal-header"><h4 class="modal-title">Log</h4></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title">Log</h3>
+ </div>
<div class="modal-body">
<textarea class="form-control" rows="20" id="logText" spellcheck="false"></textarea>
</div>
@@ -820,10 +839,14 @@
<div class="modal fade" id="dnsInfoModal" tabindex="-1" role="dialog" aria-labelledby="dnsInfoModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
- <div class="modal-header"><h4 class="modal-title"><?=$lang['diagnostics']['dns_records'];?></h4></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?=$lang['diagnostics']['dns_records'];?></h3>
+ </div>
<div class="modal-body">
<p><?=$lang['diagnostics']['dns_records_24hours'];?></p>
<div class="dns-modal-body"></div>
+ <p><?=$lang['diagnostics']['dns_records_docs'];?></p>
</div>
</div>
</div>
diff --git a/mailcow/src/mailcow-dockerized/data/web/modals/quarantine.php b/mailcow/src/mailcow-dockerized/data/web/modals/quarantine.php
index 3650012..3cb5330 100644
--- a/mailcow/src/mailcow-dockerized/data/web/modals/quarantine.php
+++ b/mailcow/src/mailcow-dockerized/data/web/modals/quarantine.php
@@ -9,7 +9,7 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
- <h3 class="modal-title"><span class="glyphicon glyphicon-info"></span> <?=$lang['quarantine']['qitem'];?></h3>
+ <h3 class="modal-title"><i class="bi bi-info-circle-fill"></i> <?=$lang['quarantine']['qitem'];?></h3>
</div>
<div class="modal-body">
<div id="qid_error" style="display:none" class="alert alert-danger"></div>
diff --git a/mailcow/src/mailcow-dockerized/data/web/modals/user.php b/mailcow/src/mailcow-dockerized/data/web/modals/user.php
index 4d15556..e5d5aa8 100644
--- a/mailcow/src/mailcow-dockerized/data/web/modals/user.php
+++ b/mailcow/src/mailcow-dockerized/data/web/modals/user.php
@@ -24,7 +24,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-4 col-sm-8">
- <button class="btn btn-default" data-action="edit_selected" data-id="fido2ChangeFn" data-item="null" data-api-url='edit/fido2-fn' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
+ <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="fido2ChangeFn" data-item="null" data-api-url='edit/fido2-fn' data-api-attr='{}' href="#"><?=$lang['admin']['save'];?></button>
</div>
</div>
</form>
@@ -182,7 +182,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_syncjob" data-api-url='add/syncjob' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_syncjob" data-api-url='add/syncjob' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -228,7 +228,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
- <button class="btn btn-default" data-action="add_item" data-id="add_apppasswd" data-api-url='add/app-passwd' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
+ <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="add_item" data-id="add_apppasswd" data-api-url='add/app-passwd' data-api-attr='{}' href="#"><?=$lang['admin']['add'];?></button>
</div>
</div>
</form>
@@ -240,7 +240,10 @@
<div class="modal fade" id="syncjobLogModal" tabindex="-1" role="dialog" aria-labelledby="syncjobLogModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
- <div class="modal-header"><h4 class="modal-title">Log</h4></div>
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title">Log</h3>
+ </div>
<div class="modal-body">
<textarea class="form-control textarea-code" rows="20" id="logText" spellcheck="false"></textarea>
</div>
@@ -251,6 +254,46 @@
<div class="modal fade" id="pwChangeModal" tabindex="-1" role="dialog" aria-labelledby="pwChangeModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button>
+ <h3 class="modal-title"><?=$lang['user']['change_password'];?></h3>
+ </div>
+ <div class="modal-body">
+ <form class="form-horizontal" data-cached-form="false" data-id="pwchange" role="form" method="post" autocomplete="off">
+ <div class="form-group">
+ <label class="control-label col-sm-3" for="user_new_pass"><?=$lang['user']['new_password'];?> (<a href="#" class="generate_password"><?=$lang['user']['generate'];?></a>)</label>
+ <div class="col-sm-5">
+ <input type="password" data-pwgen-field="true" data-hibp="true" class="form-control" name="user_new_pass" autocomplete="new-password" required>
+ </div>
+ </div>
+ <div class="form-group">
+ <label class="control-label col-sm-3" for="user_new_pass2"><?=$lang['user']['new_password_repeat'];?></label>
+ <div class="col-sm-5">
+ <input type="password" data-pwgen-field="true" class="form-control" name="user_new_pass2" autocomplete="new-password" required>
+ <p class="help-block"><?=$lang['user']['new_password_description'];?></p>
+ </div>
+ </div>
+ <hr>
+ <div class="form-group">
+ <label class="control-label col-sm-3" for="user_old_pass"><?=$lang['user']['password_now'];?></label>
+ <div class="col-sm-5">
+ <input type="password" class="form-control" name="user_old_pass" autocomplete="off" required>
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-3 col-sm-9">
+ <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="pwchange" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#"><?=$lang['user']['change_password'];?></button>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div><!-- pw change modal -->
+<!-- pw change modal -->
+<div class="modal fade" id="tempAliasModal" tabindex="-1" role="dialog" aria-labelledby="tempAliasModalLabel">
+ <div class="modal-dialog" role="document">
+ <div class="modal-content">
<div class="modal-body">
<form class="form-horizontal" data-cached-form="false" data-id="pwchange" role="form" method="post" autocomplete="off">
<div class="form-group">
@@ -275,7 +318,7 @@
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
- <button class="btn btn-default" data-action="edit_selected" data-id="pwchange" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#"><?=$lang['user']['change_password'];?></button>
+ <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="pwchange" data-item="null" data-api-url='edit/self' data-api-attr='{}' href="#"><?=$lang['user']['change_password'];?></button>
</div>
</div>
</form>