From 04e638e42cc105b086b8467a835c6fc55e55ccdf Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 27 Mar 2014 14:18:31 +0100
Subject: [PATCH] OO-936: fix some issues and add context help

---
 .../editor/_i18n/LocalStrings_de.properties   |  2 +-
 .../course/nodes/CheckListCourseNode.java     |  6 ++--
 .../olat/course/nodes/cl/CheckboxManager.java | 11 ++++--
 .../nodes/cl/manager/CheckboxManagerImpl.java |  5 +--
 .../nodes/cl/ui/CheckListEditController.java  |  2 +-
 .../nodes/cl/ui/CheckListRunController.java   | 12 ++++---
 .../cl/ui/_chelp/cl-checkbox-template.html    |  4 ++-
 .../nodes/cl/ui/_chelp/cl-metadatas.html      |  1 +
 .../nodes/cl/ui/_chelp/cl-st-config.html      |  3 +-
 .../ui/_chelp/cl-template-configuration.html  |  3 +-
 .../olat/course/nodes/cl/ui/_content/run.html |  2 +-
 .../cl/ui/_i18n/LocalStrings_de.properties    | 34 +++++++++++--------
 .../wizard/CheckListStepRunnerCallback.java   |  1 +
 .../cl/ui/wizard/MetadatasStepController.java |  1 +
 .../ui/wizard/_content/metadatas_config.html  | 32 +++++++----------
 .../wizard/_i18n/LocalStrings_de.properties   | 12 +++----
 .../olat/course/run/RunMainController.java    |  1 +
 .../nodes/cl/manager/CheckboxManagerTest.java | 10 +++---
 18 files changed, 78 insertions(+), 64 deletions(-)
 create mode 100644 src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-metadatas.html

diff --git a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_de.properties
index b7fefe3ba96..c70b8f04d95 100644
--- a/src/main/java/org/olat/course/editor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/editor/_i18n/LocalStrings_de.properties
@@ -465,7 +465,7 @@ publish.nowarnings=Keine Probleme gefunden
 publish.step.title.confirm=Zusammenfassung der \u00C4nderungen
 publish.step.title.messages=Hinweise
 publish.step.update.title=Hintergrund Aktualisierung
-publish.update.description=Während der Publikation müssen die folgende Hintergrundprozesse ausgeführt werden um die Datenkonsistenz sicherzustellen. Dieser Prozess kann einige Zeit dauern. Bitte warten Sie bei der Fertigstellung der Publikation bis Sie eine entsprechende Rückmeldung erhalten haben.
+publish.update.description=Während der Publikation müssen die folgenden Hintergrundprozesse ausgeführt werden um die Datenkonsistenz sicherzustellen. Dieser Prozess kann einige Zeit dauern. Bitte warten Sie mit der Fertigstellung der Publikation bis Sie eine entsprechende Rückmeldung erhalten haben.
 publish.update.nothing=Es gibt keine die eine Aktualisierung brauchte.
 publish.title=Publizieren der \u00C4nderungen von Kursbausteinen
 publish.withwarnings=Warnung
diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
index 902f8df7d62..71438170e4f 100644
--- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
@@ -631,7 +631,6 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements
 		
 		Float currentScore = am.getNodeScore(this, assessedIdentity);
 		Boolean currentPassed = am.getNodePassed(this, assessedIdentity);
-
 		
 		Float updatedScore = null;
 		Boolean updatedPassed = null;
@@ -646,7 +645,6 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements
 		
 		Boolean passedBool = (Boolean)config.get(MSCourseNode.CONFIG_KEY_HAS_PASSED_FIELD);
 		if(passedBool != null && passedBool.booleanValue()) {
-
 			Float cutValue = (Float)config.get(MSCourseNode.CONFIG_KEY_PASSED_CUT_VALUE);
 			Boolean sumCheckbox = (Boolean)config.get(CheckListCourseNode.CONFIG_KEY_PASSED_SUM_CHECKBOX);
 			if(sumCheckbox != null && sumCheckbox.booleanValue()) {
@@ -678,14 +676,14 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements
 		Boolean manualCorrection = (Boolean)config.get(CheckListCourseNode.CONFIG_KEY_PASSED_MANUAL_CORRECTION);
 		if(manualCorrection == null || !manualCorrection.booleanValue()) {
 			//update passed
-			if((currentPassed == null && updatedPassed != null)
+			if((currentPassed == null && updatedPassed != null && updatedScore.floatValue() > 0f)
 					|| (currentPassed != null && updatedPassed == null)
 					|| (currentPassed != null && !currentPassed.equals(updatedPassed))) {
 				needUpdate = true;	
 			}
 		}
 		
-		if((currentScore == null && updatedScore != null)
+		if((currentScore == null && updatedScore != null && updatedScore.floatValue() > 0f)
 				|| (currentScore != null && updatedScore == null)
 				|| (currentScore != null && !currentScore.equals(updatedScore))) {
 			needUpdate = true;	
diff --git a/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java b/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java
index dedbff0bfa3..57ccd36b175 100644
--- a/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java
+++ b/src/main/java/org/olat/course/nodes/cl/CheckboxManager.java
@@ -63,11 +63,16 @@ public interface CheckboxManager {
 	
 	public List<DBCheck> loadCheck(Identity identity, OLATResourceable ores, String resSubPath);
 	
-
-	public int countChecked(OLATResourceable ores, String resSubPath);
+	/**
+	 * Return the number of checks (checked or not) on the database.
+	 * @param ores
+	 * @param resSubPath
+	 * @return
+	 */
+	public int countChecks(OLATResourceable ores, String resSubPath);
 	
 	/**
-	 * 
+	 * Return the number of checks checked for an user.
 	 * @param identity (mandatory)
 	 * @param ores (mandatory)
 	 * @param resSubPath (optional)
diff --git a/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java b/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java
index f73b6c3273e..58367267c23 100644
--- a/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java
+++ b/src/main/java/org/olat/course/nodes/cl/manager/CheckboxManagerImpl.java
@@ -366,7 +366,7 @@ public class CheckboxManagerImpl implements CheckboxManager {
 	}
 	
 	@Override
-	public int countChecked(OLATResourceable ores, String resSubPath) {
+	public int countChecks(OLATResourceable ores, String resSubPath) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select count(check) from clcheck check")
 		  .append(" inner join check.checkbox box")
@@ -394,7 +394,8 @@ public class CheckboxManagerImpl implements CheckboxManager {
 		sb.append("select count(check) from clcheck check")
 		  .append(" inner join check.checkbox box")
 		  .append(" inner join check.identity ident")
-		  .append(" where check.identity.key=:identityKey and box.resName=:resName and box.resId=:resId");
+		  .append(" where check.identity.key=:identityKey and box.resName=:resName and box.resId=:resId")
+		  .append("  and check.checked=true");
 		if(StringHelper.containsNonWhitespace(resSubPath)) {
 			sb.append(" and box.resSubPath=:resSubPath");
 		}
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListEditController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListEditController.java
index 5501efe82a2..1ca59e7c664 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListEditController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListEditController.java
@@ -77,7 +77,7 @@ public class CheckListEditController extends ActivateableTabbableDefaultControll
 		
 
 		CheckboxManager checkboxManager = CoreSpringFactory.getImpl(CheckboxManager.class);
-		int numOfChecks = checkboxManager.countChecked(course, courseNode.getIdent());
+		int numOfChecks = checkboxManager.countChecks(course, courseNode.getIdent());
 		
 		checkboxListEditCtrl = new CheckListBoxListEditController(ureq, wControl, course, courseNode, numOfChecks > 0);
 		listenTo(checkboxListEditCtrl);
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
index 88448c30630..700e28145bb 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
@@ -76,7 +76,7 @@ import org.olat.util.logging.activity.LoggingResourceable;
 public class CheckListRunController extends FormBasicController implements ControllerEventListener, Activateable2 {
 	
 	private final Date dueDate;
-	private final boolean withScore;
+	private final boolean withScore, withPassed;
 	private final Boolean closeAfterDueDate;
 	private final CheckboxList checkboxList;
 	
@@ -121,7 +121,9 @@ public class CheckListRunController extends FormBasicController implements Contr
 		}
 		
 		Boolean hasScore = (Boolean)config.get(MSCourseNode.CONFIG_KEY_HAS_SCORE_FIELD);
-		withScore = (hasScore == null || hasScore.booleanValue());	
+		withScore = (hasScore == null || hasScore.booleanValue());
+		Boolean hasPassed = (Boolean)config.get(MSCourseNode.CONFIG_KEY_HAS_PASSED_FIELD);
+		withPassed = (hasPassed == null || hasPassed.booleanValue());
 
 		initForm(ureq);
 	}
@@ -156,7 +158,7 @@ public class CheckListRunController extends FormBasicController implements Contr
 			}
 			layoutCont.contextPut("checkboxList", wrappers);
 			
-			if(withScore) {
+			if(withScore || withPassed) {
 				layoutCont.contextPut("enableScoreInfo", Boolean.TRUE);
 				exposeConfigToVC(layoutCont);
 				exposeUserDataToVC(layoutCont);
@@ -171,7 +173,9 @@ public class CheckListRunController extends FormBasicController implements Contr
 		layoutCont.contextPut(MSCourseNode.CONFIG_KEY_HAS_PASSED_FIELD, config.get(MSCourseNode.CONFIG_KEY_HAS_PASSED_FIELD));
 		layoutCont.contextPut(MSCourseNode.CONFIG_KEY_HAS_COMMENT_FIELD, config.get(MSCourseNode.CONFIG_KEY_HAS_COMMENT_FIELD));
 	    String infoTextUser = (String) config.get(MSCourseNode.CONFIG_KEY_INFOTEXT_USER);
-	    layoutCont.contextPut(MSCourseNode.CONFIG_KEY_INFOTEXT_USER, (infoTextUser == null ? "" : infoTextUser));
+	    if(StringHelper.containsNonWhitespace(infoTextUser)) {
+	    	layoutCont.contextPut(MSCourseNode.CONFIG_KEY_INFOTEXT_USER, infoTextUser);
+	    }
 	    layoutCont.contextPut(MSCourseNode.CONFIG_KEY_PASSED_CUT_VALUE, AssessmentHelper.getRoundedScore((Float)config.get(MSCourseNode.CONFIG_KEY_PASSED_CUT_VALUE)));
 	    layoutCont.contextPut(MSCourseNode.CONFIG_KEY_SCORE_MIN, AssessmentHelper.getRoundedScore((Float)config.get(MSCourseNode.CONFIG_KEY_SCORE_MIN)));
 	    layoutCont.contextPut(MSCourseNode.CONFIG_KEY_SCORE_MAX, AssessmentHelper.getRoundedScore((Float)config.get(MSCourseNode.CONFIG_KEY_SCORE_MAX)));
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html
index 41d86663404..16f381f0249 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html
@@ -1 +1,3 @@
-<p>$r.translate("chelp.checkbox.template.1")</p>
\ No newline at end of file
+<p>$r.translate("chelp.checkbox.template.1")</p>
+<p>$r.translate("chelp.checkbox.template.2")</p>
+<p>$r.translate("chelp.checkbox.template.3") $r.contextHelpRelativeLink("cl-checkbox.html").</p>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-metadatas.html b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-metadatas.html
new file mode 100644
index 00000000000..be2c92a4d38
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-metadatas.html
@@ -0,0 +1 @@
+<p>$r.translate("chelp.metadatas.1")</p>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-st-config.html b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-st-config.html
index 7e63c7eb239..d960380cd9f 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-st-config.html
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-st-config.html
@@ -1 +1,2 @@
-<p>$r.translate("chelp.stconfig.1")</p>
\ No newline at end of file
+<p>$r.translate("chelp.stconfig.1")</p>
+<p>$r.translate("chelp.stconfig.1") $r.contextHelpRelativeLink("org.olat.course.nodes.st","ced-st-score.html").</p>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-template-configuration.html b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-template-configuration.html
index ad639969eb2..57ab67305b5 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-template-configuration.html
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-template-configuration.html
@@ -1 +1,2 @@
-<p>$r.translate("chelp.template.config.1")</p>
\ No newline at end of file
+<p>$r.translate("chelp.template.config.1")</p>
+<p>$r.translate("chelp.template.config.2") $r.contextHelpRelativeLink("cl-config.html") $r.translate("chelp.template.config.3")</p>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_content/run.html b/src/main/java/org/olat/course/nodes/cl/ui/_content/run.html
index 96aa94b3054..c75f891a5f6 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_content/run.html
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_content/run.html
@@ -46,7 +46,7 @@
 
 	#if ($hasCommentField)
 		<h4>$r.translate("comment.title")</h4>
-		#if ($comment)
+		#if($comment)
 			$comment
 		#else
 			<div class="o_course_run_scoreinfo_noinfo">$r.translate("comment.nocomment")</div>
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
index f2a37ab9a4e..b02f4e6d54f 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
@@ -24,11 +24,11 @@ chelp.coach.6=Zus
 chelp.coach.7="<strong>$\:pdf.export.checked</strong>" erstellt ein PDF, das pro Checkbox eine Tabelle mit jenen Teilnehmern enthält, die die entsprechende Checkbox bereits markiert haben.
 chelp.cl-config.title=Checkliste: Konfiguration
 chelp.cl-checkbox.title=Checkliste: Checkboxen bearbeiten
-chelp.cl-checkbox-template.title=Checklisten Vorlage
-chelp.cl-template-configuration.title=Checklistengenerator
+chelp.cl-checkbox-template.title=Checkliste Sammelfunktion: Vorlage erstellen
+chelp.cl-template-configuration.title=Checkliste Sammelfunktion: Konfiguration
 chelp.cl-coach-assessment.title=Checkliste: Bewertung und Verwaltung
-chelp.cl-metadatas.title=Listen Metadaten
-chelp.cl-st-config.title=Strukturdaten
+chelp.cl-metadatas.title=Checkliste Sammelfunktion: Titel und Datum
+chelp.cl-st-config.title=Checkliste Sammelfunktion: Daten Strukturbaustein
 chelp.cl-assessment-checkbox.title=Checkliste: Per Box Bewertung
 chelp.checkbox.1=Erstellen und bearbeiten Sie hier die Checkboxen für die konfigurierte Checkliste. In der Tabelle finden Sie die bereits in dieser Checkliste bestehenden Checkboxen. Klicken Sie mit der Maus auf die Schaltfläche \u201ECheckbox hinzufügen\u201C um eine neue Checkbox zu erstellen. Es öffnet sich ein neue Eingabemaske. 
 chelp.checkbox.2=<strong>$\:checkbox.title</strong>: Geben Sie hier einen aussagekräftigen kurzen Titel für die Checkbox ein.
@@ -37,12 +37,17 @@ chelp.checkbox.4=<strong>$\:label</strong>: Sie k
 chelp.checkbox.5=<strong>$\:points</strong>: Legen Sie fest ob Punkte für markierte Checkboxen vergeben werden und wie viele. 
 chelp.checkbox.6=Die <strong>$\:description</strong> wird in der Checkliste zusammen mit dem Titel, der Anzahl Punkte (falls ausgewählt) sowie der gegebenenfalls hochgeladenen Datei rechts von der Checkbox angezeigt. 
 chelp.checkbox.7=Falls benötigt, können Sie für die Kursteilnehmer noch eine <strong>Datei</strong> zum Download hinzufügen.
-chelp.checkbox.template.1=Hilfe Checklisten Vorlage
-chelp.metadatas.1=Hilfe Metadaten
-chelp.template.config.1=Hilfe Checklistengenerator
-chelp.stconfig.1=Hilfe Strukturdaten
+chelp.checkbox.template.1=Die Checklisten-Sammelfunktion ermöglicht Ihnen, mit Hilfe eines Wizards mehrere Listen derselben Art gleichzeitig zu erstellen. Diese werden zusammen mit einem Struktur-Kursbaustein zu ihrem Kurs hinzugefügt. Den Strukturbaustein und die einzelnen Checklisten können Sie im Anschluss mittels Drag & Drop an die jeweils gewünschte Stelle im Kurs verschieben.
+chelp.checkbox.template.2=Im ersten Schritt des Wizards erstellen Sie die Vorlage für die neu zu erstellenden Checklisten indem Sie Art und Anzahl der Checkboxen festlegen. Alle Listen und Einstellungen können im Anschluss im Kurseditor separat bearbeitet werden.
+chelp.checkbox.template.3=Für Informationen zur Erstellung und Bearbeitung von Checkboxen lesen Sie bitte die Kontexhilfe zu
+chelp.metadatas.1=Im dritten Schritt der Checklisten Sammelfunktion können Sie die Titel der einzelnen Checklisten gemäss Ihren Wünschen anpassen. Falls Sie im vorherigen Schritt das Abgabedatum aktiviert haben, so können Sie dies hier definieren. Möchten Sie bei einer oder mehreren Checklisten doch nicht mit einem Abgabedatum arbeiten, lassen Sie das Datumsfeld leer. Die Einstellung zum Abgabedatum wird dann für diese Checklisten ignoriert.
+chelp.template.config.1=Im zweiten Schritt bestimmen Sie wie viele Checklisten anhand der im ersten Schritt definierten Vorlage erstellt werden sollen. Legen Sie einen Titel fest. Die Checklisten erhalten alle diesen Titel und werden durchnummeriert. Den Titel können Sie im nächsten Schritt anpassen. 
+chelp.template.config.2=Informationen zu den weiteren Einstellungen finden Sie in der Kontexthilfe
+chelp.template.config.3=. Wenn Sie die Checklisten mit einem Abgabedatum versehen, können Sie dieses im dritten Schritt definieren.
+chelp.stconfig.1=Definieren Sie hier Titel und Beschreibung des übergeordneten Struktur-Kursbausteins. Kurztitel und Titel werden wie gewohnt in der Navigation und der Kurselement-Übersicht angezeigt.
+chelp.stconfig.2=Im unteren Teil des Formulars legen Sie fest ob Bewertungsinformationen aus den Checklisten im Strukturbaustein angezeigt werden sollen, und wie die Bewertung vorgenommen wird. Informationen zum Struktur-Kursbaustein und der Bewertung weiterer Kursbausteine finden Sie in der Kontexthilfe
 checklist.update.assessment=Aktualisierung der Bewertungsinformationen aller Benutzer des Kurses
-checklist.update.efficiencystatements=Aktualisierung der leistungsnachweise aller Benutzer
+checklist.update.efficiencystatements=Aktualisierung der Leistungsnachweise aller Benutzer
 add.checkbox=Checkbox hinzuf\u00FCgen
 box.assessment=Per Box Bewertung
 box.check=Check
@@ -76,7 +81,6 @@ config.checkbox.title=$\:pane.tab.checkbox
 config.checkbox.description=W\u00E4hlen Sie "$\:add.checkbox" um eine neue Checkbox zu erzeugen oder "$org.olat.core\:edit" um eine bestehende Checkbox zu ver\u00E4ndern.
 config.warning.inuse=Es gibt schon Benutzer, die eine Checkbox geklickt haben. Eine \u00C4nderung der Punkte kann deren Resultate beinflussen.
 checkbox.title=Titel
-
 comment.title=$org.olat.course.nodes.ms\:comment.title
 comment.nocomment=$org.olat.course.nodes.ms\:comment.nocomment
 score.title=$org.olat.course.nodes.ms\:score.title
@@ -91,15 +95,15 @@ passed.no=$org.olat.course.nodes.ms\:passed.no
 passed.nopassed=$org.olat.course.nodes.ms\:passed.nopassed
 passed.yes=$org.olat.course.nodes.ms\:passed.yes
 info.title=$org.olat.course.nodes.ms\:info.title
-
 form.error.wrongFloat=$org.olat.course.nodes.ms\:form.error.wrongFloat
 help.hover.config=Hilfe zur Konfiguration
 help.hover.checkbox=Hilfe zur Checkboxen bearbeiten
-help.hover.checkboxtemplate=Hilfe zur Checklisten Vorlage
+help.hover.checkboxtemplate=Hilfe zur Checklistenvorlage
 help.hover.choach=Hilfe zur Bewertung einer Checkbox Liste
-help.hover.templateconfiguration=Hilfe zur Checklistengenerator
+help.hover.metadatas=Hilze zur Konfiguration von Titel und Datum
+help.hover.templateconfiguration=Hilfe zur Konfiguration
 help.hover.coach.assessment=Hilfe zur Bewertung und Verwaltung
-help.hover.structurenodeconfig=Hilfe zur Strukturdaten Konfiguration
+help.hover.structurenodeconfig=Hilfe zur Strukturdaten konfigurieren
 help.hover.assessment.checkbox=Hilfe zur Bewertungs per Box
 assessment.checkbox.description=Bewertung pro Checkbox: Bearbeiten Sie hier die Kreuze ihrer betreuten Teilnehmer nach Checkbox.
 table.header.title=$\:checkbox.title
@@ -115,7 +119,7 @@ label.presented=Vorgef\u00FChrt
 label.controlled=Kontrolliert
 label.present=Anwesend
 points=Punkte
-title.prefix=Titelpr\u00E4fix
+title.prefix=Titel
 sum.cutvalue=Anzahl Checkboxen f\u00FCr Bestanden
 num.of.checklist=Anzahl Checklisten
 pdf.export=\u00DCbersicht als PDF
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java b/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java
index 0e3348fbc93..2bb5d07d2ae 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckListStepRunnerCallback.java
@@ -135,6 +135,7 @@ public class CheckListStepRunnerCallback implements StepRunnerCallback {
 		} else {
 			sc.setSumOfScoreNodes(null);
 		}
+		sc.setExpertMode(false);
 
 		if(data.isPassed()) {
 			Float cutValue = data.getCutValue();
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/wizard/MetadatasStepController.java b/src/main/java/org/olat/course/nodes/cl/ui/wizard/MetadatasStepController.java
index 3c6a0019df1..b1e5bf647c5 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/wizard/MetadatasStepController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/wizard/MetadatasStepController.java
@@ -78,6 +78,7 @@ public class MetadatasStepController extends StepFormBasicController {
 	private DueDateWrapper forgeRow(int i, FormLayoutContainer tableCont) {
 		String title = data.getNodePrefix() + " " + (i+1);
 		TextElement titleEl = uifactory.addTextElement("title_" + i, null, 32, title, tableCont);
+		titleEl.setDisplaySize(60);
 		DateChooser dueDateEl = uifactory.addDateChooser("duedate_" + i, "config.due.date", null, tableCont);
 		dueDateEl.setDateChooserTimeEnabled(true);
 		DueDateWrapper wrapper = new DueDateWrapper(titleEl, dueDateEl);
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/wizard/_content/metadatas_config.html b/src/main/java/org/olat/course/nodes/cl/ui/wizard/_content/metadatas_config.html
index 8c4fb6862cc..3ea62ad5542 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/wizard/_content/metadatas_config.html
+++ b/src/main/java/org/olat/course/nodes/cl/ui/wizard/_content/metadatas_config.html
@@ -3,25 +3,19 @@
 	$r.contextHelpWithWrapper("$off_chelp_package","$off_chelp_page","$off_chelp_hover")
 	<div class="b_form_desc">$off_desc</div>
 
-#foreach($duedate in $duedates)
-	<div class="b_clearfix">
-		<div class="b_c33l">
-			<div class="b_form_element_wrapper b_clearfix">
-				$r.render($duedate.titleName)
-			</div>
-		</div>
-		<div class="b_c66r">
-			<div class="b_form_element_wrapper b_clearfix">
-				<div class="b_form_element_label">
-					$r.render("${duedate.dueDateName}_LABEL")
-				</div>
-				<div class="b_form_element b_clearfix">
-					$r.render($duedate.dueDateName)
-				</div>
-			</div>
-		</div>
-	</div>
-#end
+<table>
+	<thead>
+		<tr><th>$r.translate("title.prefix")</th>
+		<th>$r.translate("config.due.date")</th></tr>
+	</thead>
+	<tbody>
+	#foreach($duedate in $duedates)
+		<tr><td>$r.render($duedate.titleName)</td>
+			<td><div class="b_form_element">
+			$r.render($duedate.dueDateName)</div></td></tr>
+	#end
+	</tbody>
+</table>
 
 	</fieldset>
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/wizard/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cl/ui/wizard/_i18n/LocalStrings_de.properties
index b972b082b25..81031c26e38 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/wizard/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/cl/ui/wizard/_i18n/LocalStrings_de.properties
@@ -1,12 +1,12 @@
 #Mon Mar 02 09:54:04 CET 2009
-checkbox.template=Checklisten Vorlage
-checkbox.template.description=Erstellen Sie eine Checklisten Vorlage. Diese Vorlage wird bei der Erzeugung der checklisten verwendet.
-configuration.template=Checklistengenerator
-configuration.template.description=Definieren Sie in diesem Schritt wie viele Checklisten aufgrund der vorlage erzeugt werden soll. Der title wird jeweils mit der aktuellen Laufnummer erg\u00E4nzt.
-metadatas.details=Listen Metadaten
+checkbox.template=Checklistenvorlage
+checkbox.template.description=Erstellen Sie eine Checklistenvorlage. Diese wird bei der Erstellung der Checklisten verwendet.
+configuration.template=Konfiguration
+configuration.template.description=Legen Sie in diesem Schritt fest wie viele Checklisten anhand der Vorlage erzeugt werden sollen. Der Titel wird jeweils mit der aktuellen Laufnummer ergänzt.
+metadatas.details=Titel und Datum
 metadatas.details.description=Passen Sie die generierten Titel und f\u00FCgen Sie das F\u00E4lligkeitsdatum inzu.
 structurenode.configuration=Strukturdaten
-structurenode.configuration.description=Geben Sie Metadaten der Hauptstruktur ein, welche die generierte Checklisten enthaltensoll. Sie können die Daten sp\u00E4ter jederzeit direkt im Baustein \u00E4ndern.
+structurenode.configuration.description=Geben Sie die Informationen zum übergeordneten Strukturbaustein ein, der die neu generierten Checklisten enthalten wird. Sie können die Daten später jederzeit direkt im Baustein ändern.
 nodeConfigForm.menutitle=$org.olat.course.editor\:nodeConfigForm.menutitle
 nodeConfigForm.displaytitle=$org.olat.course.editor\:nodeConfigForm.displaytitle
 nodeConfigForm.learningobjectives=$org.olat.course.editor\:nodeConfigForm.learningobjectives
diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java
index f107b811bc4..3971c8c1a2d 100644
--- a/src/main/java/org/olat/course/run/RunMainController.java
+++ b/src/main/java/org/olat/course/run/RunMainController.java
@@ -611,6 +611,7 @@ public class RunMainController extends MainLayoutBasicController implements Gene
 					} else {
 						identNode = course.getRunStructure().getNode(subcmd);
 					}
+					addLoggingResourceable(LoggingResourceable.wrap(identNode));
 					currentCourseNode = identNode;
 					updateTreeAndContent(ureq, identNode, nodecmd);
 					oe.accept();
diff --git a/src/test/java/org/olat/course/nodes/cl/manager/CheckboxManagerTest.java b/src/test/java/org/olat/course/nodes/cl/manager/CheckboxManagerTest.java
index 3a759c4d98a..83ebeeb9824 100644
--- a/src/test/java/org/olat/course/nodes/cl/manager/CheckboxManagerTest.java
+++ b/src/test/java/org/olat/course/nodes/cl/manager/CheckboxManagerTest.java
@@ -269,7 +269,7 @@ public class CheckboxManagerTest extends OlatTestCase {
 		DBCheck check1_2 = checkboxManager.createCheck(checkbox2, id1, null, Boolean.TRUE);
 		DBCheck check2_1 = checkboxManager.createCheck(checkbox1, id2, null, Boolean.TRUE);
 		DBCheck check3_1 = checkboxManager.createCheck(checkbox1, id3, null, Boolean.TRUE);
-		DBCheck check3_2 = checkboxManager.createCheck(checkbox2, id3, null, Boolean.TRUE);
+		DBCheck check3_2 = checkboxManager.createCheck(checkbox2, id3, null, Boolean.FALSE);
 		dbInstance.commitAndCloseSession();
 		
 		//load the check
@@ -294,7 +294,7 @@ public class CheckboxManagerTest extends OlatTestCase {
 	
 	
 	@Test
-	public void countChecked_resource() {
+	public void countChecks_resource() {
 		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("check-16");
 		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("check-17");
 		
@@ -316,7 +316,7 @@ public class CheckboxManagerTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		//count the checks
-		int checked = checkboxManager.countChecked(ores, resSubPath);
+		int checked = checkboxManager.countChecks(ores, resSubPath);
 		Assert.assertEquals(4, checked);
 	}
 	
@@ -340,7 +340,7 @@ public class CheckboxManagerTest extends OlatTestCase {
 		checkboxManager.createCheck(checkbox1, id1, null, Boolean.TRUE);
 		checkboxManager.createCheck(checkbox2, id1, null, Boolean.TRUE);
 		checkboxManager.createCheck(checkbox1, id2, null, Boolean.TRUE);
-		checkboxManager.createCheck(checkbox3, id2, null, Boolean.TRUE);
+		checkboxManager.createCheck(checkbox3, id2, null, Boolean.FALSE);
 		checkboxManager.createCheck(checkbox4, id2, null, Boolean.TRUE);
 		dbInstance.commitAndCloseSession();
 		
@@ -349,7 +349,7 @@ public class CheckboxManagerTest extends OlatTestCase {
 		Assert.assertEquals(2, id1Checked);
 
 		int id2Checked = checkboxManager.countChecked(id2, ores, resSubPath);
-		Assert.assertEquals(3, id2Checked);
+		Assert.assertEquals(2, id2Checked);
 		
 		int id3Checked = checkboxManager.countChecked(id3, ores, resSubPath);
 		Assert.assertEquals(0, id3Checked);
-- 
GitLab