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 0000000000000000000000000000000000000000..00dd172608631eb621386d450fd708be45b78955 --- /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 9801219b78acc7ace68bbdf9dd9e36ea45acd1df..82550216f95e38e1d7707ad7eed7e06c060a1879 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 08b61f136826a972514ba0b98542abedb60696e3..b102276be67dd40585929368be66bfc5c5c27534 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 beef520f41b250c3480311ad89f2bfe5e1c3a4cc..798ee39af1a3fd92c5043102cccd1345585389b5 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 d86aee574d4d7c7c5f43e34281f2fbf930d4c319..8346807ac05e8f0cf7c4b2f1248c22b23b7339c0 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 6552933dc33174329676694116b43b46018bff23..bcf1596bd0c694945cb6068a3837dcef6aa59e51 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 41d66636fe6809d6e77a312192eed7c9d8db24d6..131dc72e7a7641539941244efc2e36ad24f31d0d 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 7b097f1eaf3660f5bb69bbdc222f00b693568f66..a4f781bce99f54baa3625d03f469a5a6dd54b016 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 0d3fe234b81aff8f59b81c32063c6b0dc3137f17..5f1af733a688059ae540aa715ba6fe6a935b8c12 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 a51912e67985ce699f9fa306cec1fdca18dc34bd..987bada70035b1a4ca01af1c4021ee8bf0476c81 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 ee6ca5fa21c256eddecfc92a071301caabbf4d22..ead828e449696ba4ceb134b4a3447f95bdd4fdf4 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 cb0e5c2984c8da3eec51b0511b4ec2312111aeb7..568860894d86e62b872804c39b8ba0d5b6c4bc7d 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>