From e8dc47c06234a1bcb49a18a7d476b29479f10397 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 15 Sep 2020 22:09:25 +0200 Subject: [PATCH] #528 - readonly accounts should not be selectable as default account + default account should not be able to set to readonly --- .../budgetmaster/accounts/AccountController.java | 7 +++++-- .../budgetmaster/accounts/AccountService.java | 9 +++++++-- src/main/resources/static/css/dark/style.css | 6 ++++++ src/main/resources/static/css/style.css | 6 ++++++ src/main/resources/templates/accounts/accounts.ftl | 8 +++++--- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java index c593719bd..54cd57729 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountController.java @@ -65,8 +65,11 @@ public class AccountController extends BaseController } final Account account = accountOptional.get(); - account.setReadOnly(!account.isReadOnly()); - accountService.getRepository().save(account); + if(!account.isDefault()) + { + account.setReadOnly(!account.isReadOnly()); + accountService.getRepository().save(account); + } String referer = request.getHeader("Referer"); if(referer.contains("database/import")) diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java index 0fa660732..525f7ccff 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java @@ -149,8 +149,6 @@ public class AccountService implements Resetable public void setAsDefaultAccount(int ID) { - unsetDefaultForAllAccounts(); - Optional<Account> accountToSelectOptional = accountRepository.findById(ID); if(accountToSelectOptional.isEmpty()) { @@ -158,6 +156,13 @@ public class AccountService implements Resetable } Account accountToSelect = accountToSelectOptional.get(); + if(accountToSelect.isReadOnly()) + { + return; + } + + unsetDefaultForAllAccounts(); + accountToSelect.setDefault(true); accountRepository.save(accountToSelect); } diff --git a/src/main/resources/static/css/dark/style.css b/src/main/resources/static/css/dark/style.css index 807ec5467..206878b18 100644 --- a/src/main/resources/static/css/dark/style.css +++ b/src/main/resources/static/css/dark/style.css @@ -612,6 +612,12 @@ input[type="radio"]:not(:checked) + span::before, [type="radio"]:not(:checked) + color: #2E79B9; } +.placeholder-icon { + display: inline-block; + width: 1.3rem; + margin-right: 15px; +} + .invisible { opacity: 0; } diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index 8a988dd3d..1ad8cb5c4 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -527,6 +527,12 @@ input[type="radio"]:checked + span::after, [type="radio"].with-gap:checked + spa color: #2E79B9; } +.placeholder-icon { + display: inline-block; + width: 1.3rem; + margin-right: 15px; +} + .invisible { opacity: 0; } diff --git a/src/main/resources/templates/accounts/accounts.ftl b/src/main/resources/templates/accounts/accounts.ftl index 6a865e4fe..73b5a452b 100644 --- a/src/main/resources/templates/accounts/accounts.ftl +++ b/src/main/resources/templates/accounts/accounts.ftl @@ -24,17 +24,19 @@ <#if (account.getType().name() == "CUSTOM")> <tr> <td> - <a href="<@s.url '/accounts/${account.getID()?c}/setAsDefault'/>" class="btn-flat no-padding text-color tooltipped" data-position="left" data-tooltip="${locale.getString("account.tooltip.default")}"><i class="material-icons left"><#if account.isDefault()>star<#else>star_border</#if></i></a> - <#if account.isReadOnly()> <#assign toolTipText = locale.getString("account.tooltip.readonly.activate")/> <#assign lockIcon = '<i class="fas fa-lock"></i>'/> + <div class="placeholder-icon"></div> <#else> <#assign toolTipText = locale.getString("account.tooltip.readonly.deactivate")/> <#assign lockIcon = '<i class="fas fa-lock-open"></i>'/> + <a href="<@s.url '/accounts/${account.getID()?c}/setAsDefault'/>" class="btn-flat no-padding text-color tooltipped" data-position="left" data-tooltip="${locale.getString("account.tooltip.default")}"><i class="material-icons left"><#if account.isDefault()>star<#else>star_border</#if></i></a> </#if> - <a href="<@s.url '/accounts/${account.getID()?c}/toggleReadOnly'/>" class="btn-flat no-padding text-color tooltipped" data-position="left" data-tooltip="${toolTipText}">${lockIcon}</a> + <#if !account.isDefault()> + <a href="<@s.url '/accounts/${account.getID()?c}/toggleReadOnly'/>" class="btn-flat no-padding text-color tooltipped" data-position="right" data-tooltip="${toolTipText}">${lockIcon}</a> + </#if> </td> <td>${account.getName()}</td> <td> -- GitLab