From 56ad89d3afaceb7f2817cb9b5338438a7984b7d1 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 30 Mar 2019 14:12:07 +0100 Subject: [PATCH] #411 - added backup reminder modal to index page --- .../controller/BackupController.java | 32 +++++++++++++++++++ .../controller/IndexController.java | 9 +++++- .../budgetmaster/settings/Settings.java | 25 ++++++++++----- .../settings/SettingsService.java | 17 +++++++--- src/main/resources/languages/_de.properties | 3 ++ src/main/resources/languages/_en.properties | 3 ++ src/main/resources/static/js/accounts.js | 1 - src/main/resources/static/js/main.js | 5 +++ .../resources/templates/helpers/navbar.ftl | 15 +++++++++ src/main/resources/templates/index.ftl | 1 + .../resources/templates/settings/settings.ftl | 2 +- .../templates/settings/settingsMacros.ftl | 4 +-- 12 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 src/main/java/de/deadlocker8/budgetmaster/controller/BackupController.java diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/BackupController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/BackupController.java new file mode 100644 index 000000000..00dd17260 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/BackupController.java @@ -0,0 +1,32 @@ +package de.deadlocker8.budgetmaster.controller; + +import de.deadlocker8.budgetmaster.settings.SettingsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletRequest; + + +@Controller +public class BackupController extends BaseController +{ + @Autowired + private SettingsService settingsService; + + @RequestMapping("/backupReminder/cancel") + public String cancel(HttpServletRequest request, Model model) + { + settingsService.updateLastBackupReminderDate(); + model.addAttribute("settings", settingsService.getSettings()); + return "redirect:" + request.getHeader("Referer"); + } + + @RequestMapping("/backupReminder/settings") + public String settings(Model model) + { + settingsService.updateLastBackupReminderDate(); + return "redirect:/settings"; + } +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java index 9801219b7..82550216f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/IndexController.java @@ -1,15 +1,22 @@ package de.deadlocker8.budgetmaster.controller; +import de.deadlocker8.budgetmaster.settings.SettingsService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class IndexController extends BaseController { + @Autowired + private SettingsService settingsService; + @RequestMapping("/") - public String index() + public String index(Model model) { + model.addAttribute("settings", settingsService.getSettings()); return "index"; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java index 08b61f136..b102276be 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java @@ -1,6 +1,8 @@ package de.deadlocker8.budgetmaster.settings; import de.deadlocker8.budgetmaster.utils.LanguageType; +import org.joda.time.DateTime; +import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.Entity; import javax.persistence.Id; @@ -15,8 +17,10 @@ public class Settings private boolean restActivated; private boolean useDarkTheme; private boolean autoUpdateCheckEnabled; + private Boolean backupReminderActivated; - private Boolean backupReminderShownThisMonth; + @DateTimeFormat(pattern = "dd.MM.yyyy") + private DateTime lastBackupReminderDate; public Settings() { @@ -31,7 +35,7 @@ public class Settings defaultSettings.setUseDarkTheme(false); defaultSettings.setAutoUpdateCheckEnabled(true); defaultSettings.setBackupReminderActivated(true); - defaultSettings.setBackupReminderShownThisMonth(false); + defaultSettings.setLastBackupReminderDate(DateTime.now().minusMonths(1)); return defaultSettings; } @@ -91,7 +95,7 @@ public class Settings this.autoUpdateCheckEnabled = autoUpdateCheckEnabled; } - public Boolean isBackupReminderActivated() + public Boolean getBackupReminderActivated() { return backupReminderActivated; } @@ -101,14 +105,19 @@ public class Settings this.backupReminderActivated = backupReminderActivated; } - public Boolean isBackupReminderShownThisMonth() + public DateTime getLastBackupReminderDate() + { + return lastBackupReminderDate; + } + + public void setLastBackupReminderDate(DateTime lastBackupReminderDate) { - return backupReminderShownThisMonth; + this.lastBackupReminderDate = lastBackupReminderDate; } - public void setBackupReminderShownThisMonth(Boolean backupReminderShownThisMonth) + public boolean needToShowBackupReminder() { - this.backupReminderShownThisMonth = backupReminderShownThisMonth; + return lastBackupReminderDate.getMonthOfYear() != DateTime.now().getMonthOfYear(); } @Override @@ -122,7 +131,7 @@ public class Settings ", useDarkTheme=" + useDarkTheme + ", autoUpdateCheckEnabled=" + autoUpdateCheckEnabled + ", backupReminderActivated=" + backupReminderActivated + - ", backupReminderShownThisMonth=" + backupReminderShownThisMonth + + ", lastBackupReminderDate=" + lastBackupReminderDate + '}'; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java index beef520f4..798ee39af 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java @@ -1,7 +1,6 @@ package de.deadlocker8.budgetmaster.settings; -import de.deadlocker8.budgetmaster.accounts.Account; -import de.deadlocker8.budgetmaster.accounts.AccountType; +import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -29,13 +28,13 @@ public class SettingsService } Settings settings = settingsRepository.findOne(0); - if(settings.isBackupReminderActivated() == null) + if(settings.getBackupReminderActivated() == null) { settings.setBackupReminderActivated(true); } - if(settings.isBackupReminderShownThisMonth() == null) + if(settings.getLastBackupReminderDate() == null) { - settings.setBackupReminderShownThisMonth(false); + settings.setLastBackupReminderDate(DateTime.now().minusMonths(1)); } settingsRepository.delete(0); settingsRepository.save(settings); @@ -45,4 +44,12 @@ public class SettingsService { return settingsRepository.findOne(0); } + + public void updateLastBackupReminderDate() + { + Settings settings = getSettings(); + settings.setLastBackupReminderDate(DateTime.now()); + settingsRepository.delete(0); + settingsRepository.save(settings); + } } \ No newline at end of file diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index d86aee574..8346807ac 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -94,6 +94,9 @@ info.database.import.destination=importieren in info.database.import.or=oder info.title.update=Update verf�gbar info.text.update=Es ist ein Update f�r BudgetMaster verf�gbar<br><br>Installiert: v{0}<br>Verf�gbar: {1}<br><br>M�chtest du das Update jetzt durchf�hren?<br><br>Hinweis: Das Aktualisieren kann je nach Internetverbindung eine Weile dauern. Der BudgetMaster Server wird danach automatisch nuegestartet. Bitte f�hre nach dem Start des Updates keine �nderungen an Konten, Buchungen, Kategorien, etc. durch. +info.title.backup.reminder=Zeit f�r ein Backup +info.text.backup.reminder=Schon mal �ber ein Backup nachgedacht?<br>Du solltest deine BudgetMaster Datenbank regelm��ig sichern.<br>Dies geht besonders einfach in den Einstellungen.<br><br>(Du wilst diese Erinnerung nicht jeden Monat sehen? Dann deaktiviere die Backup-Erinnerung in den Einstellungen.) +info.button.backup.reminder=Zu den Einstellungen # WARNING warning.text.account.delete=Das Konto "{0}" kann nicht gel�scht werden, da mindestens ein Konto existieren muss. Um dieses Konto zu l�schen musst du zuerst ein neues anlegen. diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index 6552933dc..bcf1596bd 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -95,6 +95,9 @@ info.database.import.destination=to info.database.import.or=or info.title.update=Update available info.text.update=An update for BudgetMaster is available<br><br>Installed: v{0}<br>Available: {1}<br><br>Would you like to update now?<br><br>Note: The update may take a while depending on your internet connection. The BudgetMaster server will be restarted automatically. Please do not make any changes to accounts, transactions, categories, etc. after starting the update. +info.title.backup.reminder=Time for a backup +info.text.backup.reminder=Have you ever thought about a backup?<br>You should back up your BudgetMaster database regularly.<br>This can be donee on the settings page.<br><br>(You don't want to see this reminder every month? Disable the backup reminder in the settings.) +info.button.backup.reminder=To the settings # WARNING warning.text.account.delete=The account "{0}" could not be deleted, because at least one account must exist at all time. You have to create a new account in order to delete this one. diff --git a/src/main/resources/static/js/accounts.js b/src/main/resources/static/js/accounts.js index 41d66636f..131dc72e7 100644 --- a/src/main/resources/static/js/accounts.js +++ b/src/main/resources/static/js/accounts.js @@ -1,5 +1,4 @@ $( document ).ready(function() { - if($("#modalConfirmDelete").length) { $('#modalConfirmDelete').modal('open'); diff --git a/src/main/resources/static/js/main.js b/src/main/resources/static/js/main.js index 7b097f1ea..a4f781bce 100644 --- a/src/main/resources/static/js/main.js +++ b/src/main/resources/static/js/main.js @@ -3,6 +3,11 @@ $( document ).ready(function() { $('.modal').modal(); + if($("#modalBackupReminder").length) + { + $('#modalBackupReminder').modal('open'); + } + $('.tooltipped').tooltip(); $('select').formSelect(); diff --git a/src/main/resources/templates/helpers/navbar.ftl b/src/main/resources/templates/helpers/navbar.ftl index 0d3fe234b..5f1af733a 100644 --- a/src/main/resources/templates/helpers/navbar.ftl +++ b/src/main/resources/templates/helpers/navbar.ftl @@ -131,4 +131,19 @@ </li> </ul> </li> +</#macro> + +<#macro backupReminder settings> + <#if settings.needToShowBackupReminder()> + <div id="modalBackupReminder" class="modal background-color"> + <div class="modal-content"> + <h4>${locale.getString("info.title.backup.reminder")}</h4> + <p>${locale.getString("info.text.backup.reminder")}</p> + </div> + <div class="modal-footer background-color"> + <a href="<@s.url '/backupReminder/cancel'/>" class="modal-action modal-close waves-effect waves-light red btn-flat white-text">${locale.getString("cancel")}</a> + <a href="<@s.url '/backupReminder/settings'/>" class="modal-action modal-close waves-effectwaves-light green btn-flat white-text">${locale.getString("info.button.backup.reminder")}</a> + </div> + </div> + </#if> </#macro> \ No newline at end of file diff --git a/src/main/resources/templates/index.ftl b/src/main/resources/templates/index.ftl index a51912e67..987bada70 100644 --- a/src/main/resources/templates/index.ftl +++ b/src/main/resources/templates/index.ftl @@ -7,6 +7,7 @@ <body class="budgetmaster-blue-light"> <#import "helpers/navbar.ftl" as navbar> <@navbar.navbar "home"/> + <@navbar.backupReminder settings/> <main> <div class="card main-card background-color"> diff --git a/src/main/resources/templates/settings/settings.ftl b/src/main/resources/templates/settings/settings.ftl index ee6ca5fa2..ead828e44 100644 --- a/src/main/resources/templates/settings/settings.ftl +++ b/src/main/resources/templates/settings/settings.ftl @@ -22,7 +22,7 @@ <form name="Settings" action="<@s.url '/settings/save'/>" method="post"> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <input type="hidden" name="ID" value="${settings.getID()?c}"> - <input type="hidden" name="backupReminderShownThisMonth" value="${settings.isBackupReminderShownThisMonth()?c}"> + <input type="hidden" name="lastBackupReminderDate" value="${helpers.getLongDateString(settings.getLastBackupReminderDate())}"> <#-- password --> <div class="row"> diff --git a/src/main/resources/templates/settings/settingsMacros.ftl b/src/main/resources/templates/settings/settingsMacros.ftl index cb0e5c298..568860894 100644 --- a/src/main/resources/templates/settings/settingsMacros.ftl +++ b/src/main/resources/templates/settings/settingsMacros.ftl @@ -14,7 +14,7 @@ </div> <div class="row"> <div class="col s12 center-align"> - <@switch "backupReminder" "backupReminderActivated" settings.isBackupReminderActivated()/> + <@switch "backupReminder" "backupReminderActivated" settings.getBackupReminderActivated()/> </div> </div> </div> @@ -27,7 +27,7 @@ <@switch "darkTheme" "useDarkTheme" settings.isUseDarkTheme()/> </div> <div class="col l2 center-align"> - <@switch "backupReminder" "backupReminderActivated" settings.isBackupReminderActivated()/> + <@switch "backupReminder" "backupReminderActivated" settings.getBackupReminderActivated()/> </div> </div> </div> -- GitLab