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 b3a785bec1fa3e3c3cf5b55ab48b68b3a583166a..595a5b43bd669565e2fc27966539948698cad716 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 caa815ad6d0501f0bd4bd495db6279c8c41a7f2e..55528359aada40c65a4db2fe3ae3531375ae7c9b 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 48640f47fb8aac1b988150ee03de490477d46468..135fcebbd90742e904ac1aa602115b23a1a112ed 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 3d6de7525b2130a5687e70ef5066c65d44fb3ba9..1a6b948528bc25155c1862ac6c2fa52f4a14dfcd 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 97091f7ea833bf1656156b39faa0be788b727bc1..3e3343c5d8b53160d3a7aeaba8d991ad6760bb80 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 3ebe72e41235f5c910cba652f67a4d880df88c0d..8c47f20188ef5bb1b8821898bcbd1a5c97260b3d 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 bdc6e243ada5e12ecf62991e87650d952d76ac4b..ddb550d5cca738b425f5115bcb4512acd3f1974a 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 bea98b08177e4f2ae9b98fd79ffba22172b921e4..981c8c291ccc6f6031f3489538906d299624e286 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]]