From 8e37b3725937d5c8ba4fd317edf0e353e84887f2 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 21 Dec 2020 12:51:52 +0100
Subject: [PATCH] #562 - added backup strategy to settings

---
 .../backup/AutoBackupStrategy.java            | 41 +++++++++++++
 .../{settings => backup}/AutoBackupTime.java  |  2 +-
 .../budgetmaster/services/BackupService.java  |  7 ++-
 .../budgetmaster/services/HelpersService.java |  8 +++
 .../budgetmaster/settings/Settings.java       | 61 +++++++++++++++----
 .../settings/SettingsController.java          | 47 +++++++++-----
 .../settings/SettingsService.java             | 12 +++-
 .../settings/SettingsValidator.java           | 15 ++++-
 .../budgetmaster/utils/Strings.java           |  2 +
 .../resources/languages/base_de.properties    |  7 +++
 .../resources/languages/base_en.properties    |  8 +++
 .../resources/templates/settings/settings.ftl | 24 ++++++--
 12 files changed, 195 insertions(+), 39 deletions(-)
 create mode 100644 src/main/java/de/deadlocker8/budgetmaster/backup/AutoBackupStrategy.java
 rename src/main/java/de/deadlocker8/budgetmaster/{settings => backup}/AutoBackupTime.java (95%)

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 000000000..71cf3aa5e
--- /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 6075f4e1a..0a4a48482 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 1115e2a18..b61475222 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 c5b10116a..fb31ed6de 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 cc8edcb12..643933803 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 8080f5179..33630511d 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 1bc4e724c..82c70a4ce 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 b990f24ae..e8588c343 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 0cd2a8311..bfbd8ab6a 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 2b78f209d..2312ce233 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 72410c19f..0563900e0 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 39d0b1285..ec03c7909 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>
-- 
GitLab