From 8ab1e198c76a31b35891fa9cc92f11351dd03dee Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 10 Mar 2017 08:56:32 +0100
Subject: [PATCH] OO-2605: choose profile with select box and button

---
 .../ui/QTI21DeliveryOptionsController.java    | 36 +++++++++++--------
 .../olat/ims/qti21/ui/_content/profile.html   |  1 +
 .../qti21/ui/_i18n/LocalStrings_de.properties |  4 +++
 .../qti21/ui/_i18n/LocalStrings_en.properties |  4 +++
 4 files changed, 31 insertions(+), 14 deletions(-)
 create mode 100644 src/main/java/org/olat/ims/qti21/ui/_content/profile.html

diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21DeliveryOptionsController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21DeliveryOptionsController.java
index e1c76818e08..4f75a89b543 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21DeliveryOptionsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21DeliveryOptionsController.java
@@ -24,12 +24,14 @@ import java.util.List;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
@@ -55,13 +57,14 @@ public class QTI21DeliveryOptionsController extends FormBasicController implemen
 	
 	private static final String[] onKeys = new String[]{ "on" };
 	private static final String[] onValues = new String[]{ "" };
-	private static final String[] settingTypeKeys = new String[]{ TestType.summative.name(), TestType.formative.name() };
+	private static final String[] settingTypeKeys = new String[]{ "choose", TestType.summative.name(), TestType.formative.name() };
 	private static final String[] resultsOptionsKeys = new String[] { 
 			QTI21AssessmentResultsOptions.METADATA, QTI21AssessmentResultsOptions.SECTION_SUMMARY,
 			QTI21AssessmentResultsOptions.QUESTION_SUMMARY, QTI21AssessmentResultsOptions.QUESTIONS,
 			QTI21AssessmentResultsOptions.USER_SOLUTIONS, QTI21AssessmentResultsOptions.CORRECT_SOLUTIONS
 		};
 
+	private FormLink chooseProfileButton;
 	private SingleSelection settingTypeEl;
 	private MultipleSelectionElement showTitlesEl, showMenuEl;
 	private MultipleSelectionElement personalNotesEl;
@@ -96,14 +99,24 @@ public class QTI21DeliveryOptionsController extends FormBasicController implemen
 		setFormTitle("tab.options");
 		setFormContextHelp("Test editor QTI 2.1 in detail#details_testeditor_options");
 		formLayout.setElementCssClass("o_sel_qti_resource_options");
+		setFormInfo("settings.choose.descr");
 		
-		String[] settingTypeValues = new String[]{ translate("qti.form.setting.summative"), translate("qti.form.setting.formative") };
-		settingTypeEl = uifactory.addRadiosHorizontal("settings.type", null, formLayout, settingTypeKeys, settingTypeValues);
-		settingTypeEl.addActionListener(FormEvent.ONCHANGE);
+		//choose profile
+		String profilePage = velocity_root + "/profile.html";
+		FormLayoutContainer profileCont = FormLayoutContainer.createCustomFormLayout("profile", getTranslator(), profilePage);
+		profileCont.setLabel("settings.profile", null);
+		formLayout.add(profileCont);
+		
+		String[] settingTypeValues = new String[]{ 
+				translate("qti.form.setting.choose"), translate("qti.form.setting.summative"), translate("qti.form.setting.formative")
+		};
+		settingTypeEl = uifactory.addDropdownSingleselect("settings.type", "settings.type", null, profileCont, settingTypeKeys, settingTypeValues, null);
+		settingTypeEl.setDomReplacementWrapperRequired(false);
 		settingTypeEl.setAllowNoSelection(true);
-		if(deliveryOptions.getTestType() != null) {
-			settingTypeEl.select(deliveryOptions.getTestType().name(), true);
-		}
+		
+		chooseProfileButton = uifactory.addFormLink("settings.choose.profile", profileCont, Link.BUTTON);
+		
+		uifactory.addSpacerElement("profile.spacer", formLayout, false);
 
 		limitAttemptsEl = uifactory.addCheckboxesHorizontal("limitAttempts", "qti.form.limit.attempts", formLayout, onKeys, onValues);
 		limitAttemptsEl.addActionListener(FormEvent.ONCLICK);
@@ -278,7 +291,7 @@ public class QTI21DeliveryOptionsController extends FormBasicController implemen
 			digitalSignatureMailEl.setVisible(digitalSignatureEl.isAtLeastSelected(1));
 		} else if(showResultsOnFinishEl == source) {
 			assessmentResultsOnFinishEl.setVisible(showResultsOnFinishEl.isAtLeastSelected(1));
-		} else if(settingTypeEl == source) {
+		} else if(chooseProfileButton == source) {
 			if(settingTypeEl.isOneSelected()) {
 				String selectedType = settingTypeEl.getSelectedKey();
 				if(TestType.formative.name().equals(selectedType)) {
@@ -287,6 +300,7 @@ public class QTI21DeliveryOptionsController extends FormBasicController implemen
 					applyDeliveryOptions(QTI21DeliveryOptions.summativeSettings());
 				}
 			}
+			settingTypeEl.select("choose", true);
 		}
 		super.formInnerEvent(ureq, source, event);
 	}
@@ -294,12 +308,6 @@ public class QTI21DeliveryOptionsController extends FormBasicController implemen
 
 	@Override
 	protected void formOK(UserRequest ureq) {
-		if(settingTypeEl.isOneSelected()) {
-			String type = settingTypeEl.getSelectedKey();
-			deliveryOptions.setTestType(TestType.valueOf(type));
-		} else {
-			deliveryOptions.setTestType(null);
-		}
 		if(limitAttemptsEl.isAtLeastSelected(1)) {
 			deliveryOptions.setMaxAttempts(Integer.parseInt(maxAttemptsEl.getValue()));
 		} else {
diff --git a/src/main/java/org/olat/ims/qti21/ui/_content/profile.html b/src/main/java/org/olat/ims/qti21/ui/_content/profile.html
new file mode 100644
index 00000000000..1c0a4812cde
--- /dev/null
+++ b/src/main/java/org/olat/ims/qti21/ui/_content/profile.html
@@ -0,0 +1 @@
+<div class="form-inline">$r.render("settings.type") $r.render("settings.choose.profile")</div>
\ No newline at end of file
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 83d4236b5e4..c58b2b71735 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
@@ -134,6 +134,7 @@ qti.form.questionprogress=$org.olat.course.nodes.iq\:qti.form.questionprogress
 qti.form.questiontitle=$org.olat.course.nodes.iq\:qti.form.questiontitle
 qti.form.results.onfinish=$org.olat.course.nodes.iq\:qti.form.results.onfinish
 qti.form.scoreprogress=$org.olat.course.nodes.iq\:qti.form.scoreprogress
+qti.form.setting.choose=Profile w\u00E4hlen...
 qti.form.setting.formative=Formativ (\u00DCbungtest)
 qti.form.setting.summative=Summativ (scharfe Pr\u00FCfung)
 qti.form.summary=$org.olat.course.nodes.iq\:qti.form.summary
@@ -173,6 +174,9 @@ review.responses=Ihre Antworten \u00FCberpr\u00FCfen
 review.responses.desc=Sie k\u00F6nnen Ihre Antworten von einer Sektion oder von allen Fragen \u00FCberpr\u00FCfen. Unten finden Sie die entsprechende Liste.
 score.max=$org.olat.ims.qti\:score.max
 serialize.error=Unerwarte Fehler w\u00E4hrend Speicherung von Datei
+settings.profile=Standardeinstellungen
+settings.choose.descr=Sie k\u00F6nnen die Standardeinstellung f\u00FCr summative oder formative Tests \u00FCbernehmen und anpassen oder Sie setzen die Optionen selbst.
+settings.choose.profile=Konfiguration \u00FCbernehmen
 solution=L\u00F6sung
 submit=Antwort senden
 suspend.test=$org.olat.modules.iq\:suspendAssess
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
index 48374ee1031..a766dd8f6a0 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
@@ -134,6 +134,7 @@ qti.form.questionprogress=$org.olat.course.nodes.iq\:qti.form.questionprogress
 qti.form.questiontitle=$org.olat.course.nodes.iq\:qti.form.questiontitle
 qti.form.results.onfinish=$org.olat.course.nodes.iq\:qti.form.results.onfinish
 qti.form.scoreprogress=$org.olat.course.nodes.iq\:qti.form.scoreprogress
+qti.form.setting.choose=Choose a profile...
 qti.form.setting.formative=Formative (exercise test)
 qti.form.setting.summative=Summative (real test)
 qti.form.summary=$org.olat.course.nodes.iq\:qti.form.summary
@@ -173,6 +174,9 @@ review.responses=Review your responses
 review.responses.desc=You may review your responses to some (or all) questions. These are listed below.
 score.max=$org.olat.ims.qti\:score.max
 serialize.error=An unexpected happens while saving the file.
+settings.profile=Standard settings
+settings.choose.descr=You can chose a default setting for summative or formative tests and adapt it afterward or you set the options by yourself.
+settings.choose.profile=Apply configuration
 solution=Solution
 submit=Submit response
 suspend.test=$org.olat.modules.iq\:suspendAssess
-- 
GitLab