diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java index 0776fc31bb0debd2b30ec72d2ea158afe1b8f3e9..cb0b5b5dc0d25421ee45f4314adddcdda98b074c 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java @@ -155,6 +155,7 @@ public class RichTextConfiguration implements Disposable { private boolean allowCustomMediaFactory = true; private boolean inline = false; private boolean sendOnBlur; + private boolean readOnly; private CustomLinkTreeModel linkBrowserCustomTreeModel; // DOM ID of the flexi form element private String domID; @@ -454,6 +455,15 @@ public class RichTextConfiguration implements Disposable { public void setPathInStatusBar(boolean pathInStatusBar) { this.pathInStatusBar = pathInStatusBar; } + + + public boolean isReadOnly() { + return readOnly; + } + + public void setReadOnly(boolean readOnly) { + this.readOnly = readOnly; + } /** * Add a function name that has to be executed after initialization. <br> @@ -980,6 +990,9 @@ public class RichTextConfiguration implements Disposable { .append("statusbar:").append(true).append(",\n") .append("resize:").append(true).append(",\n") .append("menubar:").append(tinyConfig.hasMenu()).append(",\n"); + if(isReadOnly()) { + tinyMenuSb.append("readonly: 1,\n"); + } String leftAndClear = "Left and clear"; String rightAndClear = "Right and clear"; diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java index c4e1ea9da78051335578a6847882ad9cc1b35131..ef37b7a1e223977e81e0123ca0d0593a452810b8 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java @@ -93,8 +93,8 @@ public class FIBEditorController extends FormBasicController { textEl = uifactory.addRichTextElementForQTI21("desc", "form.imd.descr", question, 16, -1, itemContainer, formLayout, ureq.getUserSession(), getWindowControl()); textEl.addActionListener(FormEvent.ONCLICK); - textEl.setEnabled(!restrictedEdit); RichTextConfiguration richTextConfig = textEl.getEditorConfiguration(); + richTextConfig.setReadOnly(restrictedEdit); boolean hasNumericals = itemBuilder.hasNumericalInputs(); boolean hasTexts = itemBuilder.hasTextEntry(); @@ -221,14 +221,14 @@ public class FIBEditorController extends FormBasicController { } if(interaction instanceof TextEntry) { - textEntrySettingsCtrl = new FIBTextEntrySettingsController(ureq, getWindowControl(), (TextEntry)interaction); + textEntrySettingsCtrl = new FIBTextEntrySettingsController(ureq, getWindowControl(), (TextEntry)interaction, restrictedEdit); listenTo(textEntrySettingsCtrl); cmc = new CloseableModalController(getWindowControl(), translate("close"), textEntrySettingsCtrl.getInitialComponent(), true, translate("title.add") ); cmc.activate(); listenTo(cmc); } else if(interaction instanceof NumericalEntry) { - numericalEntrySettingsCtrl = new FIBNumericalEntrySettingsController(ureq, getWindowControl(), (NumericalEntry)interaction); + numericalEntrySettingsCtrl = new FIBNumericalEntrySettingsController(ureq, getWindowControl(), (NumericalEntry)interaction, restrictedEdit); listenTo(numericalEntrySettingsCtrl); cmc = new CloseableModalController(getWindowControl(), translate("close"), numericalEntrySettingsCtrl.getInitialComponent(), true, translate("title.add") ); diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBNumericalEntrySettingsController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBNumericalEntrySettingsController.java index 98211760de2c6325d987dccdbbe1d3ad3eb9f741..1976f11b7da2a47679e74f96d9c28740ebe48d50 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBNumericalEntrySettingsController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBNumericalEntrySettingsController.java @@ -55,11 +55,13 @@ public class FIBNumericalEntrySettingsController extends FormBasicController { private SingleSelection toleranceModeEl; private TextElement lowerToleranceEl, upperToleranceEl; + private final boolean restrictedEdit; private final NumericalEntry interaction; - public FIBNumericalEntrySettingsController(UserRequest ureq, WindowControl wControl, NumericalEntry interaction) { + public FIBNumericalEntrySettingsController(UserRequest ureq, WindowControl wControl, NumericalEntry interaction, boolean restrictedEdit) { super(ureq, wControl, Util.createPackageTranslator(AssessmentTestEditorController.class, ureq.getLocale())); this.interaction = interaction; + this.restrictedEdit = restrictedEdit; initForm(ureq); } @@ -68,17 +70,21 @@ public class FIBNumericalEntrySettingsController extends FormBasicController { Double solution = interaction.getSolution(); String solString = solution == null ? "" : solution.toString(); solutionEl = uifactory.addTextElement("fib.solution", "fib.solution", 256, solString, formLayout); + solutionEl.setEnabled(!restrictedEdit); String placeholder = interaction.getPlaceholder(); placeholderEl = uifactory.addTextElement("fib.placeholder", "fib.placeholder", 256, placeholder, formLayout); + placeholderEl.setEnabled(!restrictedEdit); Integer expectedLength = interaction.getExpectedLength(); String expectedLengthStr = expectedLength == null ? null : expectedLength.toString(); expectedLengthEl = uifactory.addTextElement("fib.expectedLength", "fib.expectedLength", 256, expectedLengthStr, formLayout); + expectedLengthEl.setEnabled(!restrictedEdit); String[] toleranceModeValues = new String[] { translate("fib.tolerance.mode.exact"), translate("fib.tolerance.mode.absolute"), translate("fib.tolerance.mode.relative") }; toleranceModeEl = uifactory.addDropdownSingleselect("fib.tolerance.mode", "fib.tolerance.mode", formLayout, toleranceModeKeys, toleranceModeValues, null); + toleranceModeEl.setEnabled(!restrictedEdit); if(interaction.getToleranceMode() != null) { for(String toleranceModeKey:toleranceModeKeys) { if(toleranceModeKey.equals(interaction.getToleranceMode().name())) { @@ -95,11 +101,13 @@ public class FIBNumericalEntrySettingsController extends FormBasicController { String lowerToleranceString = lowerTolerance == null ? "" : lowerTolerance.toString(); lowerToleranceEl = uifactory.addTextElement("fib.tolerance.low", "fib.tolerance.low", 8, lowerToleranceString, formLayout); lowerToleranceEl.setExampleKey("fib.tolerance.mode.absolute.example", null); + lowerToleranceEl.setEnabled(!restrictedEdit); Double upperTolerance = interaction.getUpperTolerance(); String upperToleranceString = upperTolerance == null ? "" : upperTolerance.toString(); upperToleranceEl = uifactory.addTextElement("fib.tolerance.up", "fib.tolerance.up", 8, upperToleranceString, formLayout); upperToleranceEl.setExampleKey("fib.tolerance.mode.absolute.example", null); + upperToleranceEl.setEnabled(!restrictedEdit); updateToleranceUpAndLow(); @@ -107,7 +115,9 @@ public class FIBNumericalEntrySettingsController extends FormBasicController { FormLayoutContainer buttonsContainer = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); buttonsContainer.setRootForm(mainForm); formLayout.add(buttonsContainer); - uifactory.addFormSubmitButton("submit", buttonsContainer); + if(!restrictedEdit) { + uifactory.addFormSubmitButton("submit", buttonsContainer); + } uifactory.addFormCancelButton("cancel", buttonsContainer, ureq, getWindowControl()); } diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBTextEntrySettingsController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBTextEntrySettingsController.java index 6297b3a572651b0a9268eb3eba382f9f4da440ea..46b441687d0244fdef3bd30aab773a5cc4810cfe 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBTextEntrySettingsController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBTextEntrySettingsController.java @@ -49,12 +49,14 @@ public class FIBTextEntrySettingsController extends FormBasicController { private TextElement expectedLengthEl; private MultipleSelectionElement caseSensitiveEl; + private final boolean restrictedEdit; private final TextEntry interaction; - public FIBTextEntrySettingsController(UserRequest ureq, WindowControl wControl, TextEntry interaction) { + public FIBTextEntrySettingsController(UserRequest ureq, WindowControl wControl, TextEntry interaction, boolean restrictedEdit) { super(ureq, wControl); setTranslator(Util.createPackageTranslator(AssessmentTestEditorController.class, getLocale())); this.interaction = interaction; + this.restrictedEdit = restrictedEdit; initForm(ureq); } @@ -62,18 +64,23 @@ public class FIBTextEntrySettingsController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { String solution = interaction.getSolution(); solutionEl = uifactory.addTextElement("fib.solution", "fib.solution", 256, solution, formLayout); + solutionEl.setEnabled(!restrictedEdit); String placeholder = interaction.getPlaceholder(); placeholderEl = uifactory.addTextElement("fib.placeholder", "fib.placeholder", 256, placeholder, formLayout); + placeholderEl.setEnabled(!restrictedEdit); String alternatives = interaction.alternativesToString(); alternativeEl = uifactory.addTextElement("fib.alternative", "fib.alternative", 256, alternatives, formLayout); alternativeEl.setHelpText(translate("fib.alternative.help")); alternativeEl.setHelpUrlForManualPage("Test editor QTI 2.1 in detail#details_testeditor_fragetypen_fib"); + alternativeEl.setEnabled(!restrictedEdit); Integer expectedLength = interaction.getExpectedLength(); String expectedLengthStr = expectedLength == null ? null : expectedLength.toString(); expectedLengthEl = uifactory.addTextElement("fib.expectedLength", "fib.expectedLength", 256, expectedLengthStr, formLayout); - + expectedLengthEl.setEnabled(!restrictedEdit); + caseSensitiveEl = uifactory.addCheckboxesHorizontal("fib.caseSensitive", "fib.caseSensitive", formLayout, onKeys, new String[]{ "" }); + caseSensitiveEl.setEnabled(!restrictedEdit); if(interaction.isCaseSensitive()) { caseSensitiveEl.select(onKeys[0], true); } @@ -82,7 +89,9 @@ public class FIBTextEntrySettingsController extends FormBasicController { FormLayoutContainer buttonsContainer = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); buttonsContainer.setRootForm(mainForm); formLayout.add(buttonsContainer); - uifactory.addFormSubmitButton("submit", buttonsContainer); + if(!restrictedEdit) { + uifactory.addFormSubmitButton("submit", buttonsContainer); + } uifactory.addFormCancelButton("cancel", buttonsContainer, ureq, getWindowControl()); }