From c60eb050ef88f263029c294ed0d052dc7d24c4b0 Mon Sep 17 00:00:00 2001 From: Nicola Murino Date: Mon, 5 Feb 2024 19:18:37 +0100 Subject: [PATCH] WebAdmin: improve the error message when trying to delete referenced resources Signed-off-by: Nicola Murino --- static/locales/en/translation.json | 7 +++++-- static/locales/it/translation.json | 7 +++++-- templates/webadmin/eventactions.html | 24 ++++++++++++++++++------ templates/webadmin/groups.html | 24 ++++++++++++++++++------ templates/webadmin/roles.html | 24 ++++++++++++++++++------ 5 files changed, 64 insertions(+), 22 deletions(-) diff --git a/static/locales/en/translation.json b/static/locales/en/translation.json index e21d9bc3..2a7e528f 100644 --- a/static/locales/en/translation.json +++ b/static/locales/en/translation.json @@ -529,7 +529,8 @@ "template_no_user": "No valid user defined, unable to complete the requested action" }, "group": { - "view_manage": "View and manage groups" + "view_manage": "View and manage groups", + "err_delete_referenced": "Cannot delete a group with associated users, remove associations first" }, "virtual_folders": { "view_manage": "View and manage virtual folders", @@ -739,7 +740,8 @@ "client": "Client: {{- val}}" }, "role": { - "view_manage": "View and manage roles" + "view_manage": "View and manage roles", + "err_delete_referenced": "Cannot delete a role with associated admins, remove associations first" }, "ip_list": { "view_manage": "View and manage IP lists", @@ -896,6 +898,7 @@ }, "actions": { "view_manage": "View and manage rule actions for events", + "err_delete_referenced": "Cannot delete an action with associated rules, remove associations first", "http_url": "Server URL", "http_url_help": "i.e https://host:port/path. Placeholders are supported within the URL path", "http_url_required": "URL is required", diff --git a/static/locales/it/translation.json b/static/locales/it/translation.json index 349f7f8c..d13a379b 100644 --- a/static/locales/it/translation.json +++ b/static/locales/it/translation.json @@ -529,7 +529,8 @@ "template_no_user": "Nessun utente valido definito. Impossibile completare l'azione richiesta" }, "group": { - "view_manage": "Visualizza e gestisci gruppi" + "view_manage": "Visualizza e gestisci gruppi", + "err_delete_referenced": "Impossibile eliminare un gruppo con utenti associati, rimuovere prima le associazioni" }, "virtual_folders": { "view_manage": "Visualizza e gestisci cartelle virtuali", @@ -739,7 +740,8 @@ "client": "Client: {{- val}}" }, "role": { - "view_manage": "Visualizza e gestisci ruoli" + "view_manage": "Visualizza e gestisci ruoli", + "err_delete_referenced": "Impossibile eliminare un ruolo con amministratori associati, rimuovere prima le associazioni" }, "ip_list": { "view_manage": "Visualizza e gestisci liste IP", @@ -896,6 +898,7 @@ }, "actions": { "view_manage": "Visualizza e gestisci le azioni delle regole per gli eventi", + "err_delete_referenced": "Impossibile eliminare un'azione con regole associate, rimuovere prima le associazioni", "http_url": "URL Server", "http_url_help": "Ad es. \"https://host:port/path\". I segnaposto sono supportati nel path dell'URL", "http_url_required": "L'URL รจ obbligatorio", diff --git a/templates/webadmin/eventactions.html b/templates/webadmin/eventactions.html index dbf6faa8..e0d8b59c 100644 --- a/templates/webadmin/eventactions.html +++ b/templates/webadmin/eventactions.html @@ -248,11 +248,11 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). stateSave: true, stateDuration: 0, stateLoadParams: function (settings, data) { - if (data.search.search){ - const filterSearch = document.querySelector('[data-table-filter="search"]'); - filterSearch.value = data.search.search; - } - }, + if (data.search.search){ + const filterSearch = document.querySelector('[data-table-filter="search"]'); + filterSearch.value = data.search.search; + } + }, language: { info: $.t('datatable.info'), infoEmpty: $.t('datatable.info_empty'), @@ -312,7 +312,19 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). el.on("click", function(e){ e.preventDefault(); const parent = e.target.closest('tr'); - deleteAction(dt.row(parent).data()['name']); + let row = dt.row(parent).data(); + if (row.rules && row.rules.length > 0){ + ModalAlert.fire({ + text: $.t('actions.err_delete_referenced'), + icon: "warning", + confirmButtonText: $.t('general.ok'), + customClass: { + confirmButton: "btn btn-primary" + } + }); + return; + } + deleteAction(row['name']); }); }); } diff --git a/templates/webadmin/groups.html b/templates/webadmin/groups.html index fa88196f..8e8919ac 100644 --- a/templates/webadmin/groups.html +++ b/templates/webadmin/groups.html @@ -251,11 +251,11 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). fixedColumnsLeft: 1 }, stateLoadParams: function (settings, data) { - if (data.search.search){ - const filterSearch = document.querySelector('[data-table-filter="search"]'); - filterSearch.value = data.search.search; - } - }, + if (data.search.search){ + const filterSearch = document.querySelector('[data-table-filter="search"]'); + filterSearch.value = data.search.search; + } + }, language: { info: $.t('datatable.info'), infoEmpty: $.t('datatable.info_empty'), @@ -326,7 +326,19 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). el.on("click", function(e){ e.preventDefault(); const parent = e.target.closest('tr'); - deleteAction(dt.row(parent).data()['name']); + let row = dt.row(parent).data(); + if (row.users && row.users.length > 0){ + ModalAlert.fire({ + text: $.t('group.err_delete_referenced'), + icon: "warning", + confirmButtonText: $.t('general.ok'), + customClass: { + confirmButton: "btn btn-primary" + } + }); + return; + } + deleteAction(row['name']); }); }); } diff --git a/templates/webadmin/roles.html b/templates/webadmin/roles.html index 7aa0f005..5f4e4760 100644 --- a/templates/webadmin/roles.html +++ b/templates/webadmin/roles.html @@ -252,11 +252,11 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). fixedColumnsLeft: 1 }, stateLoadParams: function (settings, data) { - if (data.search.search){ - const filterSearch = document.querySelector('[data-table-filter="search"]'); - filterSearch.value = data.search.search; - } - }, + if (data.search.search){ + const filterSearch = document.querySelector('[data-table-filter="search"]'); + filterSearch.value = data.search.search; + } + }, language: { info: $.t('datatable.info'), infoEmpty: $.t('datatable.info_empty'), @@ -327,7 +327,19 @@ explicit grant from the SFTPGo Team (support@sftpgo.com). el.on("click", function(e){ e.preventDefault(); const parent = e.target.closest('tr'); - deleteAction(dt.row(parent).data()['name']); + let row = dt.row(parent).data(); + if (row.admins && row.admins.length > 0){ + ModalAlert.fire({ + text: $.t('role.err_delete_referenced'), + icon: "warning", + confirmButtonText: $.t('general.ok'), + customClass: { + confirmButton: "btn btn-primary" + } + }); + return; + } + deleteAction(row['name']); }); }); }