From ac4f42a8c6c2733e174b359fedd34eca7d15ccc0 Mon Sep 17 00:00:00 2001
From: hg <none@none>
Date: Thu, 25 Jun 2015 11:10:50 +0200
Subject: [PATCH] OO-1575: fix wrong for attribute in static text, radio and
 check box elements, fix duplicate class

---
 .../gui/components/form/flexible/FormItem.java  |  6 ++++++
 .../form/flexible/impl/FormItemImpl.java        | 17 +++++++++++++----
 .../impl/components/SimpleLabelText.java        | 17 +++++++++--------
 .../elements/MultipleSelectionElementImpl.java  |  5 ++++-
 .../impl/elements/SingleSelectionImpl.java      |  4 ++++
 .../impl/elements/StaticTextElementImpl.java    |  7 ++++++-
 .../ims/qti/editor/_content/tab_assess.html     |  2 +-
 7 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java b/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java
index 090507cfdcd..95165b210d1 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/FormItem.java
@@ -208,6 +208,12 @@ public interface FormItem extends FormBaseComponentIdProvider {
 	 * The id of the item, can be null
 	 */
 	public String getFormItemId();
+	
+	/**
+	 * Return the id for the attribute for of the label or null
+	 * if the component isn't an HTML form control.
+	 */
+	public String getForId();
 
 	/**
 	 * The elements panel to be rendered by the GUI Framework.
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java
index 91525a6b634..7616122982b 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java
@@ -105,19 +105,28 @@ public abstract class FormItemImpl implements FormItem, InlineElement {
 		examplePanel = new Panel(PREFIX + name + FormItem.EXAMPLEC);
 		labelPanel = new Panel(PREFIX + name + FormItem.LABELC);
 	}
-	
+
+	@Override
 	public String getFormItemId() {
 		return id;
 	}
-	
+
+	@Override
+	public String getForId() {
+		return getFormDispatchId();
+	}
+
+	@Override
 	public String getName() {
 		return name;
 	}
 
+	@Override
 	public String getElementCssClass() {
 		return elementCssClass;
 	}
 
+	@Override
 	public void setElementCssClass(String elementCssClass) {
 		this.elementCssClass = elementCssClass;
 	}
@@ -203,7 +212,7 @@ public abstract class FormItemImpl implements FormItem, InlineElement {
 			}
 		}
 		if(labelKey != null) {
-			labelC = new SimpleLabelText(labelKey, labelTrsl, componentIsMandatory);
+			labelC = new SimpleLabelText(this, labelKey, labelTrsl, componentIsMandatory);
 			labelC.setTranslator(translator);
 			labelPanel.setContent(labelC);
 		}
@@ -240,7 +249,7 @@ public abstract class FormItemImpl implements FormItem, InlineElement {
 		labelParams = params;
 		// set label may be called before the translator is available
 		if (getTranslator() != null && labelKey != null) {
-			labelC = new SimpleLabelText(label, getLabelText(), componentIsMandatory);
+			labelC = new SimpleLabelText(this, label, getLabelText(), componentIsMandatory);
 			labelC.setTranslator(getTranslator());
 			labelPanel.setContent(labelC);
 		} else if(label == null) {
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java
index 333220f47ee..56ed88a188b 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/components/SimpleLabelText.java
@@ -28,6 +28,7 @@ package org.olat.core.gui.components.form.flexible.impl.components;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.ComponentRenderer;
 import org.olat.core.gui.components.DefaultComponentRenderer;
+import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.impl.FormBaseComponentImpl;
 import org.olat.core.gui.render.RenderResult;
 import org.olat.core.gui.render.Renderer;
@@ -49,10 +50,12 @@ public class SimpleLabelText extends FormBaseComponentImpl {
 	
 	private final String text;
 	private boolean componentIsMandatory;
+	private final FormItem item;
 
-	public SimpleLabelText(String name, String text, boolean mandatory) {
+	public SimpleLabelText(FormItem item, String name, String text, boolean mandatory) {
 		super(name);
 		this.text = text;
+		this.item = item;
 		this.componentIsMandatory = mandatory;
 		// to minimize DOM tree we provide our own DOM ID (o_c12245)
 		this.setDomReplacementWrapperRequired(false);
@@ -80,23 +83,21 @@ public class SimpleLabelText extends FormBaseComponentImpl {
 				RenderResult renderResult, String[] args) {
 			SimpleLabelText stc = (SimpleLabelText) source;
 			sb.append("<label class='control-label ");
-			String target = null;
 			if (args !=  null && args.length > 0) {
 				for (int i = 0; i < args.length; i++) {
 					String arg = args[i];
 					if (arg.startsWith("col-")) {
 						sb.append(arg);
-					} else {
-						target = arg;
 					}
 				}
 			}
 			sb.append("' id='o_c").append(source.getDispatchID()).append("'");
 			// add the reference to form element for which this label stands. this is important for screen readers
-			if (target !=  null) {
-				sb.append(" for=\"");
-				sb.append(target);
-				sb.append("\"");
+			if (stc.item != null) {
+				String forId = stc.item.getForId();
+				if(forId != null) {
+					sb.append(" for=\"").append(forId).append("\"");
+				}
 			}
 			sb.append(">");
 			if (StringHelper.containsNonWhitespace(stc.text)) {
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java
index b1f9ae7b625..1108e637b3c 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java
@@ -78,7 +78,10 @@ public class MultipleSelectionElementImpl extends FormItemImpl implements Multip
 		this.columns = columns;
 	}
 	
-	
+	@Override
+	public String getForId() {
+		return null;
+	}
 	
 	@Override
 	public void setDomReplacementWrapperRequired(boolean required) {
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java
index 7a615f0222f..7a1c289bc84 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java
@@ -77,6 +77,10 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection
 	public void setDomReplacementWrapperRequired(boolean required) {
 		component.setDomReplacementWrapperRequired(required);
 	}
+	
+	public String getForId() {
+		return null;//every radio box has its own label
+	}
 
 	/**
 	 * @see org.olat.core.gui.components.form.flexible.elements.SingleSelectionContainer#getSelected()
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java
index 21cabccbb1f..f814f397fc3 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/StaticTextElementImpl.java
@@ -65,7 +65,12 @@ public class StaticTextElementImpl extends FormItemImpl implements StaticTextEle
 	@Override
 	public void reset() {
 		// static text can not be resetted
-	};
+	}
+
+	@Override
+	public String getForId() {
+		return null;//text is not a form control
+	}
 	
 	protected Component getFormItemComponent() {
 		return component;
diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html
index dcfc9775efc..03e5cfca068 100644
--- a/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html
+++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_assess.html
@@ -89,7 +89,7 @@
 	<div class="form-group">
 		<label class="control-label col-sm-3">$r.translate("form.assessment.order_type")</label>
 		<div class="col-sm-9">
-			<select id="order_type" name="order_type" class="form-control" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" $readonly class="$css">
+			<select id="order_type" name="order_type" class="form-control $css" onchange="return setFormDirty('ofo_assessform')" onclick="return setFormDirty('ofo_assessform')" $readonly>
 			<option value="Random" #if ($order_type == "Random") selected="selected" #end
 			>$r.translate("form.section.order_type.random")</option>
 			<option value="Sequential" #if ($order_type == "Sequential") selected="selected" #end
-- 
GitLab