[Web] Various PHP 8 fixes, partly fixes #4219
parent
7e958c9b26
commit
2cd0b56b14
|
@ -2,19 +2,19 @@
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
|
||||||
$AuthUsers = array("admin", "domainadmin", "user");
|
$AuthUsers = array("admin", "domainadmin", "user");
|
||||||
if (!isset($_SESSION['mailcow_cc_role']) OR !in_array($_SESSION['mailcow_cc_role'], $AuthUsers)) {
|
if (!isset($_SESSION['mailcow_cc_role']) OR !in_array($_SESSION['mailcow_cc_role'], $AuthUsers)) {
|
||||||
header('Location: /');
|
header('Location: /');
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';
|
||||||
?>
|
?>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">
|
<div class="panel-heading">
|
||||||
<h3 class="panel-title"><?=$lang['edit']['title'];?></h3>
|
<h3 class="panel-title"><?=$lang['edit']['title'];?></h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<?php
|
<?php
|
||||||
if (isset($_SESSION['mailcow_cc_role'])) {
|
if (isset($_SESSION['mailcow_cc_role'])) {
|
||||||
if ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin") {
|
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">
|
<div class="form-group">
|
||||||
<label class="control-label col-sm-2" for="script_data"><?=$lang['edit']['target_address'];?>:</label>
|
<label class="control-label col-sm-2" for="script_data"><?=$lang['edit']['target_address'];?>:</label>
|
||||||
<div class="col-sm-10">
|
<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>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -623,385 +623,399 @@ if (isset($_SESSION['mailcow_cc_role'])) {
|
||||||
$rlyhosts = relayhost('get');
|
$rlyhosts = relayhost('get');
|
||||||
if (!empty($result)) {
|
if (!empty($result)) {
|
||||||
?>
|
?>
|
||||||
<h4><?=$lang['edit']['mailbox'];?></h4>
|
<ul class="nav nav-tabs responsive-tabs" role="tablist">
|
||||||
<form class="form-horizontal" data-id="editmailbox" role="form" method="post">
|
<li class="active"><a data-toggle="tab" href="#medit"><?=$lang['edit']['mailbox'];?></a></li>
|
||||||
<input type="hidden" value="default" name="sender_acl">
|
<li><a data-toggle="tab" href="#mpushover"><?=$lang['edit']['pushover'];?></a></li>
|
||||||
<input type="hidden" value="0" name="force_pw_update">
|
<li><a data-toggle="tab" href="#macl"><?=$lang['edit']['acl'];?></a></li>
|
||||||
<input type="hidden" value="0" name="sogo_access">
|
<li><a data-toggle="tab" href="#mrl"><?=$lang['edit']['ratelimit'];?></a></li>
|
||||||
<input type="hidden" value="0" name="protocol_access">
|
</ul>
|
||||||
<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"> </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>
|
|
||||||
<hr>
|
<hr>
|
||||||
<form data-id="pushover" class="form well" method="post">
|
<div class="tab-content">
|
||||||
<input type="hidden" value="0" name="evaluate_x_prio">
|
<div id="medit" class="tab-pane in active">
|
||||||
<input type="hidden" value="0" name="only_x_prio">
|
<form class="form-horizontal" data-id="editmailbox" role="form" method="post">
|
||||||
<input type="hidden" value="0" name="active">
|
<input type="hidden" value="default" name="sender_acl">
|
||||||
<div class="row">
|
<input type="hidden" value="0" name="force_pw_update">
|
||||||
<div class="col-sm-1">
|
<input type="hidden" value="0" name="sogo_access">
|
||||||
<p class="help-block"><a href="https://pushover.net" target="_blank"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAACglBMVEUAAAAAAAEAAAAilecFGigAAAAAAAAAAAAAAAANj+c3n+Ypm+oeYI4KWI4MieAtkdQbleoJcLcjmeswmN4Rit4KgdMKUYQJKUAQSnILL0kMNlMSTngimOoNPF0hlOQBBgkNOlkRS3MHIjUhk+IPf8wKLUYsjM0AAAASTngAAAAAAAAPfckbdLIbdrYUWIgegsgce70knfEAAAAknfENOVkGHi8YaaIjnvEdgMUhkuAQSG8aca0hleQUh9YLjOM4nOEMgtMcbaYWa6YemO02ltkKhNktgLodYZEPXJEyi8kKesktfLUzj84cWYMiluckZ5YJXJYeW4Y0k9YKfs4yjs0pc6YHZaUviskLfMkqmugak+cqkNcViNcqeK4Iaq4XRmYGPmYMKDsFJTstgr0LdL0ti84CCQ4BCQ4Qgc8rlt8XjN8shcQsi8wZSGgEP2cRMEUDKkUAAAD///8dmvEamfExo/EXmPEWl/ERlvElnvEsofEjnfETl/Enn/Ezo/E4pvEvovEfm/E1pPEzpPEvofEOlfEpoPEamPEQlfEYmfE6p/EgnPEVlvEroPE3pfE2pfENk/Ern/E3pPEcmfEfmvEnnvBlufT6/P0soPAknPDd7/zs9vzo9PxBqfItofAqoPD9/f3B4/q43/mx2/l/xfZ6w/Vxv/VtvfVgt/RXtPNTsfNEq/L3+/31+v3a7fvR6vvH5fqs2vmc0/jx+P3v9/3h8fzW7PvV7PvL5/q13fmo1/mh1PiY0fiNy/aHyfZ2wfVou/Vdt/RPsPM3oeoQkuowmeAgjdgcgMQbeLrw9/3k8vy74Pm63/mX0PdYtfNNr/Ikm+4wnOchkuAVjOAfdrMVcrOdoJikAAAAcnRSTlMAIQ8IzzweFwf+/fvw8P79+/Xt7e3p6eji4d7U08y8qZyTiIWDgn53bWxqaWBKQ0JBOjUwMCkoJCEfHBkT/vz8/Pv7+vr69/b29PTy7ezm5ubm5N7e29vQ0M/Pv7+4uLW1pqaWloWDg3x7e21mUVFFRUXdPracAAAEbElEQVRIx4WUZbvaQBCFF+ru7u7u7u7u7t4mvVwSoBC0JIUCLRQolLq7u7vr/+nMLkmQyvlwyfPcd86e3ZldUqwyQ/p329J+XfutPQYOLUP+q55rFtQJRvY79+xxlZTUWbKpz7/xrrMr2+3BoNPpdLn2lJQ4HEeqLOr1d7z7XNkesQed4A848G63Oy4Gmg/6Mz542QvZbqe8C/Ig73CLYiYTrtLmT3zfqbIcAR7y4wIqH/B6M9Fo0+Ldb6sM9ph/v4ozPuz12mxRofaAAr7jCNkuoz/jNf9AGHibkBCm51fsGKvxsAGWx4H+jBcEi6V2birDpCL/9Klrd1KHbiSvPWP8V0tTnTfO03iXi57P6WNHOVUf44IFdFDRz6pV5fw8Zy5z3JVH5+R48OwxqDiGvKJIY9R+9JsCuJ5HPg74OVEMpz+nbdEPUHEWeEk6IDUnTC1l5r+f8uffc0cfxc8fS17kLso24SwUPFDA/6DE82xKDOPliJ7n/GGOOyWK9zD9CdjvOfg9Dv6AH+AX04LW9gj2i8W/APx1UbxwCAu+wPmcpgUKL/EHdvtq4uwaZwCuznPJVY5LHhED15G/isd5Hz4eKui/e/du02YoKFeD5mHzHIN/nxEDe25gQQwKorAid04CfyzwL4XutXvl1Pt1guMOwwKPkU8mYIFT8JHK+vv8prpDScUVL+j8s3lOctw1GIhbWHAS+HgKPk7xPM/4UtNAYmzizJkf6NgTb/gM8jePQLsewMdthS3g95tMpT1IhVm6v1s8fYmLeb13Odwp8Fh5KY048y/d14WUrwrb1e/X/rNp73nkD8kWS+wi/MZ4XuetG4mhKubJm3/WNEvi8SHwB56nPKjUam0LBdp9ARwupFemTYudvgN/L1+A/Ko/LGBuS8pPy+YR1fuCTWNKnUyoeUyYx2o2dyEVGmr5xTD42xzvkD16+Pb9WIIH6fmt1r3mbsTY7Bvw+n23naT8BUWh86bz6G/e259UXPUK3gfAxQDlo7Rpx3Geqb2e3wp83SGEdKpB7zvwYbzvT2n65xLwbH6YP+M9C8vA8E1wxLU8gkCbdhXGUyrMgwVrcbzLHonr78lzDvWM3q/C/HtDlXoSUIe3YkblhRPIX4E8Oo/9siLv8dRjV7SBlkdgTXvKS7nzsA/9AfeEuhKq9T8zWIDv1Sd6ETAP4D6/H/1V+1BojvruNa4SZXz4JhY84dV5MOF5agUvu5OsOo+KRpG30KalEnoeDccFlutPZYs38D5n3zcpr1/0fBhfb3DOY1z2tSAgLxWezz6zuoHhfUmOejf6blHQH/sFuJYfcMZX307ytKvRa3ifoV/586P5j+tICtS77BuJxzxYAPZsntX8k3eSIhlajK4p8b7iefCEKs03kD/I2LnxL9ovH+43y4fAv1YrI/mzDBsavAX/UppfzVOrZT/ydxk6lJ047MfLfVbcb6hS9ZEzWxekKQ5WrtPqZg3rV6tWrX6Tle3KQZj/q6KxQnmDoXwFY0VSrN9e8FRXBCTAvwAAAABJRU5ErkJggg==" class="img img-fluid"></a></p>
|
<input type="hidden" value="0" name="protocol_access">
|
||||||
</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="form-group">
|
||||||
<div class="row">
|
<label class="control-label col-sm-2" for="name"><?=$lang['edit']['full_name'];?></label>
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-10">
|
||||||
<div class="form-group">
|
<input type="text" class="form-control" name="name" value="<?=htmlspecialchars($result['name'], ENT_QUOTES, 'UTF-8');?>">
|
||||||
<label for="token">API Token/Key (Application)</label>
|
</div>
|
||||||
<input type="text" class="form-control" name="token" maxlength="30" value="<?=$pushover_data['token'];?>" required>
|
</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"> </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 class="col-sm-6">
|
</div>
|
||||||
<div class="form-group">
|
</div>
|
||||||
<label for="key">User/Group Key</label>
|
<div class="form-group">
|
||||||
<input type="text" class="form-control" name="key" maxlength="30" value="<?=$pushover_data['key'];?>" required>
|
<label class="control-label col-sm-2" for="password"><?=$lang['edit']['password'];?> (<a href="#" class="generate_password"><?=$lang['edit']['generate'];?></a>)</label>
|
||||||
</div>
|
<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 class="col-sm-6">
|
</div>
|
||||||
<div class="form-group">
|
</div>
|
||||||
<label for="title"><?=$lang['edit']['pushover_title'];?></label>
|
<?php if (getenv('SKIP_SOGO') != "y") { ?>
|
||||||
<input type="text" class="form-control" name="title" value="<?=$pushover_data['title'];?>" placeholder="Mail">
|
<div data-acl="<?=$_SESSION['acl']['sogo_access'];?>" class="form-group">
|
||||||
</div>
|
<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 class="col-sm-6">
|
</div>
|
||||||
<div class="form-group">
|
</div>
|
||||||
<label for="text"><?=$lang['edit']['pushover_text'];?></label>
|
<?php } ?>
|
||||||
<input type="text" class="form-control" name="text" value="<?=$pushover_data['text'];?>" placeholder="You've got mail 📧">
|
<div class="form-group">
|
||||||
</div>
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
</div>
|
<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 class="col-sm-12">
|
</div>
|
||||||
<div class="form-group">
|
</div>
|
||||||
<label for="text"><?=$lang['edit']['pushover_sender_array'];?></label>
|
</form>
|
||||||
<input type="text" class="form-control" name="senders" value="<?=$pushover_data['senders'];?>" placeholder="sender1@example.com, sender2@example.com">
|
</div>
|
||||||
</div>
|
<div id="mpushover" class="tab-pane">
|
||||||
</div>
|
<form data-id="pushover" class="form well" method="post">
|
||||||
<div class="col-sm-12">
|
<input type="hidden" value="0" name="evaluate_x_prio">
|
||||||
<div class="checkbox">
|
<input type="hidden" value="0" name="only_x_prio">
|
||||||
<label><input type="checkbox" value="1" name="active" <?=($pushover_data['active']=="1") ? "checked" : null;?>> <?=$lang['edit']['active'];?></label>
|
<input type="hidden" value="0" name="active">
|
||||||
</div>
|
<div class="row">
|
||||||
</div>
|
<div class="col-sm-1">
|
||||||
<div class="col-sm-12">
|
<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>
|
||||||
<legend style="cursor:pointer;margin-top:10px" data-target="#po_advanced" unselectable="on" data-toggle="collapse">
|
</div>
|
||||||
<i class="bi bi-plus"></i> <?=$lang['edit']['advanced_settings'];?>
|
<div class="col-sm-10">
|
||||||
</legend>
|
<p class="help-block"><?=sprintf($lang['edit']['pushover_info'], $mailbox);?></p>
|
||||||
</div>
|
<p class="help-block"><?=$lang['edit']['pushover_vars'];?>: <code>{SUBJECT}</code>, <code>{SENDER}</code></p>
|
||||||
<div class="col-sm-12">
|
<div class="form-group">
|
||||||
<div id="po_advanced" class="collapse">
|
<div class="row">
|
||||||
<div class="form-group">
|
<div class="col-sm-6">
|
||||||
<label for="text"><?=$lang['edit']['pushover_sender_regex'];?></label>
|
<div class="form-group">
|
||||||
<input type="text" class="form-control" name="senders_regex" value="<?=$pushover_data['senders_regex'];?>" placeholder="/(.*@example\.org$|^foo@example\.com$)/i" regex="true">
|
<label for="token">API Token/Key (Application)</label>
|
||||||
<div class="checkbox">
|
<input type="text" class="form-control" name="token" maxlength="30" value="<?=$pushover_data['token'];?>" required>
|
||||||
<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>
|
||||||
|
</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">
|
<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>
|
</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>
|
</div>
|
||||||
<div class="btn-group" data-acl="<?=$_SESSION['acl']['pushover'];?>">
|
</form>
|
||||||
<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>
|
||||||
</form>
|
<div id="macl" class="tab-pane">
|
||||||
<hr>
|
<form data-id="useracl" class="form-inline well" method="post">
|
||||||
<form data-id="mboxratelimit" class="form-inline well" method="post">
|
<div class="row">
|
||||||
<div class="row">
|
<div class="col-sm-1">
|
||||||
<div class="col-sm-1">
|
<p class="help-block">ACL</p>
|
||||||
<p class="help-block"><?=$lang['acl']['ratelimit'];?></p>
|
</div>
|
||||||
</div>
|
<div class="col-sm-10">
|
||||||
<div class="col-sm-10">
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<select id="user_acl" name="user_acl" size="10" multiple>
|
||||||
<input name="rl_value" type="number" autocomplete="off" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="<?=$lang['ratelimit']['disabled']?>">
|
<?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>
|
||||||
<div class="form-group">
|
</form>
|
||||||
<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>
|
||||||
</form>
|
<div id="mrl" class="tab-pane">
|
||||||
<form data-id="useracl" class="form-inline well" method="post">
|
<form data-id="mboxratelimit" class="form-inline well" method="post">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-1">
|
<div class="col-sm-1">
|
||||||
<p class="help-block">ACL</p>
|
<p class="help-block"><?=$lang['acl']['ratelimit'];?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<select id="user_acl" name="user_acl" size="10" multiple>
|
<input name="rl_value" type="number" autocomplete="off" value="<?=(!empty($rl['value'])) ? $rl['value'] : null;?>" class="form-control" placeholder="<?=$lang['ratelimit']['disabled']?>">
|
||||||
<?php
|
</div>
|
||||||
$user_acls = acl('get', 'user', $mailbox);
|
<div class="form-group">
|
||||||
foreach ($user_acls as $acl => $val):
|
<select name="rl_frame" class="form-control">
|
||||||
?>
|
<option value="s" <?=(isset($rl['frame']) && $rl['frame'] == 's') ? 'selected' : null;?>><?=$lang['ratelimit']['second']?></option>
|
||||||
<option value="<?=$acl;?>" <?=($val == 1) ? 'selected' : null;?>><?=$lang['acl'][$acl];?></option>
|
<option value="m" <?=(isset($rl['frame']) && $rl['frame'] == 'm') ? 'selected' : null;?>><?=$lang['ratelimit']['minute']?></option>
|
||||||
<?php
|
<option value="h" <?=(isset($rl['frame']) && $rl['frame'] == 'h') ? 'selected' : null;?>><?=$lang['ratelimit']['hour']?></option>
|
||||||
endforeach;
|
<option value="d" <?=(isset($rl['frame']) && $rl['frame'] == 'd') ? 'selected' : null;?>><?=$lang['ratelimit']['day']?></option>
|
||||||
?>
|
</select>
|
||||||
</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>
|
||||||
<div class="form-group">
|
</form>
|
||||||
<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>
|
||||||
</form>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1601,14 +1615,14 @@ if (isset($_SESSION['mailcow_cc_role'])) {
|
||||||
}
|
}
|
||||||
else {
|
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
|
<?php
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="<?=$_SESSION['return_to'];?>">← <?=$lang['edit']['previous'];?></a>
|
<a href="<?=$_SESSION['return_to'];?>">← <?=$lang['edit']['previous'];?></a>
|
||||||
</div> <!-- /container -->
|
</div> <!-- /container -->
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
|
|
|
@ -268,9 +268,9 @@ if (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == "adm
|
||||||
$currents = dns_get_record($record[0], 52, $_, $_, TRUE);
|
$currents = dns_get_record($record[0], 52, $_, $_, TRUE);
|
||||||
foreach ($currents as &$current) {
|
foreach ($currents as &$current) {
|
||||||
$current['type'] = 'TLSA';
|
$current['type'] = 'TLSA';
|
||||||
$current['cert_usage'] = hexdec(bin2hex($current['data']{0}));
|
$current['cert_usage'] = hexdec(bin2hex($current['data'][0]));
|
||||||
$current['selector'] = hexdec(bin2hex($current['data']{1}));
|
$current['selector'] = hexdec(bin2hex($current['data'][1]));
|
||||||
$current['match_type'] = hexdec(bin2hex($current['data']{2}));
|
$current['match_type'] = hexdec(bin2hex($current['data'][2]));
|
||||||
$current['cert_data'] = bin2hex(substr($current['data'], 3));
|
$current['cert_data'] = bin2hex(substr($current['data'], 3));
|
||||||
$current['data'] = $current['cert_usage'] . ' ' . $current['selector'] . ' ' . $current['match_type'] . ' ' . $current['cert_data'];
|
$current['data'] = $current['cert_usage'] . ' ' . $current['selector'] . ' ' . $current['match_type'] . ' ' . $current['cert_data'];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
function dkim($_action, $_data = null, $privkey = false) {
|
function dkim($_action, $_data = null, $privkey = false) {
|
||||||
global $redis;
|
global $redis;
|
||||||
global $lang;
|
global $lang;
|
||||||
switch ($_action) {
|
switch ($_action) {
|
||||||
case 'add':
|
case 'add':
|
||||||
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
||||||
|
@ -13,7 +13,7 @@ function dkim($_action, $_data = null, $privkey = false) {
|
||||||
);
|
);
|
||||||
return 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';
|
$dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';
|
||||||
$domains = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['domains']));
|
$domains = array_map('trim', preg_split( "/( |,|;|\n)/", $_data['domains']));
|
||||||
$domains = array_filter($domains);
|
$domains = array_filter($domains);
|
||||||
|
@ -167,9 +167,9 @@ function dkim($_action, $_data = null, $privkey = false) {
|
||||||
array_shift($pem_public_key_array);
|
array_shift($pem_public_key_array);
|
||||||
array_pop($pem_public_key_array);
|
array_pop($pem_public_key_array);
|
||||||
// Implode as single string
|
// 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';
|
$dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';
|
||||||
$domain = $_data['domain'];
|
$domain = $_data['domain'];
|
||||||
if (!is_valid_domain_name($domain)) {
|
if (!is_valid_domain_name($domain)) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
@ -251,7 +251,7 @@ function dkim($_action, $_data = null, $privkey = false) {
|
||||||
}
|
}
|
||||||
if ($GLOBALS['SPLIT_DKIM_255'] === true) {
|
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);
|
$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 {
|
else {
|
||||||
$dkimdata['dkim_txt'] = 'v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data;
|
$dkimdata['dkim_txt'] = 'v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data;
|
||||||
|
|
|
@ -18,7 +18,7 @@ function fail2ban($_action, $_data = null) {
|
||||||
}
|
}
|
||||||
if (isset($tmp_wl_data)) {
|
if (isset($tmp_wl_data)) {
|
||||||
natsort($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 {
|
else {
|
||||||
$f2b_options['whitelist'] = "";
|
$f2b_options['whitelist'] = "";
|
||||||
|
@ -34,7 +34,7 @@ function fail2ban($_action, $_data = null) {
|
||||||
}
|
}
|
||||||
if (isset($tmp_bl_data)) {
|
if (isset($tmp_bl_data)) {
|
||||||
natsort($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 {
|
else {
|
||||||
$f2b_options['blacklist'] = "";
|
$f2b_options['blacklist'] = "";
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
function fwdhost($_action, $_data = null) {
|
function fwdhost($_action, $_data = null) {
|
||||||
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/spf.inc.php';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/spf.inc.php';
|
||||||
global $redis;
|
global $redis;
|
||||||
global $lang;
|
global $lang;
|
||||||
$_data_log = $_data;
|
$_data_log = $_data;
|
||||||
switch ($_action) {
|
switch ($_action) {
|
||||||
case 'add':
|
case 'add':
|
||||||
|
@ -57,7 +57,7 @@ function fwdhost($_action, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||||
'msg' => array('forwarding_host_added', htmlspecialchars(implode(', ', $hosts)))
|
'msg' => array('forwarding_host_added', htmlspecialchars(implode(', ', (array)$hosts)))
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'edit':
|
case 'edit':
|
||||||
|
|
|
@ -201,7 +201,7 @@ function password_complexity($_action, $_data = null) {
|
||||||
$policy_text[] = sprintf($lang['admin']["password_policy_$name"], $value);
|
$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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -982,8 +982,8 @@ function edit_user_account($_data) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!empty($_data['user_new_pass']) && !empty($_data['user_new_pass2'])) {
|
if (!empty($_data['user_new_pass']) && !empty($_data['user_new_pass2'])) {
|
||||||
$password_new = $_data['user_new_pass'];
|
$password_new = $_data['user_new_pass'];
|
||||||
$password_new2 = $_data['user_new_pass2'];
|
$password_new2 = $_data['user_new_pass2'];
|
||||||
if (password_check($password_new, $password_new2) !== true) {
|
if (password_check($password_new, $password_new2) !== true) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1010,7 +1010,7 @@ function user_get_alias_details($username) {
|
||||||
$data['direct_aliases'] = array();
|
$data['direct_aliases'] = array();
|
||||||
$data['shared_aliases'] = array();
|
$data['shared_aliases'] = array();
|
||||||
if ($_SESSION['mailcow_cc_role'] == "user") {
|
if ($_SESSION['mailcow_cc_role'] == "user") {
|
||||||
$username = $_SESSION['mailcow_cc_username'];
|
$username = $_SESSION['mailcow_cc_username'];
|
||||||
}
|
}
|
||||||
if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -448,17 +448,17 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
);
|
);
|
||||||
return false;
|
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'];
|
$description = $_data['description'];
|
||||||
if (empty($description)) {
|
if (empty($description)) {
|
||||||
$description = $domain;
|
$description = $domain;
|
||||||
}
|
}
|
||||||
$aliases = (int)$_data['aliases'];
|
$aliases = (int)$_data['aliases'];
|
||||||
$mailboxes = (int)$_data['mailboxes'];
|
$mailboxes = (int)$_data['mailboxes'];
|
||||||
$defquota = (int)$_data['defquota'];
|
$defquota = (int)$_data['defquota'];
|
||||||
$maxquota = (int)$_data['maxquota'];
|
$maxquota = (int)$_data['maxquota'];
|
||||||
$restart_sogo = (int)$_data['restart_sogo'];
|
$restart_sogo = (int)$_data['restart_sogo'];
|
||||||
$quota = (int)$_data['quota'];
|
$quota = (int)$_data['quota'];
|
||||||
if ($defquota > $maxquota) {
|
if ($defquota > $maxquota) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
@ -683,7 +683,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
$gotos = array_unique($gotos);
|
$gotos = array_unique($gotos);
|
||||||
$gotos = array_filter($gotos);
|
$gotos = array_filter($gotos);
|
||||||
if (empty($gotos)) { return false; }
|
if (empty($gotos)) { return false; }
|
||||||
$goto = implode(",", $gotos);
|
$goto = implode(",", (array)$gotos);
|
||||||
}
|
}
|
||||||
foreach ($addresses as $address) {
|
foreach ($addresses as $address) {
|
||||||
if (empty($address)) {
|
if (empty($address)) {
|
||||||
|
@ -936,7 +936,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
$password = $_data['password'];
|
$password = $_data['password'];
|
||||||
$password2 = $_data['password2'];
|
$password2 = $_data['password2'];
|
||||||
$name = ltrim(rtrim($_data['name'], '>'), '<');
|
$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) {
|
if ((!isset($_SESSION['acl']['unlimited_quota']) || $_SESSION['acl']['unlimited_quota'] != "1") && $quota_m === 0) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
@ -959,7 +959,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
$relayhost = (isset($_data['relayhost'])) ? intval($_data['relayhost']) : 0;
|
$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_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']);
|
$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(
|
$mailbox_attrs = json_encode(
|
||||||
array(
|
array(
|
||||||
'force_pw_update' => strval($force_pw_update),
|
'force_pw_update' => strval($force_pw_update),
|
||||||
|
@ -1494,8 +1494,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$lowspamlevel = explode(',', $_data['spam_score'])[0];
|
$lowspamlevel = explode(',', $_data['spam_score'])[0];
|
||||||
$highspamlevel = explode(',', $_data['spam_score'])[1];
|
$highspamlevel = explode(',', $_data['spam_score'])[1];
|
||||||
if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {
|
if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
@ -1572,7 +1572,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
|
||||||
'msg' => array('mailbox_modified', htmlspecialchars(implode(', ', $usernames)))
|
'msg' => array('mailbox_modified', htmlspecialchars(implode(', ', (array)$usernames)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2080,7 +2080,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
}
|
}
|
||||||
$gotos = array_unique($gotos);
|
$gotos = array_unique($gotos);
|
||||||
$gotos = array_filter($gotos);
|
$gotos = array_filter($gotos);
|
||||||
$goto = implode(",", $gotos);
|
$goto = implode(",", (array)$gotos);
|
||||||
}
|
}
|
||||||
if (!empty($goto)) {
|
if (!empty($goto)) {
|
||||||
$stmt = $pdo->prepare("UPDATE `alias` SET
|
$stmt = $pdo->prepare("UPDATE `alias` SET
|
||||||
|
@ -3002,7 +3002,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
while($field = array_shift($fields)) {
|
while($field = array_shift($fields)) {
|
||||||
$shown_fields[] = $field['Field'];
|
$shown_fields[] = $field['Field'];
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("SELECT " . implode(',', $shown_fields) . ",
|
$stmt = $pdo->prepare("SELECT " . implode(',', (array)$shown_fields) . ",
|
||||||
`active`
|
`active`
|
||||||
FROM `imapsync` WHERE id = :id");
|
FROM `imapsync` WHERE id = :id");
|
||||||
}
|
}
|
||||||
|
@ -3017,7 +3017,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
while($field = array_shift($fields)) {
|
while($field = array_shift($fields)) {
|
||||||
$shown_fields[] = $field['Field'];
|
$shown_fields[] = $field['Field'];
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("SELECT " . implode(',', $shown_fields) . ",
|
$stmt = $pdo->prepare("SELECT " . implode(',', (array)$shown_fields) . ",
|
||||||
`active`
|
`active`
|
||||||
FROM `imapsync` WHERE id = :id");
|
FROM `imapsync` WHERE id = :id");
|
||||||
}
|
}
|
||||||
|
@ -3399,7 +3399,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
$stmt->execute(array(':domain' => $row['domain']));
|
$stmt->execute(array(':domain' => $row['domain']));
|
||||||
$SumQuotaInUse = $stmt->fetch(PDO::FETCH_ASSOC);
|
$SumQuotaInUse = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
$rl = ratelimit('get', 'domain', $_data);
|
$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)) {
|
if ($domaindata['max_new_mailbox_quota'] > ($row['maxquota'] * 1048576)) {
|
||||||
$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['msgs_total'] = 0;
|
||||||
}
|
}
|
||||||
$domaindata['mboxes_in_domain'] = $MailboxDataDomain['count'];
|
$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['domain_name'] = $row['domain'];
|
||||||
$domaindata['description'] = $row['description'];
|
$domaindata['description'] = $row['description'];
|
||||||
$domaindata['max_num_aliases_for_domain'] = $row['aliases'];
|
$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);
|
$AliasDataDomain = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
(isset($AliasDataDomain['alias_count'])) ? $domaindata['aliases_in_domain'] = $AliasDataDomain['alias_count'] : $domaindata['aliases_in_domain'] = "0";
|
(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")
|
if ($_SESSION['mailcow_cc_role'] == "admin")
|
||||||
{
|
{
|
||||||
$stmt = $pdo->prepare("SELECT GROUP_CONCAT(`username` SEPARATOR ', ') AS domain_admins FROM `domain_admins` WHERE `domain` = :domain");
|
$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);
|
$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 = $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));
|
$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 = $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()));
|
$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['max_new_quota'] = ($DomainQuota['quota'] * 1048576) - $MailboxUsage['in_use'];
|
||||||
$mailboxdata['spam_aliases'] = $SpamaliasUsage['sa_count'];
|
$mailboxdata['spam_aliases'] = $SpamaliasUsage['sa_count'];
|
||||||
$mailboxdata['pushover_active'] = ($PushoverActive['pushover_active'] == 1) ? 1 : 0;
|
$mailboxdata['pushover_active'] = ($PushoverActive['pushover_active'] == 1) ? 1 : 0;
|
||||||
|
@ -3877,7 +3877,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
||||||
);
|
);
|
||||||
continue;
|
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`
|
$stmt = $pdo->prepare("SELECT `username` FROM `mailbox`
|
||||||
WHERE `domain` = :domain");
|
WHERE `domain` = :domain");
|
||||||
$stmt->execute(array(':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) {
|
if (($key = array_search($username, $goto_exploded)) !== false) {
|
||||||
unset($goto_exploded[$key]);
|
unset($goto_exploded[$key]);
|
||||||
}
|
}
|
||||||
$gotos_rebuild = implode(',', $goto_exploded);
|
$gotos_rebuild = implode(',', (array)$goto_exploded);
|
||||||
$stmt = $pdo->prepare("UPDATE `alias` SET
|
$stmt = $pdo->prepare("UPDATE `alias` SET
|
||||||
`goto` = :goto
|
`goto` = :goto
|
||||||
WHERE `address` = :address");
|
WHERE `address` = :address");
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
<?php
|
<?php
|
||||||
function oauth2($_action, $_type, $_data = null) {
|
function oauth2($_action, $_type, $_data = null) {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
global $redis;
|
global $redis;
|
||||||
global $lang;
|
global $lang;
|
||||||
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
if ($_SESSION['mailcow_cc_role'] != "admin") {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data),
|
'log' => array(__FUNCTION__, $_action, $_type, $_data),
|
||||||
'msg' => 'access_denied'
|
'msg' => 'access_denied'
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
switch ($_action) {
|
switch ($_action) {
|
||||||
case 'add':
|
case 'add':
|
||||||
switch ($_type) {
|
switch ($_type) {
|
||||||
|
@ -188,7 +188,7 @@ function oauth2($_action, $_type, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data),
|
'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;
|
break;
|
||||||
case 'refresh_token':
|
case 'refresh_token':
|
||||||
|
@ -210,7 +210,7 @@ function oauth2($_action, $_type, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_type, $_data),
|
'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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
function policy($_action, $_scope, $_data = null) {
|
function policy($_action, $_scope, $_data = null) {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
global $redis;
|
global $redis;
|
||||||
global $lang;
|
global $lang;
|
||||||
$_data_log = $_data;
|
$_data_log = $_data;
|
||||||
switch ($_action) {
|
switch ($_action) {
|
||||||
case 'add':
|
case 'add':
|
||||||
if (!isset($_SESSION['acl']['spam_policy']) || $_SESSION['acl']['spam_policy'] != "1" ) {
|
if (!isset($_SESSION['acl']['spam_policy']) || $_SESSION['acl']['spam_policy'] != "1" ) {
|
||||||
|
@ -261,7 +261,7 @@ function policy($_action, $_scope, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
|
'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),
|
||||||
'msg' => array('items_deleted', implode(', ', $prefids))
|
'msg' => array('items_deleted', implode(', ', (array)$prefids))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
function pushover($_action, $_data = null) {
|
function pushover($_action, $_data = null) {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
switch ($_action) {
|
switch ($_action) {
|
||||||
case 'edit':
|
case 'edit':
|
||||||
if (!isset($_SESSION['acl']['pushover']) || $_SESSION['acl']['pushover'] != "1" ) {
|
if (!isset($_SESSION['acl']['pushover']) || $_SESSION['acl']['pushover'] != "1" ) {
|
||||||
|
@ -81,7 +81,7 @@ function pushover($_action, $_data = null) {
|
||||||
}
|
}
|
||||||
$senders = array_filter($senders);
|
$senders = array_filter($senders);
|
||||||
if (empty($senders)) { $senders = ''; }
|
if (empty($senders)) { $senders = ''; }
|
||||||
$senders = implode(",", $senders);
|
$senders = implode(",", (array)$senders);
|
||||||
if (!ctype_alnum($key) || strlen($key) != 30) {
|
if (!ctype_alnum($key) || strlen($key) != 30) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'danger',
|
'type' => 'danger',
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
function relayhost($_action, $_data = null) {
|
function relayhost($_action, $_data = null) {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
global $lang;
|
global $lang;
|
||||||
$_data_log = $_data;
|
$_data_log = $_data;
|
||||||
switch ($_action) {
|
switch ($_action) {
|
||||||
case 'add':
|
case 'add':
|
||||||
|
@ -45,7 +45,7 @@ function relayhost($_action, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||||
'msg' => array('relayhost_added', htmlspecialchars(implode(', ', $hosts)))
|
'msg' => array('relayhost_added', htmlspecialchars(implode(', ', (array)$hosts)))
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'edit':
|
case 'edit':
|
||||||
|
@ -100,7 +100,7 @@ function relayhost($_action, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||||
'msg' => array('object_modified', htmlspecialchars(implode(', ', $hostnames)))
|
'msg' => array('object_modified', htmlspecialchars(implode(', ', (array)$hostnames)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -177,8 +177,8 @@ function relayhost($_action, $_data = null) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function transport($_action, $_data = null) {
|
function transport($_action, $_data = null) {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
global $lang;
|
global $lang;
|
||||||
$_data_log = $_data;
|
$_data_log = $_data;
|
||||||
switch ($_action) {
|
switch ($_action) {
|
||||||
case 'add':
|
case 'add':
|
||||||
|
@ -307,7 +307,7 @@ function transport($_action, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||||
'msg' => array('relayhost_added', htmlspecialchars(implode(', ', $hosts)))
|
'msg' => array('relayhost_added', htmlspecialchars(implode(', ', (array)$hosts)))
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case 'edit':
|
case 'edit':
|
||||||
|
@ -442,7 +442,7 @@ function transport($_action, $_data = null) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'success',
|
'type' => 'success',
|
||||||
'log' => array(__FUNCTION__, $_action, $_data_log),
|
'log' => array(__FUNCTION__, $_action, $_data_log),
|
||||||
'msg' => array('object_modified', htmlspecialchars(implode(', ', $hostnames)))
|
'msg' => array('object_modified', htmlspecialchars(implode(', ', (array)$hostnames)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -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());
|
||||||
});
|
});
|
||||||
auto_fill_quota($('#addSelectDomain').val());
|
auto_fill_quota($('#addSelectDomain').val());
|
||||||
$(".goto_checkbox").click(function( event ) {
|
$(".goto_checkbox").click(function( event ) {
|
||||||
$("form[data-id='add_alias'] .goto_checkbox").not(this).prop('checked', false);
|
$("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>');
|
$(e.currentTarget).find('#sieveDataText').html('<pre style="font-size:14px;line-height:1.1">' + sieveScript + '</pre>');
|
||||||
});
|
});
|
||||||
// Disable submit button on script change
|
// 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
|
// Disable all "save" buttons, could be a "related button only" function, todo
|
||||||
$('.add_sieve_script').attr({"disabled": true});
|
$('.add_sieve_script').attr({"disabled": true});
|
||||||
});
|
});
|
||||||
// Validate script data
|
// Validate script data
|
||||||
$(".validate_sieve").click(function( event ) {
|
$(".validate_sieve").click(function( event ) {
|
||||||
event.preventDefault();
|
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":"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":"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":"rl","title":"RL","breakpoints":"xs sm md lg","style":{"min-width":"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":"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":"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":"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","maxWidth":"240px","width":"240px"},"type":"html","title":lang.action,"breakpoints":"xs sm md"}
|
{"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({
|
"rows": $.ajax({
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
|
@ -386,7 +386,7 @@ jQuery(function($){
|
||||||
},
|
},
|
||||||
{"name":"messages","filterable": false,"title":lang.msg_num,"breakpoints":"xs sm md"},
|
{"name":"messages","filterable": false,"title":lang.msg_num,"breakpoints":"xs sm md"},
|
||||||
/* {"name":"rl","title":"RL","breakpoints":"all","style":{"width":"125px"}}, */
|
/* {"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&&'—');}},
|
{"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&&'—');}},
|
||||||
{"name":"action","filterable": false,"sortable": false,"style":{"min-width":"290px","text-align":"right"},"type":"html","title":lang.action,"breakpoints":"xs sm md"}
|
{"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,
|
"empty": lang.empty,
|
||||||
|
@ -443,8 +443,8 @@ jQuery(function($){
|
||||||
item.quarantine_category = lang.q_all;
|
item.quarantine_category = lang.q_all;
|
||||||
}
|
}
|
||||||
if (acl_data.login_as === 1) {
|
if (acl_data.login_as === 1) {
|
||||||
var btnSize = 'btn-xs-third';
|
var btnSize = 'btn-xs-third';
|
||||||
if (ALLOW_ADMIN_EMAIL_LOGIN) btnSize = 'btn-xs-quart';
|
if (ALLOW_ADMIN_EMAIL_LOGIN) btnSize = 'btn-xs-quart';
|
||||||
|
|
||||||
item.action = '<div class="btn-group footable-actions">' +
|
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="/edit/mailbox/' + encodeURIComponent(item.username) + '" class="btn btn-xs ' + btnSize + ' btn-default"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
|
||||||
|
@ -512,9 +512,9 @@ jQuery(function($){
|
||||||
{"name":"name","title":lang.alias},
|
{"name":"name","title":lang.alias},
|
||||||
{"name":"kind","title":lang.kind},
|
{"name":"kind","title":lang.kind},
|
||||||
{"name":"domain","title":lang.domain,"breakpoints":"xs sm"},
|
{"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":"multiple_bookings","filterable": false,"style":{"min-width":"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":"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","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,
|
"empty": lang.empty,
|
||||||
"rows": $.ajax({
|
"rows": $.ajax({
|
||||||
|
@ -650,11 +650,11 @@ jQuery(function($){
|
||||||
ft_recipient_map_table = FooTable.init('#recipient_map_table', {
|
ft_recipient_map_table = FooTable.init('#recipient_map_table', {
|
||||||
"columns": [
|
"columns": [
|
||||||
{"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
|
{"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_old","title":lang.recipient_map_old},
|
||||||
{"name":"recipient_map_new","title":lang.recipient_map_new},
|
{"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":"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","maxWidth":"180px","width":"180px"},"type":"html","title":(role == "admin" ? lang.action : ""),"breakpoints":"xs sm"}
|
{"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,
|
"empty": lang.empty,
|
||||||
"rows": $.ajax({
|
"rows": $.ajax({
|
||||||
|
@ -714,12 +714,12 @@ jQuery(function($){
|
||||||
ft_tls_policy_table = FooTable.init('#tls_policy_table', {
|
ft_tls_policy_table = FooTable.init('#tls_policy_table', {
|
||||||
"columns": [
|
"columns": [
|
||||||
{"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
|
{"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":"dest","title":lang.tls_map_dest},
|
||||||
{"name":"policy","title":lang.tls_map_policy},
|
{"name":"policy","title":lang.tls_map_policy},
|
||||||
{"name":"parameters","title":lang.tls_map_parameters},
|
{"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":"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","maxWidth":"180px","width":"180px"},"type":"html","title":(role == "admin" ? lang.action : ""),"breakpoints":"xs sm"}
|
{"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,
|
"empty": lang.empty,
|
||||||
"rows": $.ajax({
|
"rows": $.ajax({
|
||||||
|
@ -784,15 +784,15 @@ jQuery(function($){
|
||||||
ft_alias_table = FooTable.init('#alias_table', {
|
ft_alias_table = FooTable.init('#alias_table', {
|
||||||
"columns": [
|
"columns": [
|
||||||
{"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
|
{"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"}},
|
{"sorted": true,"name":"address","title":lang.alias,"style":{"width":"250px"}},
|
||||||
{"name":"goto","title":lang.target_address},
|
{"name":"goto","title":lang.target_address},
|
||||||
{"name":"domain","title":lang.domain,"breakpoints":"xs sm"},
|
{"name":"domain","title":lang.domain,"breakpoints":"xs sm"},
|
||||||
{"name":"public_comment","title":lang.public_comment,"breakpoints":"all"},
|
{"name":"public_comment","title":lang.public_comment,"breakpoints":"all"},
|
||||||
{"name":"private_comment","title":lang.private_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":"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":"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","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,
|
"empty": lang.empty,
|
||||||
"rows": $.ajax({
|
"rows": $.ajax({
|
||||||
|
@ -886,8 +886,8 @@ jQuery(function($){
|
||||||
{"name":"chkbox","title":"","style":{"min-width":"60px","width":"60px"},"filterable": false,"sortable": false,"type":"html"},
|
{"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"}},
|
{"sorted": true,"name":"alias_domain","title":lang.alias,"style":{"width":"250px"}},
|
||||||
{"name":"target_domain","title":lang.target_domain,"type":"html"},
|
{"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":"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","maxWidth":"250px","width":"250px"},"type":"html","title":lang.action,"breakpoints":"xs sm"}
|
{"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,
|
"empty": lang.empty,
|
||||||
"rows": $.ajax({
|
"rows": $.ajax({
|
||||||
|
@ -949,17 +949,17 @@ jQuery(function($){
|
||||||
function draw_sync_job_table() {
|
function draw_sync_job_table() {
|
||||||
ft_syncjob_table = FooTable.init('#sync_job_table', {
|
ft_syncjob_table = FooTable.init('#sync_job_table', {
|
||||||
"columns": [
|
"columns": [
|
||||||
{"name":"chkbox","title":"","style":{"maxWidth":"60px","width":"60px","text-align":"center"},"filterable": false,"sortable": false,"type":"html"},
|
{"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":{"maxWidth":"60px","width":"60px","text-align":"center"}},
|
{"sorted": true,"name":"id","title":"ID","style":{"min-width":"60px","width":"60px","text-align":"center"}},
|
||||||
{"name":"user2","title":lang.owner},
|
{"name":"user2","title":lang.owner},
|
||||||
{"name":"server_w_port","title":"Server","breakpoints":"xs sm md","style":{"word-break":"break-all"}},
|
{"name":"server_w_port","title":"Server","breakpoints":"xs sm md","style":{"word-break":"break-all"}},
|
||||||
{"name":"exclude","title":lang.excludes,"breakpoints":"all"},
|
{"name":"exclude","title":lang.excludes,"breakpoints":"all"},
|
||||||
{"name":"mins_interval","title":lang.mins_interval,"breakpoints":"all"},
|
{"name":"mins_interval","title":lang.mins_interval,"breakpoints":"all"},
|
||||||
{"name":"last_run","title":lang.last_run,"breakpoints":"xs sm md"},
|
{"name":"last_run","title":lang.last_run,"breakpoints":"xs sm md"},
|
||||||
{"name":"log","title":"Log"},
|
{"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":"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":{"maxWidth":"120px","width":"100px"},"title":lang.status},
|
{"name":"is_running","filterable": false,"style":{"min-width":"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":"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,
|
"empty": lang.empty,
|
||||||
"rows": $.ajax({
|
"rows": $.ajax({
|
||||||
|
@ -1031,14 +1031,14 @@ jQuery(function($){
|
||||||
function draw_filter_table() {
|
function draw_filter_table() {
|
||||||
ft_filter_table = FooTable.init('#filter_table', {
|
ft_filter_table = FooTable.init('#filter_table', {
|
||||||
"columns": [
|
"columns": [
|
||||||
{"name":"chkbox","title":"","style":{"maxWidth":"60px","width":"60px","text-align":"center"},"filterable": false,"sortable": false,"type":"html"},
|
{"name":"chkbox","title":"","style":{"min-width":"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":"id","title":"ID","style":{"min-width":"60px","width":"60px","text-align":"center"}},
|
||||||
{"name":"active","style":{"maxWidth":"80px","width":"80px"},"title":lang.active},
|
{"name":"active","style":{"min-width":"80px","width":"80px"},"title":lang.active},
|
||||||
{"name":"filter_type","style":{"maxWidth":"80px","width":"80px"},"title":"Type"},
|
{"name":"filter_type","style":{"min-width":"80px","width":"80px"},"title":"Type"},
|
||||||
{"sorted": true,"name":"username","title":lang.owner,"style":{"maxWidth":"550px","width":"350px"}},
|
{"sorted": true,"name":"username","title":lang.owner,"style":{"min-width":"550px","width":"350px"}},
|
||||||
{"name":"script_desc","title":lang.description,"breakpoints":"xs"},
|
{"name":"script_desc","title":lang.description,"breakpoints":"xs"},
|
||||||
{"name":"script_data","title":"Script","breakpoints":"all"},
|
{"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,
|
"empty": lang.empty,
|
||||||
"rows": $.ajax({
|
"rows": $.ajax({
|
||||||
|
|
|
@ -514,6 +514,7 @@
|
||||||
"optional": "Dieser Eintrag ist optional."
|
"optional": "Dieser Eintrag ist optional."
|
||||||
},
|
},
|
||||||
"edit": {
|
"edit": {
|
||||||
|
"acl": "ACL (Berechtigungen)",
|
||||||
"active": "Aktiv",
|
"active": "Aktiv",
|
||||||
"admin": "Administrator bearbeiten",
|
"admin": "Administrator bearbeiten",
|
||||||
"advanced_settings": "Erweiterte Einstellungen",
|
"advanced_settings": "Erweiterte Einstellungen",
|
||||||
|
@ -574,6 +575,7 @@
|
||||||
"previous": "Vorherige Seite",
|
"previous": "Vorherige Seite",
|
||||||
"private_comment": "Privater Kommentar",
|
"private_comment": "Privater Kommentar",
|
||||||
"public_comment": "Öffentlicher Kommentar",
|
"public_comment": "Öffentlicher Kommentar",
|
||||||
|
"pushover": "Pushover",
|
||||||
"pushover_evaluate_x_prio": "Hohe Priorität eskalieren [<code>X-Priority: 1</code>]",
|
"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_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>]",
|
"pushover_only_x_prio": "Nur Mail mit hoher Priorität berücksichtigen [<code>X-Priority: 1</code>]",
|
||||||
|
|
|
@ -517,6 +517,7 @@
|
||||||
"optional": "This record is optional."
|
"optional": "This record is optional."
|
||||||
},
|
},
|
||||||
"edit": {
|
"edit": {
|
||||||
|
"acl": "ACL (Permission)",
|
||||||
"active": "Active",
|
"active": "Active",
|
||||||
"admin": "Edit administrator",
|
"admin": "Edit administrator",
|
||||||
"advanced_settings": "Advanced settings",
|
"advanced_settings": "Advanced settings",
|
||||||
|
@ -577,6 +578,7 @@
|
||||||
"previous": "Previous page",
|
"previous": "Previous page",
|
||||||
"private_comment": "Private comment",
|
"private_comment": "Private comment",
|
||||||
"public_comment": "Public comment",
|
"public_comment": "Public comment",
|
||||||
|
"pushover": "Pushover",
|
||||||
"pushover_evaluate_x_prio": "Escalate high priority mail [<code>X-Priority: 1</code>]",
|
"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_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>]",
|
"pushover_only_x_prio": "Only consider high priority mail [<code>X-Priority: 1</code>]",
|
||||||
|
@ -901,11 +903,11 @@
|
||||||
"type": "Type"
|
"type": "Type"
|
||||||
},
|
},
|
||||||
"ratelimit": {
|
"ratelimit": {
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"second": "msgs / second",
|
"second": "msgs / second",
|
||||||
"minute": "msgs / minute",
|
"minute": "msgs / minute",
|
||||||
"hour": "msgs / hour",
|
"hour": "msgs / hour",
|
||||||
"day": "msgs / day"
|
"day": "msgs / day"
|
||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"help": "Show/Hide help panel",
|
"help": "Show/Hide help panel",
|
||||||
|
|
|
@ -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>
|
<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>
|
</ul>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="tab-content" style="padding-top:20px">
|
<div class="tab-content" style="padding-top:20px">
|
||||||
<div role="tabpanel" class="tab-pane active" id="tab-domains">
|
<div role="tabpanel" class="tab-pane active" id="tab-domains">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
|
@ -635,7 +635,7 @@ echo "var role = '". $role . "';\n";
|
||||||
echo "var is_dual = " . $is_dual . ";\n";
|
echo "var is_dual = " . $is_dual . ";\n";
|
||||||
echo "var pagination_size = '". $PAGINATION_SIZE . "';\n";
|
echo "var pagination_size = '". $PAGINATION_SIZE . "';\n";
|
||||||
$ALLOW_ADMIN_EMAIL_LOGIN = (preg_match(
|
$ALLOW_ADMIN_EMAIL_LOGIN = (preg_match(
|
||||||
"/^([yY][eE][sS]|[yY])+$/",
|
"/^([yY][eE][sS]|[yY])+$/",
|
||||||
$_ENV["ALLOW_ADMIN_EMAIL_LOGIN"]
|
$_ENV["ALLOW_ADMIN_EMAIL_LOGIN"]
|
||||||
)) ? "true" : "false";
|
)) ? "true" : "false";
|
||||||
echo "var ALLOW_ADMIN_EMAIL_LOGIN = " . $ALLOW_ADMIN_EMAIL_LOGIN . ";\n";
|
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';
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
header('Location: /');
|
header('Location: /');
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
Loading…
Reference in New Issue