Skip to content
Snippets Groups Projects
Commit 7d8f7cba authored by srosse's avatar srosse
Browse files

OO-3146: add a message to explain the side-effect of the option

parent f8c07688
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,8 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; ...@@ -35,6 +35,8 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.generic.modal.DialogBoxController;
import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
import org.olat.course.assessment.AssessmentHelper; import org.olat.course.assessment.AssessmentHelper;
import org.olat.fileresource.FileResourceManager; import org.olat.fileresource.FileResourceManager;
import org.olat.ims.qti.process.AssessmentInstance; import org.olat.ims.qti.process.AssessmentInstance;
...@@ -70,14 +72,17 @@ public class QTI21EditForm extends FormBasicController { ...@@ -70,14 +72,17 @@ public class QTI21EditForm extends FormBasicController {
private MultipleSelectionElement showResultsOnHomePage; private MultipleSelectionElement showResultsOnHomePage;
private MultipleSelectionElement scoreInfo, showResultsDateDependentButton; private MultipleSelectionElement scoreInfo, showResultsDateDependentButton;
private DateChooser startDateElement, endDateElement; private DateChooser startDateElement, endDateElement;
private MultipleSelectionElement testDateDependentButton; private MultipleSelectionElement testDateDependentEl;
private DateChooser startTestDateElement, endTestDateElement; private DateChooser startTestDateElement, endTestDateElement;
private StaticTextElement minScoreEl, maxScoreEl, cutValueEl; private StaticTextElement minScoreEl, maxScoreEl, cutValueEl;
private MultipleSelectionElement showResultsOnFinishEl, assessmentResultsOnFinishEl; private MultipleSelectionElement showResultsOnFinishEl, assessmentResultsOnFinishEl;
private FormLayoutContainer reportLayout;
private final boolean needManualCorrection; private final boolean needManualCorrection;
private final ModuleConfiguration modConfig; private final ModuleConfiguration modConfig;
private final QTI21DeliveryOptions deliveryOptions; private final QTI21DeliveryOptions deliveryOptions;
private DialogBoxController confirmTestDateCtrl;
@Autowired @Autowired
private QTI21Service qtiService; private QTI21Service qtiService;
...@@ -100,7 +105,7 @@ public class QTI21EditForm extends FormBasicController { ...@@ -100,7 +105,7 @@ public class QTI21EditForm extends FormBasicController {
formLayout.add(testLayout); formLayout.add(testLayout);
initFormInfos(testLayout); initFormInfos(testLayout);
FormLayoutContainer reportLayout = FormLayoutContainer.createDefaultFormLayout("report", getTranslator()); reportLayout = FormLayoutContainer.createDefaultFormLayout("report", getTranslator());
reportLayout.setElementCssClass("o_qti_21_configuration"); reportLayout.setElementCssClass("o_qti_21_configuration");
reportLayout.setFormTitle(translate("report.config")); reportLayout.setFormTitle(translate("report.config"));
reportLayout.setRootForm(mainForm); reportLayout.setRootForm(mainForm);
...@@ -119,9 +124,10 @@ public class QTI21EditForm extends FormBasicController { ...@@ -119,9 +124,10 @@ public class QTI21EditForm extends FormBasicController {
protected void initFormReport(FormItemContainer formLayout) { protected void initFormReport(FormItemContainer formLayout) {
boolean testDateDependent = modConfig.getBooleanSafe(IQEditController.CONFIG_KEY_DATE_DEPENDENT_TEST); boolean testDateDependent = modConfig.getBooleanSafe(IQEditController.CONFIG_KEY_DATE_DEPENDENT_TEST);
testDateDependentButton = uifactory.addCheckboxesHorizontal("qti_datetest", "qti.form.test.date", formLayout, new String[]{"xx"}, new String[]{null}); testDateDependentEl = uifactory.addCheckboxesHorizontal("qti_datetest", "qti.form.test.date", formLayout, new String[]{"xx"}, new String[]{null});
testDateDependentButton.select("xx", testDateDependent); testDateDependentEl.select("xx", testDateDependent);
testDateDependentButton.addActionListener(FormEvent.ONCLICK); testDateDependentEl.setHelpTextKey("qti.form.test.date.help", null);
testDateDependentEl.addActionListener(FormEvent.ONCLICK);
Date startTestDate = modConfig.getDateValue(IQEditController.CONFIG_KEY_RESULTS_START_TEST_DATE); Date startTestDate = modConfig.getDateValue(IQEditController.CONFIG_KEY_RESULTS_START_TEST_DATE);
startTestDateElement = uifactory.addDateChooser("qti_form_start_test_date", "qti.form.date.start", startTestDate, formLayout); startTestDateElement = uifactory.addDateChooser("qti_form_start_test_date", "qti.form.date.start", startTestDate, formLayout);
...@@ -229,15 +235,31 @@ public class QTI21EditForm extends FormBasicController { ...@@ -229,15 +235,31 @@ public class QTI21EditForm extends FormBasicController {
// //
} }
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if(confirmTestDateCtrl == source) {
if(DialogBoxUIFactory.isOkEvent(event) || DialogBoxUIFactory.isYesEvent(event)) {
update();
reportLayout.setDirty(true);
} else {
testDateDependentEl.uncheckAll();
}
}
super.event(ureq, source, event);
}
@Override @Override
protected boolean validateFormLogic(UserRequest ureq) { protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = super.validateFormLogic(ureq); boolean allOk = super.validateFormLogic(ureq);
startTestDateElement.clearError(); startTestDateElement.clearError();
if(testDateDependentButton.isSelected(0)) { if(testDateDependentEl.isSelected(0)) {
if(startTestDateElement.getDate() == null) { if(startTestDateElement.getDate() == null) {
startTestDateElement.setErrorKey("form.legende.mandatory", null); startTestDateElement.setErrorKey("form.legende.mandatory", null);
allOk &= false; allOk &= false;
} else if(endTestDateElement.getDate() != null && startTestDateElement.getDate().after(endTestDateElement.getDate())) {
startTestDateElement.setErrorKey("error.begin.after.end", null);
allOk &= false;
} }
} }
...@@ -246,6 +268,9 @@ public class QTI21EditForm extends FormBasicController { ...@@ -246,6 +268,9 @@ public class QTI21EditForm extends FormBasicController {
if(startDateElement.getDate() == null) { if(startDateElement.getDate() == null) {
startDateElement.setErrorKey("form.legende.mandatory", null); startDateElement.setErrorKey("form.legende.mandatory", null);
allOk &= false; allOk &= false;
} else if(endDateElement.getDate() != null && startDateElement.getDate().after(endDateElement.getDate())) {
startDateElement.setErrorKey("error.begin.after.end", null);
allOk &= false;
} }
} }
...@@ -256,9 +281,14 @@ public class QTI21EditForm extends FormBasicController { ...@@ -256,9 +281,14 @@ public class QTI21EditForm extends FormBasicController {
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if(showResultsOnFinishEl == source if(showResultsOnFinishEl == source
|| showResultsOnHomePage == source || showResultsOnHomePage == source
|| showResultsDateDependentButton == source || showResultsDateDependentButton == source) {
|| testDateDependentButton == source) {
update(); update();
} else if(testDateDependentEl == source) {
if(testDateDependentEl.isAtLeastSelected(1)) {
confirmTestDates(ureq);
} else {
update();
}
} }
super.formInnerEvent(ureq, source, event); super.formInnerEvent(ureq, source, event);
} }
...@@ -271,8 +301,8 @@ public class QTI21EditForm extends FormBasicController { ...@@ -271,8 +301,8 @@ public class QTI21EditForm extends FormBasicController {
resetDateChooser(startDateElement, showResultsDateDependentButton); resetDateChooser(startDateElement, showResultsDateDependentButton);
resetDateChooser(endDateElement, showResultsDateDependentButton); resetDateChooser(endDateElement, showResultsDateDependentButton);
resetDateChooser(startTestDateElement, testDateDependentButton); resetDateChooser(startTestDateElement, testDateDependentEl);
resetDateChooser(endTestDateElement, testDateDependentButton); resetDateChooser(endTestDateElement, testDateDependentEl);
} }
private void resetDateChooser(DateChooser dateElement, MultipleSelectionElement parentEl) { private void resetDateChooser(DateChooser dateElement, MultipleSelectionElement parentEl) {
...@@ -334,10 +364,16 @@ public class QTI21EditForm extends FormBasicController { ...@@ -334,10 +364,16 @@ public class QTI21EditForm extends FormBasicController {
update(); update();
} }
private void confirmTestDates(UserRequest ureq) {
String title = translate("qti.form.test.date");
String text = translate("qti.form.test.date.confirm");
confirmTestDateCtrl = activateOkCancelDialog(ureq, title, text, confirmTestDateCtrl);
}
@Override @Override
protected void formOK(UserRequest ureq) { protected void formOK(UserRequest ureq) {
modConfig.setBooleanEntry(IQEditController.CONFIG_KEY_DATE_DEPENDENT_TEST, testDateDependentButton.isSelected(0)); modConfig.setBooleanEntry(IQEditController.CONFIG_KEY_DATE_DEPENDENT_TEST, testDateDependentEl.isSelected(0));
modConfig.setDateValue(IQEditController.CONFIG_KEY_RESULTS_START_TEST_DATE, startTestDateElement.getDate()); modConfig.setDateValue(IQEditController.CONFIG_KEY_RESULTS_START_TEST_DATE, startTestDateElement.getDate());
modConfig.setDateValue(IQEditController.CONFIG_KEY_RESULTS_END_TEST_DATE, endTestDateElement.getDate()); modConfig.setDateValue(IQEditController.CONFIG_KEY_RESULTS_END_TEST_DATE, endTestDateElement.getDate());
......
...@@ -49,6 +49,7 @@ disclaimer=Information ...@@ -49,6 +49,7 @@ disclaimer=Information
disclaimer.file.invalid=Gewisse Informationen k\u00F6nnen nicht angezeigt werden weil die referenzierte Datei {0} nicht mehr vorhanden ist. Bitte benachrichtigen Sie die Kursleitung. disclaimer.file.invalid=Gewisse Informationen k\u00F6nnen nicht angezeigt werden weil die referenzierte Datei {0} nicht mehr vorhanden ist. Bitte benachrichtigen Sie die Kursleitung.
error.assessment.pulled=Das Test wurde von Ihrem Tutor eingezogen. error.assessment.pulled=Das Test wurde von Ihrem Tutor eingezogen.
error.assessment.stopped=Das Test wurde beendet. error.assessment.stopped=Das Test wurde beendet.
error.begin.after.end=Das Beginn-Datum muss vor dem Ende-Datum liegen.
error.entry.locked=Die gew\u00E4hlte Lernressource wird momentan von {0} editiert. Bitte w\u00E4hlen Sie eine andere Lernressource oder versuchen Sie es sp\u00E4ter nochmals. error.entry.locked=Die gew\u00E4hlte Lernressource wird momentan von {0} editiert. Bitte w\u00E4hlen Sie eine andere Lernressource oder versuchen Sie es sp\u00E4ter nochmals.
error.reopean.failed=Wieder\u00F6ffnen des Tests k\u00F6nnte nicht gemacht werden error.reopean.failed=Wieder\u00F6ffnen des Tests k\u00F6nnte nicht gemacht werden
error.self.undefined.long=Es ist kein Selbsttest f\u00FCr "{0}" definiert. W\u00E4hlen Sie einen unter "Selbsttest-Konfiguration" aus. error.self.undefined.long=Es ist kein Selbsttest f\u00FCr "{0}" definiert. W\u00E4hlen Sie einen unter "Selbsttest-Konfiguration" aus.
...@@ -144,6 +145,8 @@ qti.form.summary.detailed=Detailliert (mit L\u00F6sungen) ...@@ -144,6 +145,8 @@ qti.form.summary.detailed=Detailliert (mit L\u00F6sungen)
qti.form.summary.none=Keine Eingabe notwendig. qti.form.summary.none=Keine Eingabe notwendig.
qti.form.summary.section=Sektionszusammenfassung (ohne L\u00F6sungen) qti.form.summary.section=Sektionszusammenfassung (ohne L\u00F6sungen)
qti.form.test.date=Testzeitraum festlegen qti.form.test.date=Testzeitraum festlegen
qti.form.test.date.confirm=W\u00E4hrend dem Testzeitraum kann der Test gestartet werden. Sobald die "bis-Zeit" erreicht ist, wird der Test automatisch beendet. Dies auch dann, wenn die definierte Testzeit noch nicht aufgebraucht ist.
qti.form.test.date.help=$\:qti.form.test.date.confirm
qti.form.test.title=Test qti.form.test.title=Test
reopen=Erneut starten reopen=Erneut starten
reopen.explanation=Dieser Test wurde beendet. Sie k\u00F6nnen den Test erneut starten. Der Testteilnehmende kann den Test dann dort weiterf\u00FChren, wo er aufgeh\u00F6rt hat. Falls der Test auf 1 Versuch beschr\u00E4nkt ist, m\u00FCssen auerdem die Versuche zur\u00FCckgesetzt werden, damit der Testteilnehmende den Test weiterf\u00FChren kann. reopen.explanation=Dieser Test wurde beendet. Sie k\u00F6nnen den Test erneut starten. Der Testteilnehmende kann den Test dann dort weiterf\u00FChren, wo er aufgeh\u00F6rt hat. Falls der Test auf 1 Versuch beschr\u00E4nkt ist, m\u00FCssen auerdem die Versuche zur\u00FCckgesetzt werden, damit der Testteilnehmende den Test weiterf\u00FChren kann.
......
...@@ -47,6 +47,7 @@ disclaimer=Information ...@@ -47,6 +47,7 @@ disclaimer=Information
disclaimer.file.invalid=Some information cannot be displayed because the referenced file {0} is not available anymore. Please contact your course administrator. disclaimer.file.invalid=Some information cannot be displayed because the referenced file {0} is not available anymore. Please contact your course administrator.
error.assessment.pulled=The assessment is finished. error.assessment.pulled=The assessment is finished.
error.assessment.stopped=Your tutor pull your test. error.assessment.stopped=Your tutor pull your test.
error.begin.after.end=The start date must be before the end date.
error.entry.locked=The learning resource selected is currently edited by {0}. Please select another learning resource or try again later. error.entry.locked=The learning resource selected is currently edited by {0}. Please select another learning resource or try again later.
error.reopean.failed=Reopeing the test cannot be done. error.reopean.failed=Reopeing the test cannot be done.
error.resource.corrupted=The learning resource cannot be interpreted. It seems corrupted or with the wrong format. error.resource.corrupted=The learning resource cannot be interpreted. It seems corrupted or with the wrong format.
...@@ -142,6 +143,8 @@ qti.form.summary.section=Section abstract (without solutions) ...@@ -142,6 +143,8 @@ qti.form.summary.section=Section abstract (without solutions)
qti.form.summary.sections=Section summary qti.form.summary.sections=Section summary
qti.form.summary.solutions=Solution qti.form.summary.solutions=Solution
qti.form.test.date=Set assessment period qti.form.test.date=Set assessment period
qti.form.test.date.confirm=During the test period the test can be started. As soon as the "until-time" is reached, the test will be finished automatically. This occurs also if the time limit is not yet reached.
qti.form.test.date.help=$\:qti.form.test.date.confirm
qti.form.test.title=Test qti.form.test.title=Test
reopen=Start again reopen=Start again
reopen.explanation=This test has been finished. You can restart the test. The test participant continues the test where he left it. If the test is limited to 1 attempt, the number of attempts must be reset so the test participants can continue the test. reopen.explanation=This test has been finished. You can restart the test. The test participant continues the test where he left it. If the test is limited to 1 attempt, the number of attempts must be reset so the test participants can continue the test.
......
...@@ -45,6 +45,7 @@ disclaimer=Mentions l\u00E9gales ...@@ -45,6 +45,7 @@ disclaimer=Mentions l\u00E9gales
disclaimer.file.invalid=Certaines informations ne peuvent pas \u00EAtre affich\u00E9es, car le fichier r\u00E9f\u00E9renci\u00E9 {0} n'est plus existant. Veuillez pr\u00E9venir la direction du cours. disclaimer.file.invalid=Certaines informations ne peuvent pas \u00EAtre affich\u00E9es, car le fichier r\u00E9f\u00E9renci\u00E9 {0} n'est plus existant. Veuillez pr\u00E9venir la direction du cours.
error.assessment.pulled=Le test a \u00E9t\u00E9 retir\u00E9 par votre coach. error.assessment.pulled=Le test a \u00E9t\u00E9 retir\u00E9 par votre coach.
error.assessment.stopped=Le test est termin\u00E9. error.assessment.stopped=Le test est termin\u00E9.
error.begin.after.end=La date de d\u00E9but doit se trouver avant la date de fin.
error.entry.locked=La ressource d'\u00E9tude choisie est actuellement \u00E9dit\u00E9e par un utilisateur. Veuillez choisir une autre ressource d'\u00E9tude SVP. error.entry.locked=La ressource d'\u00E9tude choisie est actuellement \u00E9dit\u00E9e par un utilisateur. Veuillez choisir une autre ressource d'\u00E9tude SVP.
error.resource.corrupted=L'object didactique n'a pas pu \u00EAtre lu. Il semble soit corrompu soit au mauvais format. error.resource.corrupted=L'object didactique n'a pas pu \u00EAtre lu. Il semble soit corrompu soit au mauvais format.
error.self.undefined.long=Aucun auto-test d\u00E9fini pour "{0}". Choisissez dans "Configuration auto-test". error.self.undefined.long=Aucun auto-test d\u00E9fini pour "{0}". Choisissez dans "Configuration auto-test".
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment