From eb6a162fccd2c0c036d906468d0dbe30b7d8d9b1 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 27 Jul 2015 11:30:27 +0200
Subject: [PATCH] OO-1625: add unique ids for every components

---
 .../course/reminder/ui/AttemptsRuleEditor.java     | 10 +++++++---
 .../reminder/ui/InitialAttemptsRuleEditor.java     | 10 +++++++---
 .../olat/course/reminder/ui/PassedRuleEditor.java  |  5 +++--
 .../olat/course/reminder/ui/ScoreRuleEditor.java   |  7 ++++---
 .../olat/course/reminder/ui/_content/attempts.html | 14 +++++++-------
 .../reminder/ui/_content/initial_attempts.html     | 14 +++++++-------
 .../olat/course/reminder/ui/_content/passed.html   | 10 +++++-----
 .../olat/course/reminder/ui/_content/score.html    | 14 +++++++-------
 .../reminder/ui/_i18n/LocalStrings_de.properties   |  1 +
 .../reminder/ui/_i18n/LocalStrings_en.properties   |  1 +
 .../reminder/ui/BusinessGroupRoleEditor.java       |  3 ++-
 .../reminder/ui/CourseLaunchRuleEditor.java        |  5 +++--
 .../olat/modules/reminder/ui/DateRuleEditor.java   |  3 ++-
 .../modules/reminder/ui/UserPropertyEditor.java    |  5 +++--
 .../reminder/ui/_content/course_launch.html        |  6 +++---
 .../reminder/ui/_content/rule_1_element.html       |  6 +++---
 .../modules/reminder/ui/_content/user_prop.html    |  6 +++---
 17 files changed, 68 insertions(+), 52 deletions(-)

diff --git a/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java b/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java
index d21c51e6513..07726fc4185 100644
--- a/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java
+++ b/src/main/java/org/olat/course/reminder/ui/AttemptsRuleEditor.java
@@ -74,6 +74,7 @@ public class AttemptsRuleEditor extends RuleEditorFragment {
 				.createCustomFormLayout("attempts.".concat(id), formLayout.getTranslator(), page);
 		ruleCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(ruleCont);
+		ruleCont.getFormItemComponent().contextPut("id", id);
 		
 		ICourse course = CourseFactory.loadCourse(entry.getOlatResource());
 		
@@ -101,7 +102,7 @@ public class AttemptsRuleEditor extends RuleEditorFragment {
 			nodeValues[i] = attemptableNode.getShortTitle() + " ( " + attemptableNode.getIdent() + " )";
 		}
 		
-		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes", null, ruleCont, nodeKeys, nodeValues, null);
+		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes.".concat(id), null, ruleCont, nodeKeys, nodeValues, null);
 		courseNodeEl.setDomReplacementWrapperRequired(false);
 		boolean nodeSelected = false;
 		if(currentCourseNode != null) {
@@ -119,7 +120,7 @@ public class AttemptsRuleEditor extends RuleEditorFragment {
 			courseNodeEl.setErrorKey("error.course.node.found", null);
 		}
 
-		operatorEl = uifactory.addDropdownSingleselect("operators", null, ruleCont, operatorKeys, operatorKeys, null);
+		operatorEl = uifactory.addDropdownSingleselect("operators.".concat(id), null, ruleCont, operatorKeys, operatorKeys, null);
 		operatorEl.setDomReplacementWrapperRequired(false);
 		boolean opSelected = false;
 		if(currentOperator != null) {
@@ -134,7 +135,7 @@ public class AttemptsRuleEditor extends RuleEditorFragment {
 			operatorEl.select(operatorKeys[2], true);
 		}
 
-		valueEl = uifactory.addTextElement("value", null, 128, currentValue, ruleCont);
+		valueEl = uifactory.addTextElement("value.".concat(id), null, 128, currentValue, ruleCont);
 		valueEl.setDomReplacementWrapperRequired(false);
 		valueEl.setDisplaySize(3);
 		
@@ -180,6 +181,9 @@ public class AttemptsRuleEditor extends RuleEditorFragment {
 		if(!StringHelper.containsNonWhitespace(valueEl.getValue())) {
 			valueEl.setErrorKey("form.mandatory.hover", null);
 			allOk &= false;
+		} else if(!StringHelper.isLong(valueEl.getValue())) {
+			valueEl.setErrorKey("error.int", null);
+			allOk &= false;
 		}
 		
 		return allOk;
diff --git a/src/main/java/org/olat/course/reminder/ui/InitialAttemptsRuleEditor.java b/src/main/java/org/olat/course/reminder/ui/InitialAttemptsRuleEditor.java
index 95d605e53ed..5cd929f46eb 100644
--- a/src/main/java/org/olat/course/reminder/ui/InitialAttemptsRuleEditor.java
+++ b/src/main/java/org/olat/course/reminder/ui/InitialAttemptsRuleEditor.java
@@ -78,6 +78,7 @@ public class InitialAttemptsRuleEditor extends RuleEditorFragment {
 				.createCustomFormLayout("attempts.".concat(id), formLayout.getTranslator(), page);
 		ruleCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(ruleCont);
+		ruleCont.getFormItemComponent().contextPut("id", id);
 		
 		ICourse course = CourseFactory.loadCourse(entry.getOlatResource());
 		
@@ -105,7 +106,7 @@ public class InitialAttemptsRuleEditor extends RuleEditorFragment {
 			nodeValues[i] = attemptableNode.getShortTitle() + " ( " + attemptableNode.getIdent() + " )";
 		}
 		
-		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes", null, ruleCont, nodeKeys, nodeValues, null);
+		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes.".concat(id), null, ruleCont, nodeKeys, nodeValues, null);
 		courseNodeEl.setDomReplacementWrapperRequired(false);
 		boolean nodeSelected = false;
 		if(currentCourseNode != null) {
@@ -123,7 +124,7 @@ public class InitialAttemptsRuleEditor extends RuleEditorFragment {
 			courseNodeEl.setErrorKey("error.course.node.found", null);
 		}
 
-		valueEl = uifactory.addTextElement("attemptvalue", null, 128, currentValue, ruleCont);
+		valueEl = uifactory.addTextElement("attemptvalue.".concat(id), null, 128, currentValue, ruleCont);
 		valueEl.setDomReplacementWrapperRequired(false);
 		valueEl.setDisplaySize(3);
 
@@ -132,7 +133,7 @@ public class InitialAttemptsRuleEditor extends RuleEditorFragment {
 				trans.translate(LaunchUnit.month.name()), trans.translate(LaunchUnit.year.name())
 		};
 
-		unitEl = uifactory.addDropdownSingleselect("attemptunit", null, ruleCont, unitKeys, unitValues, null);
+		unitEl = uifactory.addDropdownSingleselect("attemptunit.".concat(id), null, ruleCont, unitKeys, unitValues, null);
 		unitEl.setDomReplacementWrapperRequired(false);
 		boolean selected = false;
 		if(currentUnit != null) {
@@ -184,6 +185,9 @@ public class InitialAttemptsRuleEditor extends RuleEditorFragment {
 		if(!StringHelper.containsNonWhitespace(valueEl.getValue())) {
 			valueEl.setErrorKey("form.mandatory.hover", null);
 			allOk &= false;
+		} else if(!StringHelper.isLong(valueEl.getValue())) {
+			valueEl.setErrorKey("error.int", null);
+			allOk &= false;
 		}
 		
 		return allOk;
diff --git a/src/main/java/org/olat/course/reminder/ui/PassedRuleEditor.java b/src/main/java/org/olat/course/reminder/ui/PassedRuleEditor.java
index 9a77780fadf..8a06ddfda35 100644
--- a/src/main/java/org/olat/course/reminder/ui/PassedRuleEditor.java
+++ b/src/main/java/org/olat/course/reminder/ui/PassedRuleEditor.java
@@ -72,6 +72,7 @@ public class PassedRuleEditor extends RuleEditorFragment {
 				.createCustomFormLayout("attempts.".concat(id), formLayout.getTranslator(), page);
 		ruleCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(ruleCont);
+		ruleCont.getFormItemComponent().contextPut("id", id);
 		
 		ICourse course = CourseFactory.loadCourse(entry.getOlatResource());
 
@@ -95,7 +96,7 @@ public class PassedRuleEditor extends RuleEditorFragment {
 			nodeValues[i] = attemptableNode.getShortTitle() + " ( " + attemptableNode.getIdent() + " )";
 		}
 		
-		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes", null, ruleCont, nodeKeys, nodeValues, null);
+		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes.".concat(id), null, ruleCont, nodeKeys, nodeValues, null);
 		courseNodeEl.setDomReplacementWrapperRequired(false);
 		boolean nodeSelected = false;
 		if(currentCourseNode != null) {
@@ -118,7 +119,7 @@ public class PassedRuleEditor extends RuleEditorFragment {
 			trans.translate("passed"), trans.translate("failed")
 		};
 
-		statusEl = uifactory.addDropdownSingleselect("status", null, ruleCont, statusKeys, statusValues, null);
+		statusEl = uifactory.addDropdownSingleselect("status.".concat(id), null, ruleCont, statusKeys, statusValues, null);
 		statusEl.setDomReplacementWrapperRequired(false);
 		boolean statusSelected = false;
 		if(currentStatus != null) {
diff --git a/src/main/java/org/olat/course/reminder/ui/ScoreRuleEditor.java b/src/main/java/org/olat/course/reminder/ui/ScoreRuleEditor.java
index 8448b043170..54b1c2b1afd 100644
--- a/src/main/java/org/olat/course/reminder/ui/ScoreRuleEditor.java
+++ b/src/main/java/org/olat/course/reminder/ui/ScoreRuleEditor.java
@@ -72,6 +72,7 @@ public class ScoreRuleEditor extends RuleEditorFragment {
 				.createCustomFormLayout("attempts.".concat(id), formLayout.getTranslator(), page);
 		ruleCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(ruleCont);
+		ruleCont.getFormItemComponent().contextPut("id", id);
 		
 		ICourse course = CourseFactory.loadCourse(entry.getOlatResource());
 		
@@ -99,7 +100,7 @@ public class ScoreRuleEditor extends RuleEditorFragment {
 			nodeValues[i] = attemptableNode.getShortTitle() + " ( " + attemptableNode.getIdent() + " )";
 		}
 		
-		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes", null, ruleCont, nodeKeys, nodeValues, null);
+		courseNodeEl = uifactory.addDropdownSingleselect("coursenodes.".concat(id), null, ruleCont, nodeKeys, nodeValues, null);
 		courseNodeEl.setDomReplacementWrapperRequired(false);
 		boolean nodeSelected = false;
 		if(currentCourseNode != null) {
@@ -117,7 +118,7 @@ public class ScoreRuleEditor extends RuleEditorFragment {
 			courseNodeEl.setErrorKey("error.course.node.found", null);
 		}
 
-		operatorEl = uifactory.addDropdownSingleselect("operators", null, ruleCont, operatorKeys, operatorKeys, null);
+		operatorEl = uifactory.addDropdownSingleselect("operators.".concat(id), null, ruleCont, operatorKeys, operatorKeys, null);
 		operatorEl.setDomReplacementWrapperRequired(false);
 		boolean opSelected = false;
 		if(currentOperator != null) {
@@ -132,7 +133,7 @@ public class ScoreRuleEditor extends RuleEditorFragment {
 			operatorEl.select(operatorKeys[2], true);
 		}
 
-		valueEl = uifactory.addTextElement("value", null, 128, currentValue, ruleCont);
+		valueEl = uifactory.addTextElement("value.".concat(id), null, 128, currentValue, ruleCont);
 		valueEl.setDomReplacementWrapperRequired(false);
 		valueEl.setDisplaySize(3);
 		
diff --git a/src/main/java/org/olat/course/reminder/ui/_content/attempts.html b/src/main/java/org/olat/course/reminder/ui/_content/attempts.html
index c1c963493b9..61fa1016870 100644
--- a/src/main/java/org/olat/course/reminder/ui/_content/attempts.html
+++ b/src/main/java/org/olat/course/reminder/ui/_content/attempts.html
@@ -1,12 +1,12 @@
 <div class='form-inline'>
-	$r.render("coursenodes") $r.render("operators") $r.render("value")
-	#if($f.hasError("value"))
-		<br/>$r.render("value_ERROR")
+	$r.render("coursenodes.${id}") $r.render("operators.${id}") $r.render("value.${id}")
+	#if($f.hasError("value.${id}"))
+		<br/>$r.render("value.${id}_ERROR")
 	#end
-	#if($f.hasError("coursenodes"))
-		<br/>$r.render("coursenodes_ERROR")
+	#if($f.hasError("coursenodes.${id}"))
+		<br/>$r.render("coursenodes.${id}_ERROR")
 	#end
-	#if($f.hasError("operators"))
-		<br/>$r.render("operators_ERROR")
+	#if($f.hasError("operators.${id}"))
+		<br/>$r.render("operators.${id}_ERROR")
 	#end
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/reminder/ui/_content/initial_attempts.html b/src/main/java/org/olat/course/reminder/ui/_content/initial_attempts.html
index c2654af1f16..d3624f6b410 100644
--- a/src/main/java/org/olat/course/reminder/ui/_content/initial_attempts.html
+++ b/src/main/java/org/olat/course/reminder/ui/_content/initial_attempts.html
@@ -1,12 +1,12 @@
 <div class='form-inline'>
-	$r.render("coursenodes") $r.render("attemptvalue") $r.render("attemptunit") <span class="form-control-static">$r.translate("ago")</span>
-	#if($f.hasError("attemptvalue"))
-		<br/>$r.render("attemptvalue_ERROR")
+	$r.render("coursenodes.${id}") $r.render("attemptvalue.${id}") $r.render("attemptunit.${id}") <span class="form-control-static">$r.translate("ago")</span>
+	#if($f.hasError("attemptvalue.${id}"))
+		<br/>$r.render("attemptvalue.${id}_ERROR")
 	#end
-	#if($f.hasError("coursenodes"))
-		<br/>$r.render("coursenodes_ERROR")
+	#if($f.hasError("coursenodes.${id}"))
+		<br/>$r.render("coursenodes.${id}_ERROR")
 	#end
-	#if($f.hasError("attemptunit"))
-		<br/>$r.render("attemptunit_ERROR")
+	#if($f.hasError("attemptunit.${id}"))
+		<br/>$r.render("attemptunit.${id}_ERROR")
 	#end
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/reminder/ui/_content/passed.html b/src/main/java/org/olat/course/reminder/ui/_content/passed.html
index 00770da7995..d24697bfd79 100644
--- a/src/main/java/org/olat/course/reminder/ui/_content/passed.html
+++ b/src/main/java/org/olat/course/reminder/ui/_content/passed.html
@@ -1,9 +1,9 @@
 <div class='form-inline'>
-	$r.render("coursenodes") $r.render("status")
-	#if($f.hasError("status"))
-		<br/>$r.render("status_ERROR")
+	$r.render("coursenodes.${id}") $r.render("status.${id}")
+	#if($f.hasError("status.${id}"))
+		<br/>$r.render("status.${id}_ERROR")
 	#end
-	#if($f.hasError("coursenodes"))
-		<br/>$r.render("coursenodes_ERROR")
+	#if($f.hasError("coursenodes.${id}"))
+		<br/>$r.render("coursenodes.${id}_ERROR")
 	#end
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/reminder/ui/_content/score.html b/src/main/java/org/olat/course/reminder/ui/_content/score.html
index bd97aff2cde..b6297e35c69 100644
--- a/src/main/java/org/olat/course/reminder/ui/_content/score.html
+++ b/src/main/java/org/olat/course/reminder/ui/_content/score.html
@@ -1,12 +1,12 @@
 <div class='form-inline'>
-	$r.render("coursenodes") $r.render("operators") $r.render("value") <span class="form-control-static">$r.translate("points")</span>
-	#if($f.hasError("value"))
-		<br/>$r.render("value_ERROR")
+	$r.render("coursenodes.${id}") $r.render("operators.${id}") $r.render("value.${id}") <span class="form-control-static">$r.translate("points")</span>
+	#if($f.hasError("value.${id}"))
+		<br/>$r.render("value.${id}_ERROR")
 	#end
-	#if($f.hasError("coursenodes"))
-		<br/>$r.render("coursenodes_ERROR")
+	#if($f.hasError("coursenodes.${id}"))
+		<br/>$r.render("coursenodes.${id}_ERROR")
 	#end
-	#if($f.hasError("operators"))
-		<br/>$r.render("operators_ERROR")
+	#if($f.hasError("operators.${id}"))
+		<br/>$r.render("operators.${id}_ERROR")
 	#end
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties
index 45e19ac0636..a071d1f6807 100644
--- a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties
@@ -14,6 +14,7 @@ duplicate=Duplizieren
 edit.reminder=Erinnerung bearbeiten
 email.content=E-Mail
 error.course.node.found=Kurselement existiert nicht mehr
+error.int=Ganzzahliger Wert erwartet
 failed=Fehlgeschlagen
 logs=Protokoll versendeter Erinnerungen
 logs.intro=In der untenstehenden Liste sind alle versendeten Erinnerungen aufgeführt.
diff --git a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_en.properties
index dfa714d8af5..e600b83a185 100644
--- a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_en.properties
@@ -14,6 +14,7 @@ duplicate=Duplicate
 edit.reminder=Edit reminder
 email.content=E-Mail
 error.course.node.found=The course element doesn't exist
+error.int=Value should be an integer
 failed=Failed
 logs=Sent reminder log
 logs.intro=All sent reminders are listed in the log below.
diff --git a/src/main/java/org/olat/modules/reminder/ui/BusinessGroupRoleEditor.java b/src/main/java/org/olat/modules/reminder/ui/BusinessGroupRoleEditor.java
index 7cc4770b3c2..1caf82b82e9 100644
--- a/src/main/java/org/olat/modules/reminder/ui/BusinessGroupRoleEditor.java
+++ b/src/main/java/org/olat/modules/reminder/ui/BusinessGroupRoleEditor.java
@@ -68,6 +68,7 @@ public class BusinessGroupRoleEditor extends RuleEditorFragment {
 				.createCustomFormLayout(".".concat(id), formLayout.getTranslator(), page);
 		ruleCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(ruleCont);
+		ruleCont.getFormItemComponent().contextPut("id", id);
 		
 		String currentKey = null;
 		if(rule instanceof ReminderRuleImpl) {
@@ -89,7 +90,7 @@ public class BusinessGroupRoleEditor extends RuleEditorFragment {
 			values[count++] = businessGroup.getName();
 		}
 		
-		groupEl = uifactory.addDropdownSingleselect("ruleElement", null, ruleCont, keys, values, null);
+		groupEl = uifactory.addDropdownSingleselect("ruleElement.".concat(id), null, ruleCont, keys, values, null);
 		if(selectedKey != null) {
 			groupEl.select(selectedKey, true);
 		}
diff --git a/src/main/java/org/olat/modules/reminder/ui/CourseLaunchRuleEditor.java b/src/main/java/org/olat/modules/reminder/ui/CourseLaunchRuleEditor.java
index c4d916d77bb..e614199ee8e 100644
--- a/src/main/java/org/olat/modules/reminder/ui/CourseLaunchRuleEditor.java
+++ b/src/main/java/org/olat/modules/reminder/ui/CourseLaunchRuleEditor.java
@@ -67,6 +67,7 @@ public class CourseLaunchRuleEditor extends RuleEditorFragment {
 				.createCustomFormLayout("course.launch.".concat(id), formLayout.getTranslator(), page);
 		ruleCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(ruleCont);
+		ruleCont.getFormItemComponent().contextPut("id", id);
 		
 		String currentValue = null;
 		String currentUnit = null;
@@ -76,7 +77,7 @@ public class CourseLaunchRuleEditor extends RuleEditorFragment {
 			currentUnit = r.getRightUnit();
 		}
 
-		valueEl = uifactory.addTextElement("launchvalue", null, 128, currentValue, ruleCont);
+		valueEl = uifactory.addTextElement("launchvalue.".concat(id), null, 128, currentValue, ruleCont);
 		valueEl.setDomReplacementWrapperRequired(false);
 		valueEl.setDisplaySize(3);
 		
@@ -85,7 +86,7 @@ public class CourseLaunchRuleEditor extends RuleEditorFragment {
 				trans.translate(LaunchUnit.month.name()), trans.translate(LaunchUnit.year.name())
 		};
 		
-		unitEl = uifactory.addDropdownSingleselect("launchunit", null, ruleCont, unitKeys, unitValues, null);
+		unitEl = uifactory.addDropdownSingleselect("launchunit.".concat(id), null, ruleCont, unitKeys, unitValues, null);
 		unitEl.setDomReplacementWrapperRequired(false);
 		boolean selected = false;
 		if(currentUnit != null) {
diff --git a/src/main/java/org/olat/modules/reminder/ui/DateRuleEditor.java b/src/main/java/org/olat/modules/reminder/ui/DateRuleEditor.java
index fa2efb1f25d..f5b09bd7de8 100644
--- a/src/main/java/org/olat/modules/reminder/ui/DateRuleEditor.java
+++ b/src/main/java/org/olat/modules/reminder/ui/DateRuleEditor.java
@@ -61,6 +61,7 @@ public class DateRuleEditor extends RuleEditorFragment {
 				.createCustomFormLayout(".".concat(id), formLayout.getTranslator(), page);
 		ruleCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(ruleCont);
+		ruleCont.getFormItemComponent().contextPut("id", id);
 		
 		Date after = null;
 		if(rule instanceof ReminderRuleImpl) {
@@ -72,7 +73,7 @@ public class DateRuleEditor extends RuleEditorFragment {
 			}
 		}
 		
-		afterEl = uifactory.addDateChooser("ruleElement", null, after, ruleCont);
+		afterEl = uifactory.addDateChooser("ruleElement.".concat(id), null, after, ruleCont);
 		afterEl.setDateChooserTimeEnabled(true);
 		return ruleCont;
 	}
diff --git a/src/main/java/org/olat/modules/reminder/ui/UserPropertyEditor.java b/src/main/java/org/olat/modules/reminder/ui/UserPropertyEditor.java
index a12b6dd91b6..44ea01b05bd 100644
--- a/src/main/java/org/olat/modules/reminder/ui/UserPropertyEditor.java
+++ b/src/main/java/org/olat/modules/reminder/ui/UserPropertyEditor.java
@@ -70,6 +70,7 @@ public class UserPropertyEditor extends RuleEditorFragment {
 				.createCustomFormLayout("user.prop.".concat(id), formLayout.getTranslator(), page);
 		userPropCont.setRootForm(formLayout.getRootForm());
 		formLayout.add(userPropCont);
+		userPropCont.getFormItemComponent().contextPut("id", id);
 		
 		Translator trans = Util.createPackageTranslator(UserPropertyHandler.class, ureq.getLocale(), formLayout.getTranslator());
 		
@@ -91,7 +92,7 @@ public class UserPropertyEditor extends RuleEditorFragment {
 			currentPropertyValue = r.getRightOperand();
 		}
 		
-		propEl = uifactory.addDropdownSingleselect("user.prop", null, userPropCont, propKeys, propValues, null);
+		propEl = uifactory.addDropdownSingleselect("user.prop.".concat(id), null, userPropCont, propKeys, propValues, null);
 		propEl.setDomReplacementWrapperRequired(false);
 		if(currentPropertyName != null) {
 			for(String propKey:propKeys) {
@@ -101,7 +102,7 @@ public class UserPropertyEditor extends RuleEditorFragment {
 			}
 		}
 
-		valueEl = uifactory.addTextElement("user.value", null, 128, currentPropertyValue, userPropCont);
+		valueEl = uifactory.addTextElement("user.value.".concat(id), null, 128, currentPropertyValue, userPropCont);
 		valueEl.setDomReplacementWrapperRequired(false);
 
 		return userPropCont;
diff --git a/src/main/java/org/olat/modules/reminder/ui/_content/course_launch.html b/src/main/java/org/olat/modules/reminder/ui/_content/course_launch.html
index 5c7ae141ec0..f55a8ec5302 100644
--- a/src/main/java/org/olat/modules/reminder/ui/_content/course_launch.html
+++ b/src/main/java/org/olat/modules/reminder/ui/_content/course_launch.html
@@ -1,6 +1,6 @@
 <div class='form-inline'>
-	$r.render("launchvalue") $r.render("launchunit") <span class="form-control-static">$r.translate("ago")</span>
-	#if($f.hasError("launchvalue"))
-		<br/>$r.render("launchvalue_ERROR")
+	$r.render("launchvalue.${id}") $r.render("launchunit.${id}") <span class="form-control-static">$r.translate("ago")</span>
+	#if($f.hasError("launchvalue.${id}"))
+		<br/>$r.render("launchvalue.${id}_ERROR")
 	#end
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/reminder/ui/_content/rule_1_element.html b/src/main/java/org/olat/modules/reminder/ui/_content/rule_1_element.html
index 68823debe1f..3a1a0d18f6a 100644
--- a/src/main/java/org/olat/modules/reminder/ui/_content/rule_1_element.html
+++ b/src/main/java/org/olat/modules/reminder/ui/_content/rule_1_element.html
@@ -1,4 +1,4 @@
-$r.render("ruleElement")
-#if($f.hasError("ruleElement"))
-	<br/>$r.render("ruleElement_ERROR")
+$r.render("ruleElement.${id}")
+#if($f.hasError("ruleElement.${id}"))
+	<br/>$r.render("ruleElement.${id}_ERROR")
 #end
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/reminder/ui/_content/user_prop.html b/src/main/java/org/olat/modules/reminder/ui/_content/user_prop.html
index 9dc8c35d433..f66b08ae1f2 100644
--- a/src/main/java/org/olat/modules/reminder/ui/_content/user_prop.html
+++ b/src/main/java/org/olat/modules/reminder/ui/_content/user_prop.html
@@ -1,6 +1,6 @@
 <div class='form-inline'>
-	$r.render("user.prop") $r.render("user.value")
-	#if($f.hasError("user.value"))
-		<br/>$r.render("user.value_ERROR")
+	$r.render("user.prop.${id}") $r.render("user.value.${id}")
+	#if($f.hasError("user.value.${id}"))
+		<br/>$r.render("user.value.${id}_ERROR")
 	#end
 </div>
\ No newline at end of file
-- 
GitLab