diff --git a/src/main/java/de/deadlocker8/budgetmaster/backup/AutoBackupStrategy.java b/src/main/java/de/deadlocker8/budgetmaster/backup/AutoBackupStrategy.java new file mode 100644 index 0000000000000000000000000000000000000000..71cf3aa5e7de6ee5659e33759a881cefbd7ffc14 --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/backup/AutoBackupStrategy.java @@ -0,0 +1,41 @@ +package de.deadlocker8.budgetmaster.backup; + +import de.thecodelabs.utils.util.Localization; + +public enum AutoBackupStrategy +{ + NONE("settings.backup.auto.strategy.none"), + LOCAL("settings.backup.auto.strategy.local"), + GIT_LOCAL("settings.backup.auto.strategy.git.local"), + GIT_REMOTE("settings.backup.auto.strategy.git.remote"); + + private String localizationKey; + + AutoBackupStrategy(String localizationKey) + { + this.localizationKey = localizationKey; + } + + public String getLocalizationKey() + { + return localizationKey; + } + + public String getName() + { + return Localization.getString(localizationKey); + } + public static AutoBackupStrategy fromName(String name) + { + for(AutoBackupStrategy type : values()) + { + if(type.getName().equals(name)) + { + return type; + } + } + + return null; + } + +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/AutoBackupTime.java b/src/main/java/de/deadlocker8/budgetmaster/backup/AutoBackupTime.java similarity index 95% rename from src/main/java/de/deadlocker8/budgetmaster/settings/AutoBackupTime.java rename to src/main/java/de/deadlocker8/budgetmaster/backup/AutoBackupTime.java index 6075f4e1ade4b5eb0ee3df76ea2d7508243d95b6..0a4a484821e0207e1af2a5c95bb7b24841984388 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/AutoBackupTime.java +++ b/src/main/java/de/deadlocker8/budgetmaster/backup/AutoBackupTime.java @@ -1,4 +1,4 @@ -package de.deadlocker8.budgetmaster.settings; +package de.deadlocker8.budgetmaster.backup; import de.thecodelabs.utils.util.Localization; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java b/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java index 1115e2a180c2238438230ffb44c602fc799271b9..b614752229e02eef6d629ac30214773ba16f2a20 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java @@ -1,6 +1,6 @@ package de.deadlocker8.budgetmaster.services; -import de.deadlocker8.budgetmaster.settings.AutoBackupTime; +import de.deadlocker8.budgetmaster.backup.AutoBackupTime; import de.deadlocker8.budgetmaster.settings.Settings; import de.deadlocker8.budgetmaster.settings.SettingsService; import org.joda.time.DateTime; @@ -55,7 +55,7 @@ public class BackupService public void contextRefreshedEvent() { final Settings settings = settingsService.getSettings(); - if(settings.getAutoBackupActivated()) + if(settings.isAutoBackupActive()) { startBackupCron(computeCron(settings.getAutoBackupTime(), settings.getAutoBackupDays())); } @@ -64,13 +64,14 @@ public class BackupService public String computeCron(AutoBackupTime time, Integer days) { int hour = time.getCronTime(); + // seconds minutes hours day_of_month month day_of_week return String.format("0 0 %d */%d * *", hour, days); } public Optional<DateTime> getNextRun() { final Settings settings = settingsService.getSettings(); - if(settings.getAutoBackupActivated()) + if(settings.isAutoBackupActive()) { final String cron = computeCron(settings.getAutoBackupTime(), settings.getAutoBackupDays()); CronSequenceGenerator cronTrigger = new CronSequenceGenerator(cron); diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index c5b10116aa8648193f0c9e6a940ae9640e493e6a..fb31ed6dee6dfb9f966066759813cd16a9ed3767 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -4,6 +4,7 @@ import de.deadlocker8.budgetmaster.accounts.Account; import de.deadlocker8.budgetmaster.accounts.AccountRepository; import de.deadlocker8.budgetmaster.accounts.AccountService; import de.deadlocker8.budgetmaster.accounts.AccountType; +import de.deadlocker8.budgetmaster.backup.AutoBackupStrategy; import de.deadlocker8.budgetmaster.categories.Category; import de.deadlocker8.budgetmaster.categories.CategoryRepository; import de.deadlocker8.budgetmaster.categories.CategoryType; @@ -58,6 +59,13 @@ public class HelpersService return Arrays.asList(LanguageType.values()); } + public List<AutoBackupStrategy> getAvailableAutoBackupStrategies() + { + List<AutoBackupStrategy> autoBackupStrategies = new ArrayList<>(Arrays.asList(AutoBackupStrategy.values())); + autoBackupStrategies.remove(AutoBackupStrategy.NONE); + return autoBackupStrategies; + } + public List<String> getCategoryColorList() { ArrayList<String> categoryColors = new ArrayList<>(); diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java index cc8edcb1207de674e68907b98b555052c2527336..6439338033e8941b064f1366df88edcde2d81160 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java @@ -1,5 +1,7 @@ package de.deadlocker8.budgetmaster.settings; +import de.deadlocker8.budgetmaster.backup.AutoBackupTime; +import de.deadlocker8.budgetmaster.backup.AutoBackupStrategy; import de.deadlocker8.budgetmaster.utils.LanguageType; import org.joda.time.DateTime; import org.springframework.format.annotation.DateTimeFormat; @@ -24,10 +26,14 @@ public class Settings private Integer searchItemsPerPage; - private Boolean autoBackupActivated; + private AutoBackupStrategy autoBackupStrategy; private Integer autoBackupDays; private AutoBackupTime autoBackupTime; + private Integer autoBackupFilesToKeep; + private String autoBackupGitUserName; + private String autoBackupGitPassword; + private Integer installedVersionCode; private Boolean whatsNewShownForCurrentVersion; private Boolean showFirstUseBanner; @@ -47,10 +53,12 @@ public class Settings defaultSettings.setBackupReminderActivated(true); defaultSettings.setLastBackupReminderDate(DateTime.now()); defaultSettings.setSearchItemsPerPage(10); - defaultSettings.setAutoBackupActivated(false); + defaultSettings.setAutoBackupStrategy(AutoBackupStrategy.NONE); defaultSettings.setAutoBackupDays(1); defaultSettings.setAutoBackupTime(AutoBackupTime.TIME_00); defaultSettings.setAutoBackupFilesToKeep(3); + defaultSettings.setAutoBackupGitUserName(null); + defaultSettings.setAutoBackupGitPassword(null); defaultSettings.setInstalledVersionCode(0); defaultSettings.setWhatsNewShownForCurrentVersion(false); defaultSettings.setShowFirstUseBanner(true); @@ -152,16 +160,6 @@ public class Settings this.searchItemsPerPage = searchItemsPerPage; } - public Boolean getAutoBackupActivated() - { - return autoBackupActivated; - } - - public void setAutoBackupActivated(Boolean autoBackupActivated) - { - this.autoBackupActivated = autoBackupActivated; - } - public Integer getAutoBackupDays() { return autoBackupDays; @@ -182,6 +180,21 @@ public class Settings this.autoBackupTime = autoBackupTime; } + public AutoBackupStrategy getAutoBackupStrategy() + { + return autoBackupStrategy; + } + + public void setAutoBackupStrategy(AutoBackupStrategy autoBackupStrategy) + { + this.autoBackupStrategy = autoBackupStrategy; + } + + public boolean isAutoBackupActive() + { + return this.autoBackupStrategy != AutoBackupStrategy.NONE; + } + public Integer getAutoBackupFilesToKeep() { return autoBackupFilesToKeep; @@ -192,6 +205,26 @@ public class Settings this.autoBackupFilesToKeep = autoBackupFilesToKeep; } + public String getAutoBackupGitUserName() + { + return autoBackupGitUserName; + } + + public void setAutoBackupGitUserName(String gitUserName) + { + this.autoBackupGitUserName = gitUserName; + } + + public String getAutoBackupGitPassword() + { + return autoBackupGitPassword; + } + + public void setAutoBackupGitPassword(String gitPassword) + { + this.autoBackupGitPassword = gitPassword; + } + public Integer getInstalledVersionCode() { return installedVersionCode; @@ -240,10 +273,12 @@ public class Settings ", backupReminderActivated=" + backupReminderActivated + ", lastBackupReminderDate=" + lastBackupReminderDate + ", searchItemsPerPage=" + searchItemsPerPage + - ", autoBackupActivated=" + autoBackupActivated + ", autoBackupDays=" + autoBackupDays + ", autoBackupTime=" + autoBackupTime + + ", backupStrategy=" + autoBackupStrategy + ", autoBackupFilesToKeep=" + autoBackupFilesToKeep + + ", gitUserName='" + autoBackupGitUserName + '\'' + + ", gitPassword='" + autoBackupGitPassword + '\'' + ", installedVersionCode=" + installedVersionCode + ", whatsNewShownForCurrentVersion=" + whatsNewShownForCurrentVersion + ", showFirstUseBanner=" + showFirstUseBanner + diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java index 8080f5179ce3eb70a836f972f077283b1e8af607..33630511d8998cbd0a18da3c3927ea74fa452ea8 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java @@ -4,6 +4,8 @@ import de.deadlocker8.budgetmaster.Build; import de.deadlocker8.budgetmaster.accounts.AccountService; import de.deadlocker8.budgetmaster.authentication.User; import de.deadlocker8.budgetmaster.authentication.UserRepository; +import de.deadlocker8.budgetmaster.backup.AutoBackupTime; +import de.deadlocker8.budgetmaster.backup.AutoBackupStrategy; import de.deadlocker8.budgetmaster.categories.CategoryService; import de.deadlocker8.budgetmaster.categories.CategoryType; import de.deadlocker8.budgetmaster.controller.BaseController; @@ -89,9 +91,11 @@ public class SettingsController extends BaseController public String post(Model model, @ModelAttribute("Settings") Settings settings, BindingResult bindingResult, @RequestParam(value = "password") String password, @RequestParam(value = "passwordConfirmation") String passwordConfirmation, - @RequestParam(value = "languageType") String languageType) + @RequestParam(value = "languageType") String languageType, + @RequestParam(value = "autoBackupStrategyType") String autoBackupStrategyType) { settings.setLanguage(LanguageType.fromName(languageType)); + settings.setAutoBackupStrategy(AutoBackupStrategy.fromName(autoBackupStrategyType)); Optional<FieldError> passwordErrorOptional = validatePassword(password, passwordConfirmation); if(passwordErrorOptional.isPresent()) @@ -107,23 +111,38 @@ public class SettingsController extends BaseController settings.setBackupReminderActivated(false); } - if(settings.getAutoBackupActivated() == null) + if(settings.getAutoBackupStrategy() == null) { - settings.setAutoBackupActivated(false); + settings.setAutoBackupStrategy(AutoBackupStrategy.NONE); } - if(settings.getAutoBackupActivated()) + String cron; + switch(settings.getAutoBackupStrategy()) { - final String cron = scheduleTaskService.computeCron(settings.getAutoBackupTime(), settings.getAutoBackupDays()); - scheduleTaskService.startBackupCron(cron); - } - else - { - final Settings defaultSettings = Settings.getDefault(); - settings.setAutoBackupDays(defaultSettings.getAutoBackupDays()); - settings.setAutoBackupTime(defaultSettings.getAutoBackupTime()); - settings.setAutoBackupFilesToKeep(defaultSettings.getAutoBackupFilesToKeep()); - scheduleTaskService.stopBackupCron(); + case NONE: + final Settings defaultSettings = Settings.getDefault(); + settings.setAutoBackupDays(defaultSettings.getAutoBackupDays()); + settings.setAutoBackupTime(defaultSettings.getAutoBackupTime()); + settings.setAutoBackupFilesToKeep(defaultSettings.getAutoBackupFilesToKeep()); + settings.setAutoBackupGitUserName(defaultSettings.getAutoBackupGitUserName()); + settings.setAutoBackupGitPassword(defaultSettings.getAutoBackupGitPassword()); + scheduleTaskService.stopBackupCron(); + break; + case LOCAL: + scheduleTaskService.stopBackupCron(); + cron = scheduleTaskService.computeCron(settings.getAutoBackupTime(), settings.getAutoBackupDays()); + scheduleTaskService.startBackupCron(cron); + break; + case GIT_LOCAL: + scheduleTaskService.stopBackupCron(); + cron = scheduleTaskService.computeCron(settings.getAutoBackupTime(), settings.getAutoBackupDays()); + scheduleTaskService.startBackupCron(cron); + break; + case GIT_REMOTE: + scheduleTaskService.stopBackupCron(); + cron = scheduleTaskService.computeCron(settings.getAutoBackupTime(), settings.getAutoBackupDays()); + scheduleTaskService.startBackupCron(cron); + break; } if(bindingResult.hasErrors()) diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java index 1bc4e724cd5e2c7f54778104c8f1032b1663afc3..82c70a4ced42079da50ec719ddb5ba78520f1231 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java @@ -61,9 +61,9 @@ public class SettingsService { settings.setSearchItemsPerPage(defaultSettings.getSearchItemsPerPage()); } - if(settings.getAutoBackupActivated() == null) + if(settings.getAutoBackupStrategy() == null) { - settings.setAutoBackupActivated(defaultSettings.getAutoBackupActivated()); + settings.setAutoBackupStrategy(defaultSettings.getAutoBackupStrategy()); } if(settings.getAutoBackupDays() == null) { @@ -77,6 +77,14 @@ public class SettingsService { settings.setAutoBackupFilesToKeep(defaultSettings.getAutoBackupFilesToKeep()); } + if(settings.getAutoBackupGitUserName() == null) + { + settings.setAutoBackupGitUserName(defaultSettings.getAutoBackupGitUserName()); + } + if(settings.getAutoBackupGitPassword() == null) + { + settings.setAutoBackupGitPassword(defaultSettings.getAutoBackupGitPassword()); + } if(settings.getInstalledVersionCode() == null) { settings.setInstalledVersionCode(defaultSettings.getInstalledVersionCode()); diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java index b990f24ae0a2616ed4a8c255f31dc99bbfd6859a..e8588c343b428e41899ad5066447a2f6ad636125 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java @@ -1,5 +1,6 @@ package de.deadlocker8.budgetmaster.settings; +import de.deadlocker8.budgetmaster.backup.AutoBackupStrategy; import de.deadlocker8.budgetmaster.utils.Strings; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; @@ -15,7 +16,19 @@ public class SettingsValidator implements Validator public void validate(Object obj, Errors errors) { + final Settings settings = (Settings) obj; + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupDays", Strings.WARNING_EMPTY_NUMBER); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupFilesToKeep", Strings.WARNING_EMPTY_NUMBER_ZERO_ALLOWED); + + if(settings.getAutoBackupStrategy() == AutoBackupStrategy.LOCAL) + { + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupFilesToKeep", Strings.WARNING_EMPTY_NUMBER_ZERO_ALLOWED); + } + + if(settings.getAutoBackupStrategy() == AutoBackupStrategy.GIT_REMOTE) + { + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupGitUserName", Strings.WARNING_EMPTY_GIT_USER_NAME); + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupGitPassword", Strings.WARNING_EMPTY_GIT_PASSWORD); + } } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java index 0cd2a8311a77cae81c0509fff056d3ed00ea3715..bfbd8ab6af8bf8fde47411bc04a63a72468f688a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java @@ -29,6 +29,8 @@ public class Strings public static final String WARNING_EMPTY_NUMBER = "warning.empty.number"; public static final String WARNING_EMPTY_NUMBER_ZERO_ALLOWED = "warning.empty.number.zero.allowed"; public static final String WARNING_DUPLICATE_TEMPLATE_NAME = "warning.duplicate.template.name"; + public static final String WARNING_EMPTY_GIT_USER_NAME = "warning.empty.git.user.name"; + public static final String WARNING_EMPTY_GIT_PASSWORD = "warning.empty.git.password"; //REPORT public static final String REPORT_FOOTER_LEFT = "report.footer.left"; diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties index 2b78f209d2ae05c8667c1ba356b3c212a05c54ba..2312ce233c1020267e338bde10bc694e91b01a5e 100644 --- a/src/main/resources/languages/base_de.properties +++ b/src/main/resources/languages/base_de.properties @@ -144,6 +144,8 @@ warning.empty.chart.name=Bitte gib einen Namen ein. warning.empty.chart.script=Bitte gib ein Script ein. warning.duplicate.template.name=Es existiert bereits eine Vorlage mit diesem Namen. warning.transaction.date=Das angegebene Datum entspricht nicht dem erlaubten Format. Erwartetes Format: DD.MM.YY, DDMMYY, DD.MM.YYYY, DDMMYYYY. +warning.empty.git.user.name=Bitte gib deinen git-Nutzernamen ein. +warning.empty.git.password=Bitte gib dein git-Passwort ein. # UI @@ -198,6 +200,11 @@ settings.backup.auto.activated=An settings.backup.auto.days=Intervall in Tagen settings.backup.auto.time=Uhrzeit settings.backup.auto.time.short={0} Uhr +settings.backup.auto.strategy=Strategie +settings.backup.auto.strategy.none=Keine +settings.backup.auto.strategy.local=Kopien im Dateisystem +settings.backup.auto.strategy.git.local=Lokales git repository +settings.backup.auto.strategy.git.remote=Entferntes git repository settings.backup.auto.files.to.keep=Anzahl aufzubewahrender Backups (0 für unbegrenzt) settings.backup.auto.next=Nächste Ausführung diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties index 72410c19fa548b3fd2b8bbc45317b0a17a31351b..0563900e0e1a85c2d3a4a0cd291175f75d38b27f 100644 --- a/src/main/resources/languages/base_en.properties +++ b/src/main/resources/languages/base_en.properties @@ -144,6 +144,9 @@ warning.empty.chart.name=Please insert a name. warning.empty.chart.script=Please insert a script. warning.duplicate.template.name=A template with this name is already existing. warning.transaction.date=The specified date does not correspond to the allowed format. Expected format: DD.MM.YY, DDMMYY, DD.MM.YYYY, DDMMYYYY. +warning.empty.git.user.name=Please insert your git user name. +warning.empty.git.password=Please insert yout git password. + # UI menu.home=Home @@ -197,6 +200,11 @@ settings.backup.auto.activated=On settings.backup.auto.days=Interval in days settings.backup.auto.time=Time of day settings.backup.auto.time.short={0} o''clock +settings.backup.auto.strategy=Strategy +settings.backup.auto.strategy.local=File system copies +settings.backup.auto.strategy.none=None +settings.backup.auto.strategy.git.local=Local git repository +settings.backup.auto.strategy.git.remote=Remote git repository settings.backup.auto.files.to.keep=Number of backups to keep (0 for unlimited) settings.backup.auto.next=Next execution diff --git a/src/main/resources/templates/settings/settings.ftl b/src/main/resources/templates/settings/settings.ftl index 39d0b1285a9412c60bd476f68458b316f8b1df01..ec03c7909fb4e91927056f2e09aff87753846a06 100644 --- a/src/main/resources/templates/settings/settings.ftl +++ b/src/main/resources/templates/settings/settings.ftl @@ -110,7 +110,7 @@ <div class="table-cell table-cell-spacer"></div> <div class="table-cell"> <@settingsMacros.switch "backupReminder" "backupReminderActivated" settings.getBackupReminderActivated()/> - <@settingsMacros.switch "backup.auto" "autoBackupActivated" settings.getAutoBackupActivated()/> + <@settingsMacros.switch "backup.auto" "autoBackupActivated" settings.isAutoBackupActive()/> </div> </div> </div> @@ -119,10 +119,10 @@ <div class="row" id="settings-auto-backup"> <div class="input-field col s12 m12 l8 offset-l2"> <i class="material-icons prefix">event</i> - <input id="settings-backup-auto-days" type="text" <@validation.validation "autoBackupDays"/> value="<#if settings.getAutoBackupActivated()??>${settings.getAutoBackupDays()}</#if>"> + <input id="settings-backup-auto-days" type="text" <@validation.validation "autoBackupDays"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupDays()}</#if>"> <label for="settings-backup-auto-days">${locale.getString("settings.backup.auto.days")}</label> </div> - <input type="hidden" id="hidden-settings-backup-auto-days" name="autoBackupDays" value="<#if settings.getAutoBackupActivated()??>${settings.getAutoBackupDays()}</#if>"> + <input type="hidden" id="hidden-settings-backup-auto-days" name="autoBackupDays" value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupDays()}</#if>"> <script> numberValidationMessage = "${locale.getString("warning.empty.number")}"; @@ -143,12 +143,26 @@ <label for="settings-backup-auto-time">${locale.getString("settings.backup.auto.time")}</label> </div> + <div class="input-field col s12 m12 l8 offset-l2"> + <i class="material-icons prefix">source</i> + <select id="settings-backup-auto-strategy" name="autoBackupStrategyType"> + <#list helpers.getAvailableAutoBackupStrategies() as strategy> + <#if settings.getAutoBackupStrategy() == strategy> + <option selected value="${strategy.getName()}">${strategy.getName()}</option> + <#else> + <option value="${strategy.getName()}">${strategy.getName()}</option> + </#if> + </#list> + </select> + <label for="settings-language">${locale.getString("settings.backup.auto.strategy")}</label> + </div> + <div class="input-field col s12 m12 l8 offset-l2"> <i class="material-icons prefix">auto_delete</i> - <input id="settings-backup-auto-files-to-keep" type="text" <@validation.validation "autoBackupFilesToKeep"/> value="<#if settings.getAutoBackupActivated()??>${settings.getAutoBackupFilesToKeep()}</#if>"> + <input id="settings-backup-auto-files-to-keep" type="text" <@validation.validation "autoBackupFilesToKeep"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupFilesToKeep()}</#if>"> <label for="settings-backup-auto-files-to-keep">${locale.getString("settings.backup.auto.files.to.keep")}</label> </div> - <input type="hidden" id="hidden-settings-backup-auto-files-to-keep" name="autoBackupFilesToKeep" value="<#if settings.getAutoBackupActivated()??>${settings.getAutoBackupFilesToKeep()}</#if>"> + <input type="hidden" id="hidden-settings-backup-auto-files-to-keep" name="autoBackupFilesToKeep" value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupFilesToKeep()}</#if>"> <div class="col s12 m12 l8 offset-l2"> ${locale.getString("settings.backup.auto.next")}: <#if nextBackupTime??>${dateService.getDateTimeString(nextBackupTime)}<#else>-</#if>