Merge branch 'feature/bootstrap5' into nightly

This commit is contained in:
DerLinkman 2022-12-12 16:19:04 +01:00
commit 4227890ab5
11 changed files with 98 additions and 70 deletions

View File

@ -1,4 +1,4 @@
FROM alpine:3.16
FROM alpine:3.17
LABEL maintainer "Andre Peters <andre.peters@servercow.de>"

View File

@ -1420,11 +1420,11 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
// check attributes
$attr = array();
$attr['tags'] = (isset($_data['tags'])) ? $_data['tags'] : array();
$attr['max_num_aliases_for_domain'] = (isset($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 0;
$attr['max_num_mboxes_for_domain'] = (isset($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 0;
$attr['def_quota_for_mbox'] = (isset($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 0;
$attr['max_quota_for_mbox'] = (isset($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 0;
$attr['max_quota_for_domain'] = (isset($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 0;
$attr['max_num_aliases_for_domain'] = (!empty($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 400;
$attr['max_num_mboxes_for_domain'] = (!empty($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 10;
$attr['def_quota_for_mbox'] = (!empty($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 3072 * 1048576;
$attr['max_quota_for_mbox'] = (!empty($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 10240 * 1048576;
$attr['max_quota_for_domain'] = (!empty($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 10240 * 1048576;
$attr['rl_frame'] = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : "s";
$attr['rl_value'] = (!empty($_data['rl_value'])) ? $_data['rl_value'] : "";
$attr['active'] = isset($_data['active']) ? intval($_data['active']) : 1;
@ -1435,7 +1435,6 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
$attr['dkim_selector'] = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : "dkim";
$attr['key_size'] = isset($_data['key_size']) ? intval($_data['key_size']) : 2048;
// save template
$stmt = $pdo->prepare("INSERT INTO `templates` (`type`, `template`, `attributes`)
VALUES (:type, :template, :attributes)");
@ -4756,15 +4755,15 @@ function mailbox($_action, $_type, $_data = null, $_extra = null) {
":id" => $id,
":type" => "domain",
":template" => "Default"
));
}
));
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
'msg' => 'template_removed'
);
return true;
$_SESSION['return'][] = array(
'type' => 'success',
'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),
'msg' => array('template_removed', htmlspecialchars($id))
);
return true;
}
break;
case 'alias':
if (!is_array($_data['id'])) {

View File

@ -1,7 +1,7 @@
$(document).ready(function() {
// mailcow alert box generator
window.mailcow_alert_box = function(message, type) {
msg = $('<span/>').text(message).text();
msg = $('<span/>').text(escapeHtml(message)).text();
if (type == 'danger' || type == 'info') {
auto_hide = 0;
$('#' + localStorage.getItem("add_modal")).modal('show');

View File

@ -441,6 +441,8 @@ jQuery(function($){
url: "/api/v1/get/domain/all",
dataSrc: function(json){
$.each(json, function(i, item) {
item.domain_name = escapeHtml(item.domain_name);
item.aliases = item.aliases_in_domain + " / " + item.max_num_aliases_for_domain;
item.mailboxes = item.mboxes_in_domain + " / " + item.max_num_mboxes_for_domain;
item.quota = item.quota_used_in_domain + "/" + item.max_quota_for_domain + "/" + item.bytes_total;
@ -625,7 +627,6 @@ jQuery(function($){
type: "GET",
url: "/api/v1/get/domain/template/all",
dataSrc: function(json){
console.log(json);
$.each(json, function (i, item) {
item.chkbox = '<input type="checkbox" data-id="domain_template" name="multi_select" value="' + encodeURIComponent(item.id) + '" />';
@ -645,10 +646,18 @@ jQuery(function($){
}
item.attributes.rl_value = escapeHtml(item.attributes.rl_value);
item.action = '<div class="btn-group">' +
if (item.template.toLowerCase() == "default"){
item.action = '<div class="btn-group">' +
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'</div>';
}
else{
item.action = '<div class="btn-group">' +
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="#" data-action="delete_selected" data-id="single-template" data-api-url="delete/domain/template" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
'</div>';
}
if (Array.isArray(item.attributes.tags)){
var tags = '';
@ -688,7 +697,7 @@ jQuery(function($){
defaultContent: ''
},
{
title: "Template",
title: lang.template,
data: 'template',
responsivePriority: 3,
defaultContent: ''
@ -1115,11 +1124,17 @@ jQuery(function($){
}
item.action = '<div class="btn-group">' +
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="#" data-action="delete_selected" data-id="single-template" data-api-url="delete/mailbox/template" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
'</div>';
if (item.template.toLowerCase() == "default"){
item.action = '<div class="btn-group">' +
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'</div>';
}
else {
item.action = '<div class="btn-group">' +
'<a href="/edit/template/' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="#" data-action="delete_selected" data-id="single-template" data-api-url="delete/mailbox/template" data-item="' + encodeURIComponent(item.id) + '" class="btn btn-xs btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
'</div>';
}
if (Array.isArray(item.attributes.tags)){
var tags = '';
@ -1159,7 +1174,7 @@ jQuery(function($){
defaultContent: ''
},
{
title: "Template",
title: lang.template,
data: 'template',
responsivePriority: 3,
defaultContent: ''
@ -1582,7 +1597,6 @@ jQuery(function($){
type: "GET",
url: "/api/v1/get/tls-policy-map/all",
dataSrc: function(json){
console.log(json);
if (role !== "admin") return null;
$.each(json, function (i, item) {
@ -1817,6 +1831,8 @@ jQuery(function($){
url: "/api/v1/get/alias-domain/all",
dataSrc: function(json){
$.each(json, function (i, item) {
item.alias_domain = escapeHtml(item.alias_domain);
item.action = '<div class="btn-group">' +
'<a href="/edit/aliasdomain/' + encodeURIComponent(item.alias_domain) + '" class="btn btn-sm btn-xs-third btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="#" data-action="delete_selected" data-id="single-alias-domain" data-api-url="delete/alias-domain" data-item="' + encodeURIComponent(item.alias_domain) + '" class="btn btn-sm btn-xs-third btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
@ -1904,7 +1920,7 @@ jQuery(function($){
} else {
item.exclude = '<code>' + escapeHtml(item.exclude) + '</code>';
}
item.server_w_port = escapeHtml(item.user1) + '@' + item.host1 + ':' + item.port1;
item.server_w_port = escapeHtml(item.user1) + '@' + escapeHtml(item.host1) + ':' + escapeHtml(item.port1);
item.action = '<div class="btn-group">' +
'<a href="/edit/syncjob/' + item.id + '" class="btn btn-sm btn-xs-half btn-secondary"><i class="bi bi-pencil-fill"></i> ' + lang.edit + '</a>' +
'<a href="#" data-action="delete_selected" data-id="single-syncjob" data-api-url="delete/syncjob" data-item="' + item.id + '" class="btn btn-sm btn-xs-half btn-danger"><i class="bi bi-trash"></i> ' + lang.remove + '</a>' +
@ -2042,6 +2058,7 @@ jQuery(function($){
} else {
item.active = '<span id="inactive-script" class="badge fs-6 bg-warning">' + lang.inactive + '</span>';
}
item.script_desc = escapeHtml(item.script_desc);
item.script_data = '<pre class="text-break" style="margin:0px">' + escapeHtml(item.script_data) + '</pre>'
item.filter_type = '<div class="badge fs-6 bg-secondary">' + item.filter_type.charAt(0).toUpperCase() + item.filter_type.slice(1).toLowerCase() + '</div>'
item.action = '<div class="btn-group">' +

View File

@ -228,6 +228,7 @@
"oauth2_renew_secret": "Neues Client Secret generieren",
"oauth2_revoke_tokens": "Alle Client Tokens entfernen",
"optional": "Optional",
"options": "Einstellungen",
"password": "Passwort",
"password_length": "Passwortlänge",
"password_policy": "Passwortrichtlinie",
@ -714,6 +715,7 @@
"add_filter": "Filter erstellen",
"add_mailbox": "Mailbox hinzufügen",
"add_recipient_map_entry": "Empfängerumschreibung hinzufügen",
"add_template": "Vorlage hinzufügen",
"add_resource": "Ressource hinzufügen",
"add_tls_policy_map": "TLS-Richtlinieneintrag hinzufügen",
"address_rewriting": "Adressumschreibung",
@ -755,6 +757,7 @@
"domain": "Domain",
"domain_admins": "Domain-Administratoren",
"domain_aliases": "Domain-Aliasse",
"domain_templates": "Domainweite Vorlagen",
"domain_quota": "Gesamtspeicher",
"domain_quota_total": "Domain-Speicherplatz gesamt",
"domains": "Domains",
@ -781,6 +784,7 @@
"mailbox_defaults": "Standardeinstellungen",
"mailbox_defaults_info": "Steuert die Standardeinstellungen für neue Mailboxen.",
"mailbox_defquota": "Standard-Quota",
"mailbox_templates": "Mailboxweite Vorlagen",
"mailbox_quota": "Max. Größe einer Mailbox",
"mailboxes": "Mailboxen",
"max_aliases": "Max. mögliche Aliasse",
@ -810,6 +814,7 @@
"recipient_map_old_info": "Der originale Empfänger muss eine E-Mail-Adresse oder ein Domainname sein.",
"recipient_maps": "Empfängerumschreibungen",
"relay_all": "Alle Empfänger-Adressen relayen",
"relay_unknown": "Unbekannte Mailboxen relayen",
"remove": "Entfernen",
"resources": "Ressourcen",
"running": "In Ausführung",
@ -836,6 +841,8 @@
"table_size_show_n": "Zeige %s Einträge",
"target_address": "Ziel-Adresse",
"target_domain": "Ziel-Domain",
"templates": "Vorlagen",
"template": "Vorlage",
"tls_enforce_in": "TLS eingehend erzwingen",
"tls_enforce_out": "TLS ausgehend erzwingen",
"tls_map_dest": "Ziel",
@ -932,16 +939,20 @@
"type": "Typ"
},
"queue": {
"delete_queue": "Queue löschen",
"flush_queue": "Queue flushen",
"queue_ays": "Soll die derzeitige Queue wirklich komplett bereinigt werden?",
"queue_command_success": "Queue-Aufgabe erfolgreich ausgeführt",
"queue_deliver_mail": "Ausliefern",
"queue_hold_mail": "Zurückhalten",
"delete": "Queue löschen",
"flush": "Queue flushen",
"info" : "In der Mailqueue befinden sich alle E-Mails, welche auf eine Zustellung warten. Sollte eine E-Mail eine längere Zeit innerhalb der Mailqueue stecken wird diese automatisch vom System gelöscht.<br>Die Fehlermeldung der jeweiligen Mail gibt aufschluss darüber, warum diese nicht zugestellt werden konnte",
"legend": "Funktionen der Mailqueue Aktionen:",
"ays": "Soll die derzeitige Queue wirklich komplett bereinigt werden?",
"deliver_mail": "Ausliefern",
"deliver_mail_legend": "Versucht eine erneute Zustellung der ausgwählten Mails.",
"hold_mail": "Zurückhalten",
"hold_mail_legend": "Hält die ausgewählten Mails zurück. (Verhindert weitere Zustellversuche)",
"queue_manager": "Queue Manager",
"queue_show_message": "Nachricht anzeigen",
"queue_unban": "queue unban",
"queue_unhold_mail": "Freigeben"
"show_message": "Nachricht anzeigen",
"unban": "queue unban",
"unhold_mail": "Freigeben",
"unhold_mail_legend": "Gibt ausgewählte Mails zur Auslieferung frei. (Erfordert vorheriges Zurückhalten)"
},
"start": {
"help": "Hilfe ein-/ausblenden",
@ -1018,6 +1029,9 @@
"saved_settings": "Regel wurde gespeichert",
"settings_map_added": "Regel wurde gespeichert",
"settings_map_removed": "Regeln wurden entfernt: %s",
"template_added": "Template %s hinzugefügt",
"template_modified": "Änderungen am Template %s wurden gespeichert",
"template_removed": "Template ID %s wurde gelöscht",
"sogo_profile_reset": "ActiveSync-Gerät des Benutzers %s wurde zurückgesetzt",
"tls_policy_map_entry_deleted": "TLS-Richtlinie mit der ID %s wurde gelöscht",
"tls_policy_map_entry_saved": "TLS-Richtlinieneintrag \"%s\" wurde gespeichert",

View File

@ -232,6 +232,7 @@
"oauth2_renew_secret": "Generate new client secret",
"oauth2_revoke_tokens": "Revoke all client tokens",
"optional": "optional",
"options": "Options",
"password": "Password",
"password_length": "Password length",
"password_policy": "Password policy",
@ -943,16 +944,20 @@
"type": "Type"
},
"queue": {
"delete_queue": "Delete all",
"flush_queue": "Flush queue",
"queue_ays": "Please confirm you want to delete all items from the current queue.",
"queue_command_success": "Queue command completed successfully",
"queue_deliver_mail": "Deliver",
"queue_hold_mail": "Hold",
"delete": "Delete all",
"flush": "Flush queue",
"info" : "The mail queue contains all e-mails that are waiting for delivery. If an email is stuck in the mail queue for a long time, it is automatically deleted by the system.<br>The error message of the respective mail gives information about why the mail could not be delivered.",
"legend": "Mail queue actions functions:",
"ays": "Please confirm you want to delete all items from the current queue.",
"deliver_mail": "Deliver",
"deliver_mail_legend": "Attempts to redeliver selected mails.",
"hold_mail": "Hold",
"hold_mail_legend": "Holds the selected mails. (Prevents further delivery attempts)",
"queue_manager": "Queue Manager",
"queue_show_message": "Show message",
"queue_unban": "queue unban",
"queue_unhold_mail": "Unhold"
"show_message": "Show message",
"unban": "queue unban",
"unhold_mail": "Unhold",
"unhold_mail_legend": "Releases selected mails for delivery. (Requires prior hold)"
},
"ratelimit": {
"disabled": "Disabled",
@ -1022,6 +1027,7 @@
"password_policy_saved": "Password policy was saved successfully",
"pushover_settings_edited": "Pushover settings successfully set, please verify credentials.",
"qlearn_spam": "Message ID %s was learned as spam and deleted",
"queue_command_success": "Queue command completed successfully",
"recipient_map_entry_deleted": "Recipient map ID %s has been deleted",
"recipient_map_entry_saved": "Recipient map entry \"%s\" has been saved",
"relayhost_added": "Map entry %s has been added",
@ -1038,6 +1044,7 @@
"sogo_profile_reset": "SOGo profile for user %s was reset",
"template_added": "Added template %s",
"template_modified": "Changes to template %s have been saved",
"template_removed": "Template ID %s has been deleted",
"tls_policy_map_entry_deleted": "TLS policy map ID %s has been deleted",
"tls_policy_map_entry_saved": "TLS policy map entry \"%s\" has been saved",
"ui_texts": "Saved changes to UI texts",

View File

@ -14,7 +14,7 @@
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">{{ lang.admin.configuration }}</a>
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">{{ lang.admin.options }}</a>
<ul class="dropdown-menu">
<li><button class="dropdown-item" data-bs-target="#tab-config-dkim" aria-selected="false" aria-controls="tab-config-dkim" role="tab" data-bs-toggle="tab">{{ lang.admin.dkim_keys }}</button></li>
<li><button class="dropdown-item" data-bs-target="#tab-config-fwdhosts" aria-selected="false" aria-controls="tab-config-fwdhosts" role="tab" data-bs-toggle="tab">{{ lang.admin.forwarding_hosts }}</button></li>

View File

@ -10,8 +10,6 @@
<li><button class="dropdown-item {% if mailcow_cc_role != 'admin' %} d-none{% endif %}" aria-selected="false" aria-controls="tab-templates-domains" role="tab" data-bs-toggle="tab" data-bs-target="#tab-templates-domains">{{ lang.mailbox.templates }}</button></li>
</ul>
</li>
{# <li class="nav-item" role="presentation"><button class="nav-link active" aria-selected="false" aria-controls="tab-domains" role="tab" data-bs-toggle="tab" data-bs-target="#tab-domains">{{ lang.mailbox.domains }}</button></li> #}
{# <li class="nav-item" role="presentation"><button class="nav-link" aria-selected="false" aria-controls="tab-mailboxes" role="tab" data-bs-toggle="tab" data-bs-target="#tab-mailboxes">{{ lang.mailbox.mailboxes }}</button></li> #}
<li class="nav-item dropdown" role="presentation">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#">{{ lang.mailbox.mailboxes }}</a>
<ul class="dropdown-menu">
@ -37,7 +35,6 @@
<div class="col-md-12">
<div class="tab-content" style="padding-top:20px">
{% include 'mailbox/tab-domains.twig' %}
{# {% include 'mailbox/tab-mailbox-defaults.twig' %} #}
{% include 'mailbox/tab-templates-domains.twig' %}
{% include 'mailbox/tab-mailboxes.twig' %}
{% include 'mailbox/tab-templates-mbox.twig' %}

View File

@ -1,13 +0,0 @@
<div role="tabpanel" class="tab-pane fade" id="tab-mailbox-defaults" role="tabpanel" aria-labelledby="tab-mailbox-defaults">
<div class="card mb-4">
<div class="card-header d-flex fs-5">
<button class="btn d-md-none flex-grow-1 text-start" data-bs-target="#collapse-tab-mailbox-defaults" data-bs-toggle="collapse" aria-controls="collapse-tab-mailbox-defaults">
{{ lang.mailbox.mailbox_defaults }} <span class="badge bg-info table-lines"></span>
</button>
<span class="d-none d-md-block">{{ lang.mailbox.mailbox_defaults }} <span class="badge bg-info table-lines"></span></span>
</div>
<div id="collapse-tab-mailbox-defaults" class="card-body collapse text-muted" data-bs-parent="#mail-content">
{{ lang.mailbox.mailbox_defaults_info }}
</div>
</div>
</div>

View File

@ -9,15 +9,22 @@
</div>
</div>
<div class="card-body">
<p class="text-muted">{{ lang.queue.info|raw }}</p>
<p class="text-muted"><b>{{ lang.queue.legend|raw }}</b></p>
<ul class="text-muted">
<li>{{ lang.queue.deliver_mail }} | {{ lang.queue.deliver_mail_legend }}</li>
<li>{{ lang.queue.unhold_mail }} | {{ lang.queue.unhold_mail_legend }}</li>
<li>{{ lang.queue.hold_mail }} | {{ lang.queue.hold_mail_legend }}</li>
</ul>
<table id="queuetable" class="table table-striped dt-responsive w-100"></table>
<div class="mass-actions-admin">
<div class="btn-group">
<a class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary" id="toggle_multi_select_all" data-id="mailqitems" href="#"><i class="bi bi-check-all"></i> {{ lang.mailbox.toggle_all }}</a>
<a class="btn btn-sm btn-xs-half d-block d-sm-inline btn-secondary dropdown-toggle" data-bs-toggle="dropdown" href="#">{{ lang.mailbox.quick_actions }}</a>
<ul class="dropdown-menu top33">
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postqueue -i" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"deliver"}' href="#">{{ lang.queue.queue_deliver_mail }}</a></li>
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -H" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"unhold"}' href="#">{{ lang.queue.queue_unhold_mail }}</a></li>
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -h" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"hold"}' href="#">{{ lang.queue.queue_hold_mail }}</a></li>
<ul class="dropdown-menu">
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postqueue -i" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"deliver"}' href="#">{{ lang.queue.deliver_mail }}</a></li>
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -H" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"unhold"}' href="#">{{ lang.queue.unhold_mail }}</a></li>
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -h" data-action="edit_selected" data-id="mailqitems" data-api-url='edit/mailq' data-api-attr='{"action":"hold"}' href="#">{{ lang.queue.hold_mail }}</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" data-bs-toggle="tooltip" title="postsuper -d" data-action="delete_selected" data-id="mailqitems" data-api-url='delete/mailq' href="#">{{ lang.mailbox.remove }}</a></li>
</ul>
@ -27,7 +34,7 @@
data-api-url='edit/mailq'
data-api-attr='{"action":"flush"}'
data-bs-toggle="tooltip" title="postqueue -f"
href="#"><i class="bi bi-check-all"></i> {{ lang.queue.flush_queue }}</a>
href="#"><i class="bi bi-check-all"></i> {{ lang.queue.flush }}</a>
<a class="btn btn-sm d-block d-sm-inline btn-danger"
id="super_delete"
data-action="edit_selected"
@ -35,7 +42,7 @@
data-api-url='edit/mailq'
data-api-attr='{"action":"super_delete"}'
data-bs-toggle="tooltip" title="postsuper -d ALL"
href="#"><i class="bi bi-trash"></i> {{ lang.queue.delete_queue }}</a>
href="#"><i class="bi bi-trash"></i> {{ lang.queue.delete }}</a>
</div>
</div>
</div>

View File

@ -76,7 +76,7 @@ services:
- clamd
rspamd-mailcow:
image: mailcow/rspamd:1.91
image: mailcow/rspamd:1.92
stop_grace_period: 30s
depends_on:
- dovecot-mailcow
@ -510,7 +510,7 @@ services:
- watchdog
dockerapi-mailcow:
image: mailcow/dockerapi:1.44
image: mailcow/dockerapi:2.0
security_opt:
- label=disable
restart: always