diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java index da1b03012252beeb8acd505bd7aefb5ef86d3495..d469dde8e2b1cf86131f39971316a59f9194b425 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/EmptyPageController.java @@ -15,13 +15,6 @@ public class EmptyPageController extends BaseController return "emptyPage"; } - @RequestMapping("/settings") - public String settings(Model model) - { - model.addAttribute("active", "settings"); - return "emptyPage"; - } - @RequestMapping("/charts") public String charts(Model model) { diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java new file mode 100644 index 0000000000000000000000000000000000000000..d57398433e5ebf9595087615701029f63f30cb7e --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/controller/SettingsController.java @@ -0,0 +1,65 @@ +package de.deadlocker8.budgetmaster.controller; + +import de.deadlocker8.budgetmaster.entities.Settings; +import de.deadlocker8.budgetmaster.repositories.SettingsRepository; +import de.deadlocker8.budgetmaster.services.HelpersService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + + +@Controller +public class SettingsController extends BaseController +{ + @Autowired + private SettingsRepository settingsRepository; + + @Autowired + private HelpersService helpers; + + @RequestMapping("/settings") + public String settings(Model model) + { + model.addAttribute("settings", settingsRepository.findOne(0)); + return "settings"; + } + + @RequestMapping(value = "/settings/save", method = RequestMethod.POST) + public String post(Model model, @ModelAttribute("Settings") Settings settings, BindingResult bindingResult) + { +// CategoryValidator userValidator = new CategoryValidator(); +// userValidator.validate(category, bindingResult); +// +// if(bindingResult.hasErrors()) +// { +// model.addAttribute("error", bindingResult); +// +// if(helpers.getCategoryColorList().contains(category.getColor())) +// { +// model.addAttribute("customColor", "#FFFFFF"); +// } +// else +// { +// model.addAttribute("customColor", category.getColor()); +// } +// +// if(category.getColor() == null) +// { +// category.setColor(ConvertTo.toRGBHexWithoutOpacity(Colors.CATEGORIES_LIGHT_GREY).toLowerCase()); +// } +// model.addAttribute("category", category); +// return "categories/newCategory"; +// } +// else +// { +// category.setType(CategoryType.CUSTOM); +// categoryRepository.save(category); +// } + + return "redirect:/settings"; + } +} \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java b/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java index 858c044d5c7870fc23dfc44158f359726ef70638..dc924b1e84d0f49d165e13fcc521ebb363e9f506 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java +++ b/src/main/java/de/deadlocker8/budgetmaster/entities/Settings.java @@ -43,6 +43,11 @@ public class Settings return defaultSettings; } + public int getID() + { + return ID; + } + public String getPassword() { return password; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java index 1a02c208d2722732132b450877e4d3f01c736baf..bdf9c8b3f751ddbcba7b393849f7f642a37845a4 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java @@ -10,6 +10,7 @@ import de.deadlocker8.budgetmaster.repositories.PaymentRepository; import de.deadlocker8.budgetmaster.repositories.SettingsRepository; import de.deadlocker8.budgetmaster.repositories.TagRepository; import de.deadlocker8.budgetmaster.utils.Colors; +import de.deadlocker8.budgetmaster.utils.LanguageType; import de.deadlocker8.budgetmaster.utils.Strings; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; @@ -78,6 +79,11 @@ public class HelpersService } } + public List<LanguageType> getAvailableLanguages() + { + return Arrays.asList(LanguageType.values()); + } + public String getDateString(DateTime date) { return date.toString(DateTimeFormat.forPattern("dd.MM.yy").withLocale(settingsRepository.findOne(0).getLanguage().getLocale())); diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index 50eb64ff4c66cc812c2e74f3d3e92286cb5e22c5..b69bbcb4b68210059242ee48e844a125826d758c 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -313,6 +313,22 @@ menu.accounts=Konten category.new.label.name=Name +settings.password=Passwort +settings.currency=W�hrung +settings.rest=�bertrag +settings.rest.deactivated=Aus +settings.rest.activated=An +settings.darkTheme=Oberfl�che +settings.darkTheme.deactivated=Hell +settings.darkTheme.activated=Dunkel +settings.language=Sprache +settings.updates=Automatische Updates +settings.updates.automatic.deactivated=Aus +settings.updates.automatic.activated=An +settings.updates.search=Suchen +settings.updates.current.version=Installiert: +settings.updates.latest.version=Verf�gbar: + account.new.label.name=Name account.default.name=Standardkonto diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index fe5ccf8fbc7b8bc3ec810c26d3277cfd19a3b7c1..b2b48c0be3bc438685ec2258d812c0dbe50deef4 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -313,6 +313,22 @@ menu.accounts=Accounts category.new.label.name=Name +settings.password=Password +settings.currency=Currency +settings.rest=Rest +settings.rest.deactivated=Off +settings.rest.activated=On +settings.darkTheme=Theme +settings.darkTheme.deactivated=Light +settings.darkTheme.activated=Dark +settings.language=Language +settings.updates=Automatic Updates +settings.updates.automatic.deactivated=Off +settings.updates.automatic.activated=On +settings.updates.search=Search +settings.updates.current.version=Installed: +settings.updates.latest.version=Available: + account.new.label.name=Name account.default.name=Default Account diff --git a/src/main/resources/templates/settings.ftl b/src/main/resources/templates/settings.ftl new file mode 100644 index 0000000000000000000000000000000000000000..da30e8618635a22e438ccc34d03af964559cdde5 --- /dev/null +++ b/src/main/resources/templates/settings.ftl @@ -0,0 +1,140 @@ +<html> + <head> + <#import "header.ftl" as header> + <@header.header "BudgetMaster"/> + <#assign locale = static["tools.Localization"]> + </head> + <body class="budgetmaster-blue-light"> + <#import "navbar.ftl" as navbar> + <@navbar.navbar "settings"/> + + <main> + <div class="card main-card"> + <div class="container"> + <div class="section center-align"> + <div class="grey-text text-darken-4 headline">${locale.getString("menu.settings")}</div> + </div> + </div> + <div class="container"> + <#import "validation.ftl" as validation> + <form name="Setttings" action="/settings/save" method="post"> + <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> + <input type="hidden" name="ID" value="${settings.getID()}"> + + <#-- password --> + <div class="row"> + <div class="input-field col s12 m12 l8 offset-l2"> + <input id="settings-password" type="text" name="password" <@validation.validation "password"/> value="•••••"> + <label for="settings-password">${locale.getString("settings.password")}</label> + </div> + </div> + + <#-- currency --> + <div class="row"> + <div class="input-field col s12 m12 l8 offset-l2"> + <input id="settings-currency" type="text" name="currency" <@validation.validation "currency"/> value="<#if settings.getCurrency()??>${settings.getCurrency()}</#if>"> + <label for="settings-currency">${locale.getString("settings.currency")}</label> + </div> + </div> + + <#-- rest and dark theme switch --> + <div class="row"> + <div class="col s6 l4 offset-l2 center-align"> + ${locale.getString("settings.rest")} + <div class="switch"> + <label> + ${locale.getString("settings.rest.deactivated")} + <input type="checkbox" name="isPayment" <#if settings.isRestActivated()>checked</#if>> + <span class="lever"></span> + ${locale.getString("settings.rest.activated")} + </label> + </div> + </div> + <div class="col s6 l4 center-align"> + ${locale.getString("settings.darkTheme")} + <div class="switch"> + <label> + ${locale.getString("settings.darkTheme.deactivated")} + <input type="checkbox" name="isPayment" <#if settings.isUseDarkTheme()>checked</#if>> + <span class="lever"></span> + ${locale.getString("settings.darkTheme.activated")} + </label> + </div> + </div> + </div> + + <#-- language --> + <div class="row"> + <div class="input-field col s12 m12 l8 offset-l2"> + <select id="settings-language" name="language" <@validation.validation "language"/>> + <#list helpers.getAvailableLanguages() as language> + <#if settings.getLanguage() == language> + <option selected value="${language.getName()}">${language.getName()}</option> + <#else> + <option value="${language.getName()}">${language.getName()}</option> + </#if> + </#list> + </select> + <label for="settings-language">${locale.getString("settings.language")}</label> + </div> + </div> + + <#-- updates --> + <div class="row"> + <div class="col s12 m12 l8 offset-l2"> + ${locale.getString("settings.updates")} + </div> + </div> + + <div class="row"> + <div class="col s12 m12 l8 offset-l2"> + <table> + <tr> + <td rowspan="2"> + <div class="switch"> + <label> + ${locale.getString("settings.updates.automatic.deactivated")} + <input type="checkbox" name="isPayment" <#if settings.isUseDarkTheme()>checked</#if>> + <span class="lever"></span> + ${locale.getString("settings.updates.automatic.activated")} + </label> + </div> + </td> + <td>${locale.getString("settings.updates.current.version")}</td> + <td>v2.0.0</td> + </tr> + <tr> + <td>${locale.getString("settings.updates.latest.version")}</td> + <td>v2.0.0</td> + </tr> + <tr> + <td colspan="2"> + <a href="/updateSearch" class="waves-effect waves-light btn budgetmaster-blue-light"><i class="material-icons left">refresh</i>${locale.getString("settings.updates.search")}</a> + </td> + </tr> + </table> + </div> + </div> + + <br> + + <#-- buttons --> + <div class="row"> + <div class="col s12 m12 l4 offset-l4 center-align"> + <button class="btn waves-effect waves-light budgetmaster-blue" type="submit" name="action"> + <i class="material-icons left">save</i>${locale.getString("save")} + </button> + </div> + </div> + </form> + </div> + </div> + </main> + + <!-- Scripts--> + <#import "scripts.ftl" as scripts> + <@scripts.scripts/> + <script src="/js/spectrum.js"></script> + <script src="/js/categories.js"></script> + </body> +</html> \ No newline at end of file