From b7335846cc716058de299caa6f65d2d4fa10fec9 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 2 Dec 2018 11:01:45 +0100
Subject: [PATCH] Fixed #367 - ids must be raw numbers

---
 .../controller/CategoryController.java        |  1 +
 .../budgetmaster/services/HelpersService.java | 15 ++++++++++++
 .../resources/templates/accounts/accounts.ftl |  6 ++---
 .../templates/accounts/newAccount.ftl         |  2 +-
 .../templates/categories/categories.ftl       |  6 ++---
 .../templates/categories/newCategory.ftl      |  2 +-
 src/main/resources/templates/import.ftl       |  4 ++--
 src/main/resources/templates/navbar.ftl       |  4 ++--
 src/main/resources/templates/settings.ftl     |  2 +-
 .../templates/transactions/newTransaction.ftl | 24 +++++++++----------
 .../templates/transactions/transactions.ftl   |  6 ++---
 11 files changed, 44 insertions(+), 28 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java b/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java
index a4bb5e5df..6554c8c8c 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/controller/CategoryController.java
@@ -34,6 +34,7 @@ public class CategoryController extends BaseController
 	@RequestMapping("/categories")
 	public String categories(Model model)
 	{
+		helpers.test();
 		model.addAttribute("categories", categoryRepository.findAllByOrderByNameAsc());
 		return "categories/categories";
 	}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
index dcc66b880..74352c264 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/HelpersService.java
@@ -304,4 +304,19 @@ public class HelpersService
 	{
 		return budgetMasterUpdateService.getAvailableVersionString();
 	}
+
+	public void test()
+	{
+		for(int i = 0; i < 1010; i++)
+		{
+			Transaction transaction = new Transaction();
+			transaction.setAccount(getCurrentAccount());
+			transaction.setDate(DateTime.now());
+			transaction.setAmount(100);
+			transaction.setCategory(categoryRepository.findByType(CategoryType.NONE));
+			transaction.setName("Eimer");
+
+			transactionService.getRepository().save(transaction);
+		}
+	}
 }
\ No newline at end of file
diff --git a/src/main/resources/templates/accounts/accounts.ftl b/src/main/resources/templates/accounts/accounts.ftl
index 79930f1e2..ff63275ec 100644
--- a/src/main/resources/templates/accounts/accounts.ftl
+++ b/src/main/resources/templates/accounts/accounts.ftl
@@ -24,8 +24,8 @@
                                 <tr>
                                     <td>${account.getName()}</td>
                                     <td>
-                                        <a href="/accounts/${account.getID()}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a>
-                                        <a href="/accounts/${account.getID()}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a>
+                                        <a href="/accounts/${account.getID()?c}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a>
+                                        <a href="/accounts/${account.getID()?c}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a>
                                     </td>
                                 </tr>
                             </#if>
@@ -47,7 +47,7 @@
                 </div>
                 <div class="modal-footer background-color">
                     <a href="/accounts" class="modal-action modal-close waves-effect waves-light red btn-flat white-text">${locale.getString("cancel")}</a>
-                    <a href="/accounts/${currentAccount.getID()}/delete" class="modal-action modal-close waves-effect waves-light green btn-flat white-text">${locale.getString("info.button.account.delete")}</a>
+                    <a href="/accounts/${currentAccount.getID()?c}/delete" class="modal-action modal-close waves-effect waves-light green btn-flat white-text">${locale.getString("info.button.account.delete")}</a>
                 </div>
             </div>
         </#if>
diff --git a/src/main/resources/templates/accounts/newAccount.ftl b/src/main/resources/templates/accounts/newAccount.ftl
index ca1bec06e..a48f319f6 100644
--- a/src/main/resources/templates/accounts/newAccount.ftl
+++ b/src/main/resources/templates/accounts/newAccount.ftl
@@ -18,7 +18,7 @@
                     <#import "../validation.ftl" as validation>
                     <form name="NewAccount" action="/accounts/newAccount" method="post">
                         <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
-                        <input type="hidden" name="ID" value="<#if account.getID()??>${account.getID()}</#if>">
+                        <input type="hidden" name="ID" value="<#if account.getID()??>${account.getID()?c}</#if>">
                         <input type="hidden" name="isSelected" value="<#if account.isSelected()??>${account.isSelected()?c}</#if>">
 
                         <#-- name -->
diff --git a/src/main/resources/templates/categories/categories.ftl b/src/main/resources/templates/categories/categories.ftl
index aa45a5958..93425193c 100644
--- a/src/main/resources/templates/categories/categories.ftl
+++ b/src/main/resources/templates/categories/categories.ftl
@@ -34,9 +34,9 @@
                             </td>
                             <td>${categoryName}</td>
                             <td>
-                                <a href="/categories/${category.ID}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a>
+                                <a href="/categories/${category.ID?c}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a>
                                 <#if (category.getType().name() == "CUSTOM")>
-                                    <a href="/categories/${category.ID}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a>
+                                    <a href="/categories/${category.ID?c}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a>
                                 </#if>
                             </td>
                         </tr>
@@ -57,7 +57,7 @@
                     </div>
                     <div class="modal-footer background-color">
                         <a href="/categories" class="modal-action modal-close waves-effect waves-light red btn-flat white-text">${locale.getString("cancel")}</a>
-                        <a href="/categories/${currentCategory.ID}/delete" class="modal-action modal-close waves-effect waves-light green btn-flat white-text">${locale.getString("delete")}</a>
+                        <a href="/categories/${currentCategory.ID?c}/delete" class="modal-action modal-close waves-effect waves-light green btn-flat white-text">${locale.getString("delete")}</a>
                     </div>
                 </div>
             </#if>
diff --git a/src/main/resources/templates/categories/newCategory.ftl b/src/main/resources/templates/categories/newCategory.ftl
index fcaea6e2b..d54c406aa 100644
--- a/src/main/resources/templates/categories/newCategory.ftl
+++ b/src/main/resources/templates/categories/newCategory.ftl
@@ -22,7 +22,7 @@
                     <#import "../validation.ftl" as validation>
                     <form name="NewCategory" action="/categories/newCategory" method="post">
                         <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
-                        <input type="hidden" name="ID" value="<#if category.getID()??>${category.getID()}</#if>">
+                        <input type="hidden" name="ID" value="<#if category.getID()??>${category.getID()?c}</#if>">
                         <input type="hidden" name="type" value="<#if category.getType()??>${category.getType()}</#if>">
 
                         <#-- name -->
diff --git a/src/main/resources/templates/import.ftl b/src/main/resources/templates/import.ftl
index b3859b667..2d0e92c2f 100644
--- a/src/main/resources/templates/import.ftl
+++ b/src/main/resources/templates/import.ftl
@@ -24,14 +24,14 @@
                             <#list helpers.getAccountMatches(database.getAccounts()) as accountMatch>
                                 <tr>
                                     <td class="import-text">${locale.getString("info.database.import.source")}</td>
-                                    <td class="account-source-id hidden"><#if accountMatch.getAccountSource().getID()??>${accountMatch.getAccountSource().getID()}<#else>-1</#if> </td>
+                                    <td class="account-source-id hidden"><#if accountMatch.getAccountSource().getID()??>${accountMatch.getAccountSource().getID()?c}<#else>-1</#if> </td>
                                     <td class="account-source">${accountMatch.getAccountSource().getName()}</td>
                                     <td class="import-text">${locale.getString("info.database.import.destination")}</td>
                                     <td>
                                         <select class="account-destination">
                                             <#list availableAccounts as account>
                                                 <#if (account.getType().name() == "CUSTOM")>
-                                                    <option value="${account.getID()}">${account.getName()}</option>
+                                                    <option value="${account.getID()?c}">${account.getName()}</option>
                                                 </#if>
                                             </#list>
                                         </select>
diff --git a/src/main/resources/templates/navbar.ftl b/src/main/resources/templates/navbar.ftl
index a2e423b53..402065e28 100644
--- a/src/main/resources/templates/navbar.ftl
+++ b/src/main/resources/templates/navbar.ftl
@@ -59,9 +59,9 @@
         <select id="selectAccount">
             <#list helpers.getAllAccounts() as account>
                 <#if (account.getType().name() == "ALL")>
-                    <option <#if account.isSelected()>selected</#if> value="${account.getID()}">${locale.getString("account.all")}</option>
+                    <option <#if account.isSelected()>selected</#if> value="${account.getID()?c}">${locale.getString("account.all")}</option>
                 <#else>
-                    <option <#if account.isSelected()>selected</#if> value="${account.getID()}">${account.getName()}</option>
+                    <option <#if account.isSelected()>selected</#if> value="${account.getID()?c}">${account.getName()}</option>
                 </#if>
             </#list>
         </select>
diff --git a/src/main/resources/templates/settings.ftl b/src/main/resources/templates/settings.ftl
index a3c8fb5b2..984f6445d 100644
--- a/src/main/resources/templates/settings.ftl
+++ b/src/main/resources/templates/settings.ftl
@@ -18,7 +18,7 @@
                     <#import "validation.ftl" as validation>
                     <form name="Settings" action="/settings/save" method="post">
                         <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
-                        <input type="hidden" name="ID" value="${settings.getID()}">
+                        <input type="hidden" name="ID" value="${settings.getID()?c}">
 
                         <#-- password -->
                         <div class="row">
diff --git a/src/main/resources/templates/transactions/newTransaction.ftl b/src/main/resources/templates/transactions/newTransaction.ftl
index 6068c77b7..d6c384b21 100644
--- a/src/main/resources/templates/transactions/newTransaction.ftl
+++ b/src/main/resources/templates/transactions/newTransaction.ftl
@@ -23,7 +23,7 @@
                     <#import "../validation.ftl" as validation>
                     <form name="NewTransaction" action="/transactions/newTransaction" method="post" onsubmit="return validateForm()">
                         <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
-                        <input type="hidden" name="ID" value="<#if transaction.getID()??>${transaction.getID()}</#if>">
+                        <input type="hidden" name="ID" value="<#if transaction.getID()??>${transaction.getID()?c}</#if>">
                         <input type="hidden" name="isRepeating" value="${transaction.isRepeating()?c}">
 
                         <#-- isPayment switch -->
@@ -76,18 +76,18 @@
                             <div class="input-field col s12 m12 l8 offset-l2" id="categoryWrapper">
                                 <select id="transaction-category" name="category" <@validation.validation "category"/>>
                                     <#list categories as category>
-                                        <#assign categoryInfos=categoriesFunctions.getCategoryName(category) + "@@@" + category.getColor() + "@@@" + category.getAppropriateTextColor() + "@@@" + category.getID()>
+                                        <#assign categoryInfos=categoriesFunctions.getCategoryName(category) + "@@@" + category.getColor() + "@@@" + category.getAppropriateTextColor() + "@@@" + category.getID()?c>
 
                                         <#if transaction.getCategory()??>
-                                            <#if transaction.getCategory().getID() == category.getID()>
-                                                <option selected value="${category.getID()}">${categoryInfos}</option>
+                                            <#if transaction.getCategory().getID()?c == category.getID()?c>
+                                                <option selected value="${category.getID()?c}">${categoryInfos}</option>
                                             <#elseif category.getType() != "REST">
-                                                <option value="${category.getID()}">${categoryInfos}</option>
+                                                <option value="${category.getID()?c}">${categoryInfos}</option>
                                             </#if>
                                         <#elseif category.getType() == "NONE">
-                                            <option selected value="${category.getID()}">${categoryInfos}</option>
+                                            <option selected value="${category.getID()?c}">${categoryInfos}</option>
                                         <#elseif category.getType() != "REST">
-                                            <option value="${category.getID()}">${categoryInfos}</option>
+                                            <option value="${category.getID()?c}">${categoryInfos}</option>
                                         </#if>
                                     </#list>
                                 </select>
@@ -136,12 +136,12 @@
                                     <#list accounts as account>
                                         <#if (account.getType().name() == "CUSTOM")>
                                             <#if transaction.getAccount()?? && transaction.getAccount() == account>
-                                                <option selected value="${account.getID()}">${account.getName()}</option>
+                                                <option selected value="${account.getID()?c}">${account.getName()}</option>
                                             <#else>
                                                 <#if account == helpers.getCurrentAccount()>
-                                                    <option selected value="${account.getID()}">${account.getName()}</option>
+                                                    <option selected value="${account.getID()?c}">${account.getName()}</option>
                                                 <#else>
-                                                    <option value="${account.getID()}">${account.getName()}</option>
+                                                    <option value="${account.getID()?c}">${account.getName()}</option>
                                                 </#if>
                                             </#if>
                                         </#if>
@@ -319,9 +319,9 @@
         <#-- pass selected account to JS in order to select current value for materialize select -->
         <script>
             <#if transaction.getCategory()??>
-                selectedCategory = "${transaction.getCategory().getID()}";
+                selectedCategory = "${transaction.getCategory().getID()?c}";
             <#else>
-                selectedCategory = "${helpers.getIDOfNoCatgeory()}";
+                selectedCategory = "${helpers.getIDOfNoCatgeory()?c}";
             </#if>
         </script>
 
diff --git a/src/main/resources/templates/transactions/transactions.ftl b/src/main/resources/templates/transactions/transactions.ftl
index 32b2aa533..a1da1c681 100644
--- a/src/main/resources/templates/transactions/transactions.ftl
+++ b/src/main/resources/templates/transactions/transactions.ftl
@@ -69,8 +69,8 @@
                                 </#if>
                                 <td>
                                     <#if (transaction.category.type.name() != "REST")>
-                                        <a href="/transactions/${transaction.ID}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a>
-                                        <a href="/transactions/${transaction.ID}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a>
+                                        <a href="/transactions/${transaction.ID?c}/edit" class="btn-flat no-padding text-color"><i class="material-icons left">edit</i></a>
+                                        <a href="/transactions/${transaction.ID?c}/requestDelete" class="btn-flat no-padding text-color"><i class="material-icons left">delete</i></a>
                                     </#if>
                                 </td>
                             </tr>
@@ -95,7 +95,7 @@
                     </div>
                     <div class="modal-footer background-color">
                         <a href="/transactions" class="modal-action modal-close waves-effect waves-light red btn-flat white-text">${locale.getString("cancel")}</a>
-                        <a href="/transactions/${currentTransaction.ID}/delete" class="modal-action modal-close waves-effectwaves-light green btn-flat white-text">${locale.getString("delete")}</a>
+                        <a href="/transactions/${currentTransaction.ID?c}/delete" class="modal-action modal-close waves-effectwaves-light green btn-flat white-text">${locale.getString("delete")}</a>
                     </div>
                 </div>
             </#if>
-- 
GitLab