Merge pull request #5521 from raph-topo/fix/impasync-options
Add `--dry` IMAPsync Parameter as Button to select for SyncJobs
This commit is contained in:
commit
c8bee57732
@ -75,7 +75,8 @@ my $sth = $dbh->prepare("SELECT id,
|
|||||||
custom_params,
|
custom_params,
|
||||||
subscribeall,
|
subscribeall,
|
||||||
timeout1,
|
timeout1,
|
||||||
timeout2
|
timeout2,
|
||||||
|
dry
|
||||||
FROM imapsync
|
FROM imapsync
|
||||||
WHERE active = 1
|
WHERE active = 1
|
||||||
AND is_running = 0
|
AND is_running = 0
|
||||||
@ -111,6 +112,7 @@ while ($row = $sth->fetchrow_arrayref()) {
|
|||||||
$subscribeall = @$row[18];
|
$subscribeall = @$row[18];
|
||||||
$timeout1 = @$row[19];
|
$timeout1 = @$row[19];
|
||||||
$timeout2 = @$row[20];
|
$timeout2 = @$row[20];
|
||||||
|
$dry = @$row[21];
|
||||||
|
|
||||||
if ($enc1 eq "TLS") { $enc1 = "--tls1"; } elsif ($enc1 eq "SSL") { $enc1 = "--ssl1"; } else { undef $enc1; }
|
if ($enc1 eq "TLS") { $enc1 = "--tls1"; } elsif ($enc1 eq "SSL") { $enc1 = "--ssl1"; } else { undef $enc1; }
|
||||||
|
|
||||||
@ -148,6 +150,7 @@ while ($row = $sth->fetchrow_arrayref()) {
|
|||||||
"--host2", "localhost",
|
"--host2", "localhost",
|
||||||
"--user2", $user2 . '*' . trim($master_user),
|
"--user2", $user2 . '*' . trim($master_user),
|
||||||
"--passfile2", $passfile2->filename,
|
"--passfile2", $passfile2->filename,
|
||||||
|
($dry eq "1" ? ('--dry') : ()),
|
||||||
'--no-modulesversion',
|
'--no-modulesversion',
|
||||||
'--noreleasecheck'];
|
'--noreleasecheck'];
|
||||||
|
|
||||||
|
@ -325,6 +325,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$timeout2 = intval($_data['timeout2']);
|
$timeout2 = intval($_data['timeout2']);
|
||||||
$skipcrossduplicates = intval($_data['skipcrossduplicates']);
|
$skipcrossduplicates = intval($_data['skipcrossduplicates']);
|
||||||
$automap = intval($_data['automap']);
|
$automap = intval($_data['automap']);
|
||||||
|
$dry = intval($_data['dry']);
|
||||||
$port1 = $_data['port1'];
|
$port1 = $_data['port1'];
|
||||||
$host1 = strtolower($_data['host1']);
|
$host1 = strtolower($_data['host1']);
|
||||||
$password1 = $_data['password1'];
|
$password1 = $_data['password1'];
|
||||||
@ -435,8 +436,8 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare("INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`)
|
$stmt = $pdo->prepare("INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `dry`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`)
|
||||||
VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)");
|
VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :dry, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
':user2' => $username,
|
':user2' => $username,
|
||||||
':custom_params' => $custom_params,
|
':custom_params' => $custom_params,
|
||||||
@ -450,6 +451,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':skipcrossduplicates' => $skipcrossduplicates,
|
':skipcrossduplicates' => $skipcrossduplicates,
|
||||||
':maxbytespersecond' => $maxbytespersecond,
|
':maxbytespersecond' => $maxbytespersecond,
|
||||||
':subscribeall' => $subscribeall,
|
':subscribeall' => $subscribeall,
|
||||||
|
':dry' => $dry,
|
||||||
':subfolder2' => $subfolder2,
|
':subfolder2' => $subfolder2,
|
||||||
':host1' => $host1,
|
':host1' => $host1,
|
||||||
':authmech1' => 'PLAIN',
|
':authmech1' => 'PLAIN',
|
||||||
@ -2031,6 +2033,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
$success = (isset($_data['success'])) ? NULL : $is_now['success'];
|
$success = (isset($_data['success'])) ? NULL : $is_now['success'];
|
||||||
$delete2duplicates = (isset($_data['delete2duplicates'])) ? intval($_data['delete2duplicates']) : $is_now['delete2duplicates'];
|
$delete2duplicates = (isset($_data['delete2duplicates'])) ? intval($_data['delete2duplicates']) : $is_now['delete2duplicates'];
|
||||||
$subscribeall = (isset($_data['subscribeall'])) ? intval($_data['subscribeall']) : $is_now['subscribeall'];
|
$subscribeall = (isset($_data['subscribeall'])) ? intval($_data['subscribeall']) : $is_now['subscribeall'];
|
||||||
|
$dry = (isset($_data['dry'])) ? intval($_data['dry']) : $is_now['dry'];
|
||||||
$delete1 = (isset($_data['delete1'])) ? intval($_data['delete1']) : $is_now['delete1'];
|
$delete1 = (isset($_data['delete1'])) ? intval($_data['delete1']) : $is_now['delete1'];
|
||||||
$delete2 = (isset($_data['delete2'])) ? intval($_data['delete2']) : $is_now['delete2'];
|
$delete2 = (isset($_data['delete2'])) ? intval($_data['delete2']) : $is_now['delete2'];
|
||||||
$automap = (isset($_data['automap'])) ? intval($_data['automap']) : $is_now['automap'];
|
$automap = (isset($_data['automap'])) ? intval($_data['automap']) : $is_now['automap'];
|
||||||
@ -2164,6 +2167,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
`timeout1` = :timeout1,
|
`timeout1` = :timeout1,
|
||||||
`timeout2` = :timeout2,
|
`timeout2` = :timeout2,
|
||||||
`subscribeall` = :subscribeall,
|
`subscribeall` = :subscribeall,
|
||||||
|
`dry` = :dry,
|
||||||
`active` = :active
|
`active` = :active
|
||||||
WHERE `id` = :id");
|
WHERE `id` = :id");
|
||||||
$stmt->execute(array(
|
$stmt->execute(array(
|
||||||
@ -2189,6 +2193,7 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
|
|||||||
':timeout1' => $timeout1,
|
':timeout1' => $timeout1,
|
||||||
':timeout2' => $timeout2,
|
':timeout2' => $timeout2,
|
||||||
':subscribeall' => $subscribeall,
|
':subscribeall' => $subscribeall,
|
||||||
|
':dry' => $dry,
|
||||||
':active' => $active,
|
':active' => $active,
|
||||||
));
|
));
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
|
@ -3,7 +3,7 @@ function init_db_schema() {
|
|||||||
try {
|
try {
|
||||||
global $pdo;
|
global $pdo;
|
||||||
|
|
||||||
$db_version = "14022023_1000";
|
$db_version = "15112023_1536";
|
||||||
|
|
||||||
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
|
$stmt = $pdo->query("SHOW TABLES LIKE 'versions'");
|
||||||
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
$num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));
|
||||||
@ -704,6 +704,7 @@ function init_db_schema() {
|
|||||||
"timeout1" => "SMALLINT NOT NULL DEFAULT '600'",
|
"timeout1" => "SMALLINT NOT NULL DEFAULT '600'",
|
||||||
"timeout2" => "SMALLINT NOT NULL DEFAULT '600'",
|
"timeout2" => "SMALLINT NOT NULL DEFAULT '600'",
|
||||||
"subscribeall" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
"subscribeall" => "TINYINT(1) NOT NULL DEFAULT '1'",
|
||||||
|
"dry" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
||||||
"is_running" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
"is_running" => "TINYINT(1) NOT NULL DEFAULT '0'",
|
||||||
"returned_text" => "LONGTEXT",
|
"returned_text" => "LONGTEXT",
|
||||||
"last_run" => "TIMESTAMP NULL DEFAULT NULL",
|
"last_run" => "TIMESTAMP NULL DEFAULT NULL",
|
||||||
|
@ -236,118 +236,120 @@ $RSPAMD_MAPS = array(
|
|||||||
|
|
||||||
$IMAPSYNC_OPTIONS = array(
|
$IMAPSYNC_OPTIONS = array(
|
||||||
'whitelist' => array(
|
'whitelist' => array(
|
||||||
|
'abort',
|
||||||
|
'authmd51',
|
||||||
|
'authmd52',
|
||||||
'authmech1',
|
'authmech1',
|
||||||
'authmech2',
|
'authmech2',
|
||||||
'authuser1',
|
'authuser1',
|
||||||
'authuser2',
|
'authuser2',
|
||||||
'debugcontent',
|
|
||||||
'disarmreadreceipts',
|
|
||||||
'logdir',
|
|
||||||
'debugcrossduplicates',
|
|
||||||
'maxsize',
|
|
||||||
'minsize',
|
|
||||||
'minage',
|
|
||||||
'search',
|
|
||||||
'noabletosearch',
|
|
||||||
'pidfile',
|
|
||||||
'pidfilelocking',
|
|
||||||
'search1',
|
|
||||||
'search2',
|
|
||||||
'sslargs1',
|
|
||||||
'sslargs2',
|
|
||||||
'syncduplicates',
|
|
||||||
'usecache',
|
|
||||||
'synclabels',
|
|
||||||
'truncmess',
|
|
||||||
'domino2',
|
|
||||||
'expunge1',
|
|
||||||
'filterbuggyflags',
|
|
||||||
'justconnect',
|
|
||||||
'justfolders',
|
|
||||||
'maxlinelength',
|
|
||||||
'useheader',
|
|
||||||
'noabletosearch1',
|
|
||||||
'nolog',
|
|
||||||
'prefix1',
|
|
||||||
'prefix2',
|
|
||||||
'sep1',
|
|
||||||
'sep2',
|
|
||||||
'nofoldersizesatend',
|
|
||||||
'justfoldersizes',
|
|
||||||
'proxyauth1',
|
|
||||||
'skipemptyfolders',
|
|
||||||
'include',
|
|
||||||
'subfolder1',
|
|
||||||
'subscribed',
|
|
||||||
'subscribe',
|
|
||||||
'debug',
|
'debug',
|
||||||
|
'debugcontent',
|
||||||
|
'debugcrossduplicates',
|
||||||
|
'debugflags',
|
||||||
|
'debugfolders',
|
||||||
|
'debugimap',
|
||||||
|
'debugimap1',
|
||||||
'debugimap2',
|
'debugimap2',
|
||||||
|
'debugmemory',
|
||||||
|
'debugssl',
|
||||||
|
'delete1emptyfolders',
|
||||||
|
'delete2folders',
|
||||||
|
'disarmreadreceipts',
|
||||||
|
'domain1',
|
||||||
|
'domain2',
|
||||||
'domino1',
|
'domino1',
|
||||||
|
'domino2',
|
||||||
|
'dry',
|
||||||
|
'errorsmax',
|
||||||
'exchange1',
|
'exchange1',
|
||||||
'exchange2',
|
'exchange2',
|
||||||
|
'exitwhenover',
|
||||||
|
'expunge1',
|
||||||
|
'f1f2',
|
||||||
|
'filterbuggyflags',
|
||||||
|
'folder',
|
||||||
|
'folderfirst',
|
||||||
|
'folderlast',
|
||||||
|
'folderrec',
|
||||||
|
'gmail1',
|
||||||
|
'gmail2',
|
||||||
|
'idatefromheader',
|
||||||
|
'include',
|
||||||
|
'inet4',
|
||||||
|
'inet6',
|
||||||
|
'justconnect',
|
||||||
|
'justfolders',
|
||||||
|
'justfoldersizes',
|
||||||
'justlogin',
|
'justlogin',
|
||||||
'keepalive1',
|
'keepalive1',
|
||||||
'keepalive2',
|
'keepalive2',
|
||||||
|
'log',
|
||||||
|
'logdir',
|
||||||
|
'logfile',
|
||||||
|
'maxbytesafter',
|
||||||
|
'maxlinelength',
|
||||||
|
'maxmessagespersecond',
|
||||||
|
'maxsize',
|
||||||
|
'maxsleep',
|
||||||
|
'minage',
|
||||||
|
'minsize',
|
||||||
|
'noabletosearch',
|
||||||
|
'noabletosearch1',
|
||||||
'noabletosearch2',
|
'noabletosearch2',
|
||||||
|
'noexpunge1',
|
||||||
'noexpunge2',
|
'noexpunge2',
|
||||||
|
'nofoldersizesatend',
|
||||||
|
'noid',
|
||||||
|
'nolog',
|
||||||
|
'nomixfolders',
|
||||||
'noresyncflags',
|
'noresyncflags',
|
||||||
'nossl1',
|
'nossl1',
|
||||||
'nouidexpunge2',
|
'nossl2',
|
||||||
'syncinternaldates',
|
|
||||||
'idatefromheader',
|
|
||||||
'useuid',
|
|
||||||
'debugflags',
|
|
||||||
'debugimap',
|
|
||||||
'delete1emptyfolders',
|
|
||||||
'delete2folders',
|
|
||||||
'gmail2',
|
|
||||||
'office1',
|
|
||||||
'testslive6',
|
|
||||||
'debugimap1',
|
|
||||||
'errorsmax',
|
|
||||||
'tests',
|
|
||||||
'gmail1',
|
|
||||||
'maxmessagespersecond',
|
|
||||||
'maxbytesafter',
|
|
||||||
'maxsleep',
|
|
||||||
'abort',
|
|
||||||
'resyncflags',
|
|
||||||
'resynclabels',
|
|
||||||
'syncacls',
|
|
||||||
'nosyncacls',
|
'nosyncacls',
|
||||||
|
'notls1',
|
||||||
|
'notls2',
|
||||||
|
'nouidexpunge2',
|
||||||
'nousecache',
|
'nousecache',
|
||||||
'office2',
|
|
||||||
'testslive',
|
|
||||||
'debugmemory',
|
|
||||||
'exitwhenover',
|
|
||||||
'noid',
|
|
||||||
'noexpunge1',
|
|
||||||
'authmd51',
|
|
||||||
'logfile',
|
|
||||||
'proxyauth2',
|
|
||||||
'domain1',
|
|
||||||
'domain2',
|
|
||||||
'oauthaccesstoken1',
|
'oauthaccesstoken1',
|
||||||
'oauthaccesstoken2',
|
'oauthaccesstoken2',
|
||||||
'oauthdirect1',
|
'oauthdirect1',
|
||||||
'oauthdirect2',
|
'oauthdirect2',
|
||||||
'folder',
|
'office1',
|
||||||
'folderrec',
|
'office2',
|
||||||
'folderfirst',
|
'pidfile',
|
||||||
'folderlast',
|
'pidfilelocking',
|
||||||
'nomixfolders',
|
'prefix1',
|
||||||
'authmd52',
|
'prefix2',
|
||||||
'debugfolders',
|
'proxyauth1',
|
||||||
'nossl2',
|
'proxyauth2',
|
||||||
|
'resyncflags',
|
||||||
|
'resynclabels',
|
||||||
|
'search',
|
||||||
|
'search1',
|
||||||
|
'search2',
|
||||||
|
'sep1',
|
||||||
|
'sep2',
|
||||||
|
'showpasswords',
|
||||||
|
'skipemptyfolders',
|
||||||
'ssl2',
|
'ssl2',
|
||||||
|
'sslargs1',
|
||||||
|
'sslargs2',
|
||||||
|
'subfolder1',
|
||||||
|
'subscribe',
|
||||||
|
'subscribed',
|
||||||
|
'syncacls',
|
||||||
|
'syncduplicates',
|
||||||
|
'syncinternaldates',
|
||||||
|
'synclabels',
|
||||||
|
'tests',
|
||||||
|
'testslive',
|
||||||
|
'testslive6',
|
||||||
'tls2',
|
'tls2',
|
||||||
'notls2',
|
'truncmess',
|
||||||
'debugssl',
|
'usecache',
|
||||||
'notls1',
|
'useheader',
|
||||||
'inet4',
|
'useuid'
|
||||||
'inet6',
|
|
||||||
'log',
|
|
||||||
'showpasswords'
|
|
||||||
),
|
),
|
||||||
'blacklist' => array(
|
'blacklist' => array(
|
||||||
'skipmess',
|
'skipmess',
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
"domain": "Domain",
|
"domain": "Domain",
|
||||||
"domain_matches_hostname": "Domain %s darf nicht dem Hostnamen entsprechen",
|
"domain_matches_hostname": "Domain %s darf nicht dem Hostnamen entsprechen",
|
||||||
"domain_quota_m": "Domain-Speicherplatz gesamt (MiB)",
|
"domain_quota_m": "Domain-Speicherplatz gesamt (MiB)",
|
||||||
|
"dry": "Synchronisation simulieren",
|
||||||
"enc_method": "Verschlüsselung",
|
"enc_method": "Verschlüsselung",
|
||||||
"exclude": "Elemente ausschließen (Regex)",
|
"exclude": "Elemente ausschließen (Regex)",
|
||||||
"full_name": "Vor- und Nachname",
|
"full_name": "Vor- und Nachname",
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
"domain": "Domain",
|
"domain": "Domain",
|
||||||
"domain_matches_hostname": "Domain %s matches hostname",
|
"domain_matches_hostname": "Domain %s matches hostname",
|
||||||
"domain_quota_m": "Total domain quota (MiB)",
|
"domain_quota_m": "Total domain quota (MiB)",
|
||||||
|
"dry": "Simulate synchronization",
|
||||||
"enc_method": "Encryption method",
|
"enc_method": "Encryption method",
|
||||||
"exclude": "Exclude objects (regex)",
|
"exclude": "Exclude objects (regex)",
|
||||||
"full_name": "Full name",
|
"full_name": "Full name",
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
<input type="hidden" value="0" name="skipcrossduplicates">
|
<input type="hidden" value="0" name="skipcrossduplicates">
|
||||||
<input type="hidden" value="0" name="active">
|
<input type="hidden" value="0" name="active">
|
||||||
<input type="hidden" value="0" name="subscribeall">
|
<input type="hidden" value="0" name="subscribeall">
|
||||||
|
<input type="hidden" value="0" name="dry">
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<label class="control-label col-sm-2" for="host1">{{ lang.edit.hostname }}</label>
|
<label class="control-label col-sm-2" for="host1">{{ lang.edit.hostname }}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
@ -95,7 +96,7 @@
|
|||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label>
|
<label class="control-label col-sm-2" for="custom_params">{{ lang.add.custom_params }}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control" name="custom_params" id="custom_params" value="{{ result.custom_params }}" placeholder="--dry --some-param=xy --other-param=yx">
|
<input type="text" class="form-control" name="custom_params" id="custom_params" value="{{ result.custom_params }}" placeholder="--some-param=xy --other-param=yx">
|
||||||
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -141,6 +142,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mb-2">
|
||||||
|
<div class="offset-sm-2 col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<label><input type="checkbox" class="form-check-input" value="1" name="dry"{% if result.dry == '1' %} checked{% endif %}> {{ lang.add.dry }} (--dry)</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
|
@ -955,7 +955,7 @@
|
|||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<label class="control-label col-sm-2 text-sm-end" for="custom_params">{{ lang.add.custom_params }}</label>
|
<label class="control-label col-sm-2 text-sm-end" for="custom_params">{{ lang.add.custom_params }}</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" class="form-control" name="custom_params" placeholder="--dry --some-param=xy --other-param=yx">
|
<input type="text" class="form-control" name="custom_params" placeholder="--some-param=xy --other-param=yx">
|
||||||
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
<small class="text-muted">{{ lang.add.custom_params_hint }}</small>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -994,13 +994,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-2">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<label><input type="checkbox" class="form-check-input" value="1" name="subscribeall" checked> {{ lang.add.subscribeall }} (--subscribeall)</label>
|
<label><input type="checkbox" class="form-check-input" value="1" name="subscribeall" checked> {{ lang.add.subscribeall }} (--subscribeall)</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="offset-sm-2 col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<label><input type="checkbox" class="form-check-input" value="1" name="dry"> {{ lang.add.dry }} (--dry)</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
|
@ -167,6 +167,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row mb-2">
|
||||||
|
<div class="offset-sm-2 col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<label><input type="checkbox" class="form-check-input" value="1" name="dry" checked> {{ lang.add.dry }} (--dry)</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="offset-sm-2 col-sm-10">
|
<div class="offset-sm-2 col-sm-10">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
|
@ -218,7 +218,7 @@ services:
|
|||||||
- sogo
|
- sogo
|
||||||
|
|
||||||
dovecot-mailcow:
|
dovecot-mailcow:
|
||||||
image: mailcow/dovecot:1.25
|
image: mailcow/dovecot:1.26
|
||||||
depends_on:
|
depends_on:
|
||||||
- mysql-mailcow
|
- mysql-mailcow
|
||||||
dns:
|
dns:
|
||||||
|
Loading…
Reference in New Issue
Block a user