diff --git a/src/main/java/org/olat/ims/_spring/imsContext.xml b/src/main/java/org/olat/ims/_spring/imsContext.xml index 142f2764eabd0cfbc566588dbfa0a67d5188f795..09311f8f0fb1fb3bd912490e37397ef0d27fe367 100644 --- a/src/main/java/org/olat/ims/_spring/imsContext.xml +++ b/src/main/java/org/olat/ims/_spring/imsContext.xml @@ -14,4 +14,24 @@ <bean id="org.olat.ims.cp.CPManager" class="org.olat.ims.cp.CPManagerImpl"/> + <!-- QTI 2.1 admin. panel --> + <bean class="org.olat.core.extensions.action.GenericActionExtension" init-method="initExtensionPoints"> + <property name="order" value="8209" /> + <property name="actionController"> + <bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype"> + <property name="className" value="org.olat.ims.qti21.ui.QTI21AdminController"/> + </bean> + </property> + <property name="navigationKey" value="qti21" /> + <property name="i18nActionKey" value="admin.menu.title"/> + <property name="i18nDescriptionKey" value="admin.menu.title.alt"/> + <property name="translationPackage" value="org.olat.ims.qti21.ui"/> + <property name="parentTreeNodeIdentifier" value="modulesParent" /> + <property name="extensionPoints"> + <list> + <value>org.olat.admin.SystemAdminMainController</value> + </list> + </property> + </bean> + </beans> \ No newline at end of file diff --git a/src/main/java/org/olat/ims/qti21/QTI21Module.java b/src/main/java/org/olat/ims/qti21/QTI21Module.java index 45c683dd40d7eb4cf59cff93e93d6dd17c59f776..672fb4e4f5939b668683905d2b17c49af0f4e7e8 100644 --- a/src/main/java/org/olat/ims/qti21/QTI21Module.java +++ b/src/main/java/org/olat/ims/qti21/QTI21Module.java @@ -20,6 +20,7 @@ package org.olat.ims.qti21; import org.olat.core.configuration.AbstractSpringModule; +import org.olat.core.util.StringHelper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.ims.qti21.repository.handlers.QTI21AssessmentTestHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; @@ -39,7 +40,7 @@ public class QTI21Module extends AbstractSpringModule { @Autowired private QTI21AssessmentTestHandler assessmentHandler; - @Value("${qti21.math.assessment.extension.enabled:true}") + @Value("${qti21.math.assessment.extension.enabled:false}") private boolean mathAssessExtensionEnabled; @Autowired @@ -52,23 +53,23 @@ public class QTI21Module extends AbstractSpringModule { RepositoryHandlerFactory.registerHandler(assessmentHandler, 10); //Saxon is mandatory, JQTI need XSLT 2.0 //XsltFactoryUtilities.SAXON_TRANSFORMER_FACTORY_CLASS_NAME; + initFromChangedProperties(); } @Override protected void initFromChangedProperties() { - // + String mathExtensionObj = getStringPropertyValue("math.extension", true); + if(StringHelper.containsNonWhitespace(mathExtensionObj)) { + mathAssessExtensionEnabled = "enabled".equals(mathExtensionObj); + } } public boolean isMathAssessExtensionEnabled() { return mathAssessExtensionEnabled; } - public void setMathAssessExtensionEnabled(boolean mathAssessExtensionEnabled) { - this.mathAssessExtensionEnabled = mathAssessExtensionEnabled; + public void setMathAssessExtensionEnabled(boolean enabled) { + mathAssessExtensionEnabled = enabled; + setStringProperty("math.extension", enabled ? "enabled" : "disabled", true); } - - - - - } diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java new file mode 100644 index 0000000000000000000000000000000000000000..0f3c58a3850ee812070cdceaf37da6e9d1a5c05e --- /dev/null +++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java @@ -0,0 +1,91 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.ims.qti21.ui; + +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.MultipleSelectionElement; +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.control.Controller; +import org.olat.core.gui.control.WindowControl; +import org.olat.ims.qti21.QTI21Module; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Administration for system-wide settings. + * + * Initial date: 25.08.2016<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class QTI21AdminController extends FormBasicController { + + private static final String[] mathExtensionKeys = new String[]{ "on" }; + + private MultipleSelectionElement mathExtensionEl; + + @Autowired + private QTI21Module qtiModule; + + public QTI21AdminController(UserRequest ureq, WindowControl wControl) { + super(ureq, wControl); + + initForm(ureq); + } + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { + setFormTitle("admin.title"); + + String[] mathExtensionValues = new String[]{ "" }; + mathExtensionEl = uifactory.addCheckboxesHorizontal("math.extension", "math.extension", formLayout, + mathExtensionKeys, mathExtensionValues); + if(qtiModule.isMathAssessExtensionEnabled()) { + mathExtensionEl.select(mathExtensionKeys[0], true); + } + mathExtensionEl.setExampleKey("math.extension.text", null); + mathExtensionEl.addActionListener(FormEvent.ONCHANGE); + } + + @Override + protected void doDispose() { + // + } + + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { + if(mathExtensionEl == source) { + qtiModule.setMathAssessExtensionEnabled(mathExtensionEl.isSelected(0)); + } + super.formInnerEvent(ureq, source, event); + } + + @Override + protected void formOK(UserRequest ureq) { + // + } + + + + + +} 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 c8d57d7b3691b6cd9ee7fc1f84886eabfeebe5e3..5893364a2634e30dca35529a7258dee628c6e48e 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 @@ -1,5 +1,8 @@ #Tue Aug 23 10:37:11 CEST 2016 actualPoints=$org.olat.modules.iq\:actualPoints +admin.title=QTI 2.1 Einstellungen +admin.menu.title=QTI 2.1 +admin.menu.title.alt=QTI 2.1 Einstellungen anonym.not.allowed.descr=Anonym Benutzer d\u00FCrfen diesen Test nicht durchf\u00FChren anonym.not.allowed.title=Anonym Benutzer anonym.user=Anonym Benutzer @@ -69,6 +72,8 @@ interaction.order.drag.msg=Ziehen Sie die nicht verwendete Elemente von hier... interaction.order.drop.msg=Drop and order your selected items here... interaction.order.source=Quelle interaction.order.target=Ziel +math.extension=QtiWorks Math extension +math.extension.text=Braucht Maxima auf dem Server menu.reset.title=Testdaten zur\u00FCcksetzen menu.retrieve.tests.title=$org.olat.ims.qti.statistics.ui\:menu.pull.tests.title passed.no=$org.olat.course.nodes.iq\:passed.no 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 583d429ad2bd3913c31f3964f6c028a42f303c90..cdff5a93103f0647252cb4f3c29ae3797eae70e5 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 @@ -1,5 +1,8 @@ #Tue Aug 23 10:37:23 CEST 2016 actualPoints=$org.olat.modules.iq\:actualPoints +admin.title=QTI 2.1 settings +admin.menu.title=QTI 2.1 +admin.menu.title.alt=QTI 2.1 settings anonym.not.allowed.descr=Anonym users are not allowed to play this test anonym.not.allowed.title=Anonym users anonym.user=Anonymous user @@ -78,6 +81,8 @@ interaction.order.drag.msg=Drag unused items from here... interaction.order.drop.msg=Drop and order your selected items here... interaction.order.source=Source interaction.order.target=Target +math.extension=QtiWorks Math extension +math.extension.text=Need Maxima installed on the server menu.reset.title=Reset data of test menu.retrieve.tests.title=$org.olat.ims.qti.statistics.ui\:menu.pull.tests.title passed.no=$org.olat.course.nodes.iq\:passed.no diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java index 8a32cd839b85acbb93fde18f992b0dc05a4ab478..263759178016b42a972e383a52958e213d6bbba7 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java +++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentTestComposerController.java @@ -284,6 +284,7 @@ public class AssessmentTestComposerController extends MainLayoutBasicController if(ureq.getUserSession().getRoles().isOLATAdmin()) { reloadInCacheLink = LinkFactory.createToolLink("replace.in.cache.pool", translate("tools.reload.from.files"), this, "o_icon_refresh"); + reloadInCacheLink.setTooltip(translate("tools.reload.from.files.tooltip")); reloadInCacheLink.setDomReplacementWrapperRequired(false); changeItemTools.addComponent(reloadInCacheLink); } diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties index d5a9e390c8878b64b5960cc2a3a72e2ff5c980a9..f412c88032c87ab90d765ea3253fb170f336ce17 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties @@ -117,6 +117,7 @@ tools.export.qpool=$org.olat.ims.qti.editor\:tools.export.qpool tools.import.qpool=$org.olat.ims.qti.editor\:tools.import.qpool tools.import.table=$org.olat.ims.qti.editor\:tools.import.table tools.reload.from.files=Dateien neu laden und im Puffer ersetzen +tools.reload.from.files.tooltip=Only visible to administrators. warning.alien.assessment.item=Dieser Fragetyp kann nicht mit dem OpenOLAT-Editor bearbeitet werden. warning.alien.assessment.test=Dieser Test kann nicht mit dem OpenOLAT-Editor bearbeitet werden. warning.in.use=Die Ressource wird bereits f\u00FCr Auswertung verwendet. Die Bearbeitung ist begrenzt. diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties index ea49cecab897fa8df58f54f7c9c909d817b3fa27..30367e5ab0259c623f27bb9c2a28dff928e5e795 100644 --- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties @@ -117,6 +117,7 @@ tools.export.qpool=$org.olat.ims.qti.editor\:tools.export.qpool tools.import.qpool=$org.olat.ims.qti.editor\:tools.import.qpool tools.import.table=$org.olat.ims.qti.editor\:tools.import.table tools.reload.from.files=Reload files and refresh cache +tools.reload.from.files.tooltip=Only visible to administrators. warning.alien.assessment.item=This question type cannot be processed with the OpenOLAT editor. warning.alien.assessment.test=This test cannot be processed with the OpenOLAT editor. warning.feedback.cutvalue=The feedback is based on the cut value. You need to define it first.