From 71d4938833444618b95f06720b13e03039a597f3 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 21 Jun 2016 15:17:02 +0200
Subject: [PATCH] OO-1593: fix background image with spaces...

---
 .../FIBAssessmentItemBuilder.java             |  3 ++-
 .../qti21/ui/_i18n/LocalStrings_de.properties |  4 +--
 .../AssessmentObjectComponentRenderer.java    |  7 +++--
 .../AssessmentTestComponentRenderer.java      |  4 +--
 .../editor/_i18n/LocalStrings_de.properties   |  2 ++
 .../interactions/HotspotEditorController.java | 26 ++++++++++---------
 .../interactions/_content/hotspots.html       |  2 +-
 .../interactions/_content/hotspot_item.html   |  2 +-
 8 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java
index b3a785bec1f..595a5b43bd6 100644
--- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java
+++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/FIBAssessmentItemBuilder.java
@@ -109,7 +109,8 @@ public class FIBAssessmentItemBuilder extends AssessmentItemBuilder {
 	}
 	
 	private static AssessmentItem createAssessmentItem(EntryType type) {
-		AssessmentItem assessmentItem = AssessmentItemFactory.createAssessmentItem(QTI21QuestionType.fib, "FIB");
+		String title = (type == EntryType.text) ? "Gap text" : "Numerical input";
+		AssessmentItem assessmentItem = AssessmentItemFactory.createAssessmentItem(QTI21QuestionType.fib, title);
 		
 		//define the response
 		Identifier responseDeclarationId = Identifier.assumedLegal("RESPONSE_1");
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
index caa815ad6d0..55528359aad 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
@@ -6,12 +6,12 @@ assessment.item.status.answered=Antwortet
 assessment.item.status.finished=Beendet
 assessment.item.status.modelSolution=Musterl\u00F6sung
 assessment.item.status.needsAttention=Vorsichtig
-assessment.item.status.notAnswered=Nicht antwortet
+assessment.item.status.notAnswered=Nicht beantwortet
 assessment.item.status.notSeen=Nicht gesehen
 assessment.item.status.review=\u00DCberpr\u00FCfung
 assessment.item.status.reviewInvalidAnswer=\u00DCberpr\u00FCfung (ung\u00FCltige Antwort)
 assessment.item.status.reviewNot=Nicht \u00FCberpr\u00FCfbar
-assessment.item.status.reviewNotAnswered=\u00DCberpr\u00FCfung (nicht antwortet)
+assessment.item.status.reviewNotAnswered=\u00DCberpr\u00FCfung (nicht beantwortet)
 assessment.item.status.reviewNotSeen=\u00DCberpr\u00FCfung (nicht gesehen)
 assessment.section.config=Sektion
 assessment.solution.hide=L\u00F6sung verbergen
diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectComponentRenderer.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectComponentRenderer.java
index 48640f47fb8..135fcebbd90 100644
--- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectComponentRenderer.java
+++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentObjectComponentRenderer.java
@@ -1156,9 +1156,12 @@ public abstract class AssessmentObjectComponentRenderer extends DefaultComponent
             final NavigationMode navigationMode = currentTestPart.getNavigationMode();
           
             boolean nextItemAllowed = navigationMode == NavigationMode.NONLINEAR;
-            boolean advanceTestItemAllowed = navigationMode == NavigationMode.LINEAR && testSessionController.mayAdvanceItemLinear();
+            boolean advanceTestItemAllowed = navigationMode == NavigationMode.LINEAR
+            		&& testSessionController.getTestSessionState().getCurrentItemKey() != null//mayAdvanceItemLinear assert on the current selected item
+            		&& testSessionController.mayAdvanceItemLinear();
             boolean testPartNavigationAllowed = navigationMode == NavigationMode.NONLINEAR;
-            boolean endTestPartAllowed = navigationMode == NavigationMode.LINEAR && testSessionController.mayEndCurrentTestPart();
+            boolean endTestPartAllowed = navigationMode == NavigationMode.LINEAR
+            		&& testSessionController.mayEndCurrentTestPart();
 
             return new RenderingRequest(false, false, testPartNavigationAllowed, advanceTestItemAllowed, nextItemAllowed, endTestPartAllowed);
     	}
diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java
index 3d6de7525b2..1a6b948528b 100644
--- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java
+++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java
@@ -233,8 +233,8 @@ public class AssessmentTestComponentRenderer extends AssessmentObjectComponentRe
 			Component submit = component.getQtiItem().getSubmitButton().getComponent();
 			submit.getHTMLRendererSingleton().render(renderer.getRenderer(), sb, submit, ubu, translator, new RenderResult(), null);
 		}
-		//advanceTestItemAllowed
-		if(options.isAdvanceTestItemAllowed()) {
+		//advanceTestItemAllowed /* && testSessionState.getCurrentItemKey() != null && testSessionController.mayAdvanceItemLinear() */
+		if(options.isAdvanceTestItemAllowed() ) {//TODO need to find if there is a next question
 			String title = translator.translate("assessment.test.nextQuestion");
 			renderControl(sb, component, title, "o_sel_next_question", new NameValuePair("cid", Event.finishItem.name()));
 		}
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
index 97091f7ea83..3e3343c5d8b 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
@@ -69,6 +69,7 @@ form.score.answer.correct=Korrekt
 form.score.answer.points=Punkte
 form.score.answer.summary=Antwort \u00DCberblick
 form.score.assessment.all.correct=Alle korrekten Antworten
+form.score.assessment.mode=Bewertungsmethode
 form.score.assessment.per.answer=Punkte pro Antwort
 form.section.selection_pre=Anzahl Fragen in dieser Sektion
 form.section.selection_pre.hover=Legen Sie fest ob alle oder nur eine bestimmte Anzahl Fragen im Test angezeigt werden sollen.
@@ -99,6 +100,7 @@ new.mc=Multiple Choice
 new.rectangle=Viereck
 new.sc=Single Choice
 new.section=Sektion
+new.spots=Spots hinzuf\u00FCgen
 preview=Vorschau
 time.limit.max=Zeitbeschr\u00E4nkung (Minute)
 title.add=$org.olat.ims.qti.editor\:title.add
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java
index 3ebe72e4123..8c47f20188e 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java
@@ -140,10 +140,21 @@ public class HotspotEditorController extends FormBasicController {
 				formLayout, ureq.getUserSession(), getWindowControl());
 		textEl.addActionListener(FormEvent.ONCLICK);
 		
+		initialBackgroundImage = getCurrentBackground();
+		backgroundEl = uifactory.addFileElement(getWindowControl(), "form.imd.background", "form.imd.background", formLayout);
+		backgroundEl.setEnabled(!restrictedEdit);
+		if(initialBackgroundImage != null) {
+			backgroundEl.setInitialFile(initialBackgroundImage);
+		}
+		backgroundEl.addActionListener(FormEvent.ONCHANGE);
+		backgroundEl.setDeleteEnabled(true);
+		backgroundEl.limitToMimeType(mimeTypes, null, null);
+
 		//responses
 		String page = velocity_root + "/hotspots.html";
 		hotspotsCont = FormLayoutContainer.createCustomFormLayout("answers", getTranslator(), page);
 		hotspotsCont.getFormItemComponent().addListener(this);
+		hotspotsCont.setLabel("new.spots", null);
 		hotspotsCont.setRootForm(mainForm);
 		hotspotsCont.contextPut("mapperUri", backgroundMapperUri);
 		hotspotsCont.contextPut("restrictedEdit", restrictedEdit);
@@ -157,24 +168,15 @@ public class HotspotEditorController extends FormBasicController {
 		newRectButton = uifactory.addFormLink("new.rectangle", "new.rectangle", null, hotspotsCont, Link.BUTTON);
 		newRectButton.setIconLeftCSS("o_icon o_icon-lg o_icon_rectangle");
 		newRectButton.setVisible(!restrictedEdit);
+		
+		updateBackground();
 
 		String[] emptyKeys = new String[0];
 		correctHotspotsEl = uifactory.addCheckboxesHorizontal("form.imd.correct.spots", formLayout, emptyKeys, emptyKeys);
 		correctHotspotsEl.setEnabled(!restrictedEdit);
 		correctHotspotsEl.addActionListener(FormEvent.ONCHANGE);
 		rebuildWrappersAndCorrectSelection();
-		
-		initialBackgroundImage = getCurrentBackground();
-		backgroundEl = uifactory.addFileElement(getWindowControl(), "form.imd.background", "form.imd.background", formLayout);
-		backgroundEl.setEnabled(!restrictedEdit);
-		if(initialBackgroundImage != null) {
-			backgroundEl.setInitialFile(initialBackgroundImage);
-		}
-		backgroundEl.addActionListener(FormEvent.ONCHANGE);
-		backgroundEl.setDeleteEnabled(true);
-		backgroundEl.limitToMimeType(mimeTypes, null, null);
-		updateBackground();
-		
+
 		// Submit Button
 		FormLayoutContainer buttonsContainer = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
 		buttonsContainer.setRootForm(mainForm);
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/hotspots.html b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/hotspots.html
index bdc6e243ada..ddb550d5cca 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/hotspots.html
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/hotspots.html
@@ -1,7 +1,7 @@
 #if($r.visible("new.circle"))
 	<div class="btn-group small">$r.render("new.circle")  $r.render("new.rectangle")</div>
 #end
-<div id="o_qti_hotspots_edit" style="position:relative; #if($width && !${width.isEmpty()}) width:${width}px; #end #if($height && !${height.isEmpty()}) height:${height}px; #end #if($filename && !${filename.isEmpty()}) background-image: url($mapperUri/$filename); #end">
+<div id="o_qti_hotspots_edit" style="position:relative; #if($width && !${width.isEmpty()}) width:${width}px; #end #if($height && !${height.isEmpty()}) height:${height}px; #end #if($filename && !${filename.isEmpty()}) background-image: url('$mapperUri/$filename'); #end">
 #foreach($hotspot in $hotspots)
 	<input type="hidden" id="${hotspot.identifier}_shape" name="${hotspot.identifier}_shape" value="${hotspot.shape}" />
 	<input type="hidden" id="${hotspot.identifier}_coords" name="${hotspot.identifier}_coords" value="${hotspot.coords}" />
diff --git a/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/_content/hotspot_item.html b/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/_content/hotspot_item.html
index bea98b08177..981c8c291cc 100644
--- a/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/_content/hotspot_item.html
+++ b/src/main/java/org/olat/ims/qti21/ui/statistics/interactions/_content/hotspot_item.html
@@ -1,5 +1,5 @@
 <div id="$r.getId('d3mapdiv')">
-	<div id='$r.getId("d3mapholder")' class="d3chart" style="position:relative; width:${width}px; height:${height}px; background-color:purple; #if($filename && !${filename.isEmpty()}) background-image: url($mapperUri/$filename); #end"></div>
+	<div id='$r.getId("d3mapholder")' class="d3chart" style="position:relative; width:${width}px; height:${height}px; background-color:purple; #if($filename && !${filename.isEmpty()}) background-image: url('$mapperUri/$filename'); #end"></div>
 <script type='text/javascript'>
 /* <![CDATA[ */
 ## data: [['1','CIRCLE',[297,75,44],3],['2','CIRCLE',[218,212,25],1],['3','RECT',[51,53,164,123],0]]
-- 
GitLab