diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java index 4c4924bb54611c1cab26947a046ab4802067a04f..6c451a1c2720f45a4e867176cb1c75b3f12c111f 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchScoreController.java @@ -38,6 +38,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.util.CodeHelper; +import org.olat.core.util.StringHelper; import org.olat.core.util.Util; import org.olat.course.assessment.AssessmentHelper; import org.olat.ims.qti21.model.xml.AssessmentHtmlBuilder; @@ -215,9 +216,23 @@ public class MatchScoreController extends AssessmentItemRefEditorController impl allOk &= validateDouble(maxScoreEl); if(assessmentModeEl.isOneSelected() && assessmentModeEl.isSelected(1)) { - /*for(HotspotChoiceWrapper wrapper:wrappers) { - allOk &= validateDouble(wrapper.getPointsEl()); - }*/ + for(Map.Entry<DirectedPairValue, MatchScoreWrapper> entry:scoreWrappers.entrySet()) { + MatchScoreWrapper scoreWrapper = entry.getValue(); + TextElement scoreEl = scoreWrapper.getScoreEl(); + String val = scoreEl.getValue(); + scoreEl.clearError(); + if(StringHelper.containsNonWhitespace(val)) { + try { + Double.parseDouble(val); + } catch (NumberFormatException e) { + scoreEl.setErrorKey("error.double", null); + allOk &= false; + } + } else { + scoreEl.setErrorKey("form.legende.mandatory", null); + allOk &= false; + } + } } return allOk & super.validateFormLogic(ureq); diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/match_score.html b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/match_score.html index fe7a018065caec91ca09635be98954b429a2c8c0..56689877bf6d96efe3a93fae9931356fe4db25be 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/match_score.html +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/_content/match_score.html @@ -19,6 +19,9 @@ #if(${scoreWrapper.isCorrect()}) <i class=" o_icon o_icon-lg o_icon_accept"> </i> #end + #if($f.hasError("${sourceChoice.getChoiceIdentifier().toString()}-${targetChoice.getChoiceIdentifier().toString()}")) + <div>$r.render("${sourceChoice.getChoiceIdentifier().toString()}-${targetChoice.getChoiceIdentifier().toString()}_ERROR")</div> + #end </td> #end </tr> diff --git a/src/main/java/org/olat/modules/portfolio/ui/media/CollectCitationMediaController.java b/src/main/java/org/olat/modules/portfolio/ui/media/CollectCitationMediaController.java index d5aae01dc6a1dcbab4aea8f14ce686eeaacf14e3..1b1428670fb9276177906efab689a684affcfc02 100644 --- a/src/main/java/org/olat/modules/portfolio/ui/media/CollectCitationMediaController.java +++ b/src/main/java/org/olat/modules/portfolio/ui/media/CollectCitationMediaController.java @@ -1,4 +1,5 @@ /** + * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> @@ -112,6 +113,10 @@ public class CollectCitationMediaController extends FormBasicController implemen businessPath = media.getBusinessPath(); mediaReference = media; + if(StringHelper.containsNonWhitespace(mediaReference.getMetadataXml())) { + citation = (CitationXml)MetadataXStream.get().fromXML(mediaReference.getMetadataXml()); + } + List<Category> categoryList = portfolioService.getCategories(media); for(Category category:categoryList) { categories.put(category.getName(), category.getName());