From 51a8d58e3d6d55dea6cf9c5d738e75feaaec6547 Mon Sep 17 00:00:00 2001 From: tinect Date: Mon, 11 Nov 2019 16:59:39 +0100 Subject: [PATCH 1/2] show whether user has been notified yet (#3058) * show wether user has been notified yet * add translations --- data/web/inc/functions.quarantine.inc.php | 6 +++--- data/web/js/site/quarantine.js | 8 +++++++- data/web/lang/lang.de.json | 3 ++- data/web/lang/lang.en.json | 3 ++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/data/web/inc/functions.quarantine.inc.php b/data/web/inc/functions.quarantine.inc.php index 1285053a..2aba1535 100644 --- a/data/web/inc/functions.quarantine.inc.php +++ b/data/web/inc/functions.quarantine.inc.php @@ -624,7 +624,7 @@ function quarantine($_action, $_data = null) { break; case 'get': if ($_SESSION['mailcow_cc_role'] == "user") { - $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantine` WHERE `rcpt` = :mbox'); + $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` = :mbox'); $stmt->execute(array(':mbox' => $_SESSION['mailcow_cc_username'])); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); while($row = array_shift($rows)) { @@ -632,7 +632,7 @@ function quarantine($_action, $_data = null) { } } elseif ($_SESSION['mailcow_cc_role'] == "admin") { - $stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantine`'); + $stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine`'); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); while($row = array_shift($rows)) { $q_meta[] = $row; @@ -641,7 +641,7 @@ function quarantine($_action, $_data = null) { else { $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains')); foreach ($domains as $domain) { - $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created` FROM `quarantine` WHERE `rcpt` REGEXP :domain'); + $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE("VIRUS_FOUND", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` REGEXP :domain'); $stmt->execute(array(':domain' => '@' . $domain . '$')); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); while($row = array_shift($rows)) { diff --git a/data/web/js/site/quarantine.js b/data/web/js/site/quarantine.js index 6364b579..eea00352 100644 --- a/data/web/js/site/quarantine.js +++ b/data/web/js/site/quarantine.js @@ -15,10 +15,11 @@ jQuery(function($){ {"name":"id","type":"ID","filterable": false,"sorted": true,"direction":"DESC","title":"ID","style":{"width":"50px"}}, {"name":"qid","breakpoints":"all","type":"text","title":lang.qid,"style":{"width":"125px"}}, {"name":"sender","title":lang.sender}, + {"name":"subject","title":lang.subj, "type": "text"}, {"name":"rcpt","title":lang.rcpt, "breakpoints":"xs sm md", "type": "text"}, {"name":"virus","title":lang.danger, "type": "text"}, {"name":"score","title": lang.spam_score, "type": "text"}, - {"name":"subject","title":lang.subj, "type": "text"}, + {"name":"notified","title":lang.notified, "type": "text"}, {"name":"created","formatter":function unix_time_format(tm) { var date = new Date(tm ? tm * 1000 : 0); return date.toLocaleString();},"title":lang.received,"style":{"width":"170px"}}, {"name":"action","filterable": false,"sortable": false,"style":{"text-align":"right"},"style":{"width":"220px"},"type":"html","title":lang.action,"breakpoints":"xs sm md"} ], @@ -44,6 +45,11 @@ jQuery(function($){ } else { item.virus = ''; } + if(item.notified > 0) { + item.notified = '✔'; + } else { + item.notified = '✖'; + } if (acl_data.login_as === 1) { item.action = '
' + ' ' + lang.show_item + '' + diff --git a/data/web/lang/lang.de.json b/data/web/lang/lang.de.json index af0b6d75..b68cacae 100644 --- a/data/web/lang/lang.de.json +++ b/data/web/lang/lang.de.json @@ -534,7 +534,8 @@ "qhandler_success": "Aktion wurde an das System übergeben. Sie dürfen dieses Fenster nun schließen.", "release_body": "Die ursprüngliche Nachricht wurde als EML-Datei im Anhang hinterlegt.", "release_subject": "Potentiell schädliche Nachricht aus Quarantäne: %s", - "confirm_delete": "Bestätigen Sie die Löschung dieses Elements." + "confirm_delete": "Bestätigen Sie die Löschung dieses Elements.", + "notified": "Benachrichtigt" }, "mailbox": { "tls_policy_maps": "TLS-Richtlinien", diff --git a/data/web/lang/lang.en.json b/data/web/lang/lang.en.json index 62559386..6d37b46c 100644 --- a/data/web/lang/lang.en.json +++ b/data/web/lang/lang.en.json @@ -533,7 +533,8 @@ "confirm_delete": "Confirm the deletion of this element.", "qhandler_success": "Request successfully sent to the system. You can now close the window.", "release_body": "We have attached your message as eml file to this message.", - "release_subject": "Potentially damaging quarantine item %s" + "release_subject": "Potentially damaging quarantine item %s", + "notified": "Notified" }, "mailbox": { "tls_policy_maps": "TLS policy maps", From f9a71931c825ee48a13ee7f18629e3cd047e5875 Mon Sep 17 00:00:00 2001 From: Geitenijs <40541903+Geitenijs@users.noreply.github.com> Date: Mon, 11 Nov 2019 20:19:46 +0100 Subject: [PATCH 2/2] Update lang.nl.json (#3140) --- data/web/lang/lang.nl.json | 47 +++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/data/web/lang/lang.nl.json b/data/web/lang/lang.nl.json index 3a58d43b..d45d8a7c 100644 --- a/data/web/lang/lang.nl.json +++ b/data/web/lang/lang.nl.json @@ -52,7 +52,7 @@ "rl_timeframe": "Ratelimit-tijdsbestek is ongeldig", "invalid_bcc_map_type": "Ongeldig BCC-map type", "bcc_empty": "BCC-bestemming dient ingevuld te worden", - "bcc_must_be_email": "BCC-bestemming %s is geen geldig e-mailadres", + "bcc_must_be_email": "BCC-bestemming %s is geen geldig mailadres", "bcc_exists": "BCC-map %s bestaat voor type %s", "private_key_error": "Privésleutel-fout: %s", "map_content_empty": "Inhoud dient ingevuld te zijn", @@ -221,13 +221,13 @@ "user_settings": "Gebruikersinstellingen", "mailbox_details": "Postvakdetails", "change_password": "Verander wachtwoord", - "client_configuration": "Toon configuratiegidsen voor e-mailprogramma's", + "client_configuration": "Toon configuratiegidsen voor mailprogramma's", "new_password": "Nieuw wachtwoord", "save_changes": "Wijzigingen opslaan", "password_now": "Huidig wachtwoord", "new_password_repeat": "Herhaal wachtwoord", "new_password_description": "Vereisten: 6 tekens lang, letters en nummers", - "spam_aliases": "Tijdelijk e-mailadres", + "spam_aliases": "Tijdelijk mailadres", "alias": "Alias", "shared_aliases": "Gedeelde aliasadressen", "shared_aliases_desc": "Een gedeeld aliasadres wordt niet beïnvloed door gebruiker-specifieke instellingen. Een aangepast spamfilter kan eventueel worden ingesteld door een beheerder.", @@ -252,9 +252,9 @@ "weeks": "weken", "spamfilter": "Spamfilter", "spamfilter_wl": "Whitelist", - "spamfilter_wl_desc": "Zet e-mailadressen op de whitelist om ze nooit als spam te markeren.
Deze lijst wordt niet toegepast op een gedeeld aliasadres.
Wildcards (*) zijn toegestaan.", + "spamfilter_wl_desc": "Zet mailadressen op de whitelist om ze nooit als spam te markeren.
Deze lijst wordt niet toegepast op een gedeeld aliasadres.
Wildcards (*) zijn toegestaan.", "spamfilter_bl": "Blacklist", - "spamfilter_bl_desc": "Zet e-mailadressen op de blacklist om ze altijd als spam te markeren.
Deze lijst wordt niet toegepast op een gedeeld aliasadres.
Wildcards (*) zijn toegestaan.", + "spamfilter_bl_desc": "Zet mailadressen op de blacklist om ze altijd als spam te markeren.
Deze lijst wordt niet toegepast op een gedeeld aliasadres.
Wildcards (*) zijn toegestaan.", "spamfilter_behavior": "Beoordeling", "spamfilter_table_rule": "Regel", "spamfilter_table_action": "Handeling", @@ -270,17 +270,17 @@ "waiting": "Wachten", "status": "Status", "running": "Wordt uitgevoerd", - "tls_policy_warning": "Let wel: Door versleuteling te forceren, worden mogelijk niet alle e-mails afgeleverd.
Berichten die niet aan het ingestelde beleid voldoen, worden resoluut geweigerd.
Dit is van toepassing op het primaire e-mailadres, inclusief alle directe aliasadressen.", + "tls_policy_warning": "Let wel: Door versleuteling te forceren, worden mogelijk niet alle mails afgeleverd.
Berichten die niet aan het ingestelde beleid voldoen, worden resoluut geweigerd.
Dit is van toepassing op het primaire mailadres, inclusief alle directe aliasadressen.", "tls_policy": "Versleutelingsbeleid", "tls_enforce_in": "Vereis inkomend", "tls_enforce_out": "Vereis uitgaand", "no_record": "Geen vermelding", - "tag_handling": "E-mailtags", + "tag_handling": "Mail-tags", "tag_in_subfolder": "In submap", "tag_in_subject": "In onderwerp", "tag_in_none": "Niets doen", "tag_help_explain": "In submap: er wordt een nieuwe map aangemaakt, genoemd naar de tag (bijv.: \"INBOX/Tesla\").
In onderwerp: de tag wordt vóór het oorspronkelijke onderwerp geplaatst (bijv.: \"[Tesla] Uw serviceafspraak\").", - "tag_help_example": "Voorbeeld van een e-maildres met tag: ik+Tesla@example.org", + "tag_help_example": "Voorbeeld van een maildres met tag: ik+Tesla@example.org", "eas_reset": "Herstel ActiveSync-apparaatcache", "eas_reset_now": "Herstel nu", "eas_reset_help": "In de meeste gevallen verhelpt dit problemen met ActiveSync op je apparaten
Let wel: alle mails, contacten en agenda's zullen opnieuw gedownload worden!", @@ -310,7 +310,7 @@ "spamfilter": "Spamfilter", "domain": "Domein", "domain_s": "Domein(en)", - "rspamd-com_settings": "Rspamd documentatie - Een beschrijving voor deze instelling zal automatisch worden gegenereerd, bekijk de onderstaande presets voor meer info.", + "rspamd-com_settings": "Een beschrijving voor deze instelling zal automatisch worden gegenereerd, gebruik de onderstaande presets als voorbeeld. Raadpleeg de Rspamd-documentatie voor meer informatie.", "no_new_rows": "Er zijn geen extra rijen beschikbaar", "queue_manager": "Wachtrijbeheerder", "additional_rows": " extra rijen zijn toegevoegd", @@ -491,16 +491,16 @@ "rspamd_global_filters_info": "Ieder globaal filter heeft zijn eigen functie, zie de namen. De velden kunnen enkel regular expressions bevatten met het formaat \"/pattern/options\", bijvoorbeeld /.+@domain\\.tld/i.
Ondanks dat alle invoer wordt gecontroleerd op fouten, is het toch mogelijk dat Rspamd onbruikbaar wordt als deze de invoer niet kan lezen.
Als je problemen ervaart, herstart Rspamd dan om de filters opnieuw te laten lezen." }, "start": { - "mailcow_apps_detail": "Gebruik een Mailcow-app om je e-mails, agenda, contacten en meer te bekijken.", + "mailcow_apps_detail": "Gebruik een Mailcow-app om je mails, agenda, contacten en meer te bekijken.", "mailcow_panel_detail": "Domeinbeheerders kunnen postvakken en aliassen aanmaken, wijzigen en verwijderen. Ook kunnen ze domeinen aanpassen en informatie over deze verkrijgen.
Gebruikers kunnen tijdelijke aliassen aanmaken, hun wachtwoord aanpassen en de spamfilterinstellingen wijzigen.", - "imap_smtp_server_auth_info": "Gebruik je volledige e-mailadres en het bijbehorende (onversleutelde) verificatiemechanisme.
De aanmeldgegevens worden versleuteld verstuurd.", + "imap_smtp_server_auth_info": "Gebruik je volledige mailadres en het bijbehorende (onversleutelde) verificatiemechanisme.
De aanmeldgegevens worden versleuteld verstuurd.", "help": "Toon/verberg hulppaneel" }, "quarantine": { "disabled_by_config": "De huidige systeemconfiguratie deactiveert de quarantainefunctionaliteit.", "quarantine": "Quarantaine", "learn_spam_delete": "Onthoud als spam en verwijder", - "qinfo": "Het quarantainesysteem slaat geweigerde e-mail op, terwijl het voor de afzender lijkt alsof deze niet ontvangen is.
\"Onthoud als spam en verwijder\" traint het systeem om soortgelijke e-mails in de toekomst weer als spam te markeren.
Wees er van bewust dat wanneer er meerdere berichten worden onderzocht, dit mogelijk enige tijd kan duren.", + "qinfo": "Het quarantainesysteem slaat geweigerde mail op, terwijl het voor de afzender lijkt alsof deze niet ontvangen is.
\"Onthoud als spam en verwijder\" traint het systeem om soortgelijke mails in de toekomst weer als spam te markeren.
Wees er van bewust dat wanneer er meerdere berichten worden onderzocht, dit mogelijk enige tijd kan duren.", "download_eml": "Download (.eml)", "release": "Geef vrij", "empty": "Geen resultaten", @@ -530,7 +530,8 @@ "confirm_delete": "Bevestig de verwijdering van dit item.", "qhandler_success": "Verzoek met succes verzonden naar het systeem. Je kunt het venster nu veilig sluiten.", "release_body": "We hebben het oorspronkelijke bericht als los bestand meegestuurd. Klik erop om deze weer te geven.", - "release_subject": "Mogelijk schadelijk quarantaine-item %s" + "release_subject": "Mogelijk schadelijk quarantaine-item %s", + "notified": "Verwittigd" }, "mailbox": { "tls_policy_maps": "Globaal versleutelingsbeleid", @@ -635,13 +636,17 @@ "recipient_maps": "Ontvanger-maps", "recipient_map": "Ontvanger-map", "recipient_map_info": "Ontvanger-maps worden gebruikt om het doeladres van een bericht te vervangen voordat het in een postvak terecht komt.", - "recipient_map_old_info": "De oorspronkelijke bestemming van een ontvanger-map dient een geldig e-mailadres of domeinnaam te zijn.", - "recipient_map_new_info": "De bestemming van een ontvanger-map dient een geldig e-mailadres te zijn.", + "recipient_map_old_info": "De oorspronkelijke bestemming van een ontvanger-map dient een geldig mailadres of domeinnaam te zijn.", + "recipient_map_new_info": "De bestemming van een ontvanger-map dient een geldig mailadres te zijn.", "recipient_map_old": "Oorspronkelijke ontvanger", "recipient_map_new": "Nieuwe ontvanger", "add_recipient_map_entry": "Voeg ontvanger-map toe", "mailbox_defquota": "Standaard postvakgrootte", - "alias_domain_backupmx": "Aliasdomein inactief voor doorstuurdomein" + "alias_domain_backupmx": "Aliasdomein inactief voor doorstuurdomein", + "insert_preset": "Voeg voorbeelden in \"%s\"", + "sieve_preset_header": "Zie de onderstaande voorbeelden. Raadpleeg Wikipedia voor meer informatie.", + "sieve_preset_1": "Weiger mail met mogelijk schadelijke bestandstypes", + "sieve_preset_2": "Markeer de mail van een specifieke afzender altijd als gelezen" }, "edit": { "sogo_visible": "Alias is zichtbaar in SOGo", @@ -719,7 +724,7 @@ "spam_score": "Stel een aangepaste spamscore in", "spam_policy": "Voeg onderdelen toe, of verwijder onderdelen van de white- of blacklist", "spam_alias": "Maak een nieuw tijdelijk alias aan, of pas deze aan", - "bcc_dest_format": "Een BCC-bestemming dient één geldig e-mailadres te zijn.", + "bcc_dest_format": "Een BCC-bestemming dient één geldig mailadres te zijn.", "mailbox_quota_def": "Standaard postvakquotum", "mbox_rl_info": "Deze ratelimit wordt toegepast op de postvakgebruiker, en geldt voor elk \"van\"-adres gebruikt door de huidige postvakgebruiker. Een postvak-ratelimit gaat boven een domein-ratelimit." }, @@ -764,22 +769,22 @@ "relay_domain": "Schakel dit domein door", "relay_all_info": "Wanneer er wordt gekozen om niet alle ontvangers door te schakelen, dient er per ontvanger een blind postvak aangemaakt te worden.", "alias_address": "Aliasadres(sen)", - "alias_address_info": "Volledig(e) e-mailadres(sen) of @example.com, om een catch-all aan te maken voor een domein (kommagescheiden). Enkel Mailcow-domeinen.", + "alias_address_info": "Volledig(e) mailadres(sen) of @example.com, om een catch-all aan te maken voor een domein (kommagescheiden). Enkel Mailcow-domeinen.", "alias_domain_info": "Enkel geldige domeinnamen (kommagescheiden).", "target_address": "Doeladressen", - "target_address_info": "Volledig(e) e-mailadres(sen) (kommagescheiden).", + "target_address_info": "Volledig(e) mailadres(sen) (kommagescheiden).", "alias_domain": "Aliasdomein", "select": "Selecteer...", "target_domain": "Doeldomein", "kind": "Soort", - "mailbox_username": "Gebruikersnaam (linkergedeelte van een e-mailadres)", + "mailbox_username": "Gebruikersnaam (linkergedeelte van een mailadres)", "full_name": "Volledige naam", "quota_mb": "Quotum (MiB)", "select_domain": "Selecteer eerst een domein", "password": "Wachtwoord", "password_repeat": "Herhaal wachtwoord", "restart_sogo_hint": "SOGo dient opnieuw opgestart te worden nadat een domein is toegevoegd", - "goto_null": "Houd e-mail achterwege", + "goto_null": "Houd mail achterwege", "goto_ham": "Leer als ham", "goto_spam": "Leer als spam", "validation_success": "Succesvol geverifieerd",