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

OO-1593: convert hint from QTI 1.2, handle disabled math extension, better...

OO-1593: convert hint from QTI 1.2, handle disabled math extension, better behavior of the dropdown tree in assessment tool...
parent 944a388c
No related branches found
No related tags found
No related merge requests found
......@@ -74,6 +74,8 @@ public class AssessmentIdentityCourseController extends BasicController implemen
private CourseNodeSelectionController courseNodeChooserCtrl;
private CloseableCalloutWindowController courseNodeChooserCalloutCtrl;
private CourseNode currentCourseNode;
@Autowired
private BaseSecurity securityManager;
......@@ -182,6 +184,11 @@ public class AssessmentIdentityCourseController extends BasicController implemen
courseNodeChooserCtrl = new CourseNodeSelectionController(ureq, getWindowControl(), courseEntry);
listenTo(courseNodeChooserCtrl);
if(currentCourseNode != null) {
courseNodeChooserCtrl.selectedCourseNode(currentCourseNode);
} else {
courseNodeChooserCtrl.selectedCourseNode(treeOverviewCtrl.getSelectedCourseNode());
}
courseNodeChooserCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(),
courseNodeChooserCtrl.getInitialComponent(), courseNodeSelectionLink, "", true, "");
......@@ -210,7 +217,8 @@ public class AssessmentIdentityCourseController extends BasicController implemen
private void doSelectCourseNode(UserRequest ureq, CourseNode courseNode) {
if(courseNode == null) {
return;
}
}
currentCourseNode = courseNode;
stackPanel.popUpToController(this);
if(treeOverviewCtrl.isRoot(courseNode)) {
return;
......@@ -241,7 +249,9 @@ public class AssessmentIdentityCourseController extends BasicController implemen
nextLink = LinkFactory.createToolLink("nextelement", translate("next"), this, "o_icon_next");
nextLink.setTitle(translate("command.next"));
nextLink.setEnabled(index > 0 && index < numOfNodes);
CourseNode nextNode = treeOverviewCtrl.getNextNode(courseNode);
boolean hasNext = (nextNode != null && nextNode.getParent() != null);
nextLink.setEnabled(hasNext);
stackPanel.addTool(nextLink, Align.rightEdge, false);
}
}
......@@ -22,16 +22,21 @@ package org.olat.course.assessment.ui.tool;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.tree.MenuTree;
import org.olat.core.gui.components.tree.TreeEvent;
import org.olat.core.gui.components.tree.TreeModel;
import org.olat.core.gui.components.tree.TreeNode;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.util.tree.TreeHelper;
import org.olat.course.CourseFactory;
import org.olat.course.ICourse;
import org.olat.course.assessment.AssessmentHelper;
import org.olat.course.assessment.ui.tool.event.CourseNodeEvent;
import org.olat.course.nodes.AssessableCourseNode;
import org.olat.course.nodes.CourseNode;
import org.olat.course.nodes.STCourseNode;
import org.olat.repository.RepositoryEntry;
/**
......@@ -53,6 +58,7 @@ public class CourseNodeSelectionController extends BasicController {
menuTree = new MenuTree("menuTree");
TreeModel tm = AssessmentHelper.assessmentTreeModel(course);
menuTree.setTreeModel(tm);
menuTree.setExpandSelectedNode(true);
menuTree.setSelectedNodeId(tm.getRootNode().getIdent());
menuTree.addListener(this);
......@@ -65,15 +71,36 @@ public class CourseNodeSelectionController extends BasicController {
protected void doDispose() {
//
}
public void selectedCourseNode(CourseNode courseNode) {
TreeNode selectedNode = TreeHelper.findNodeByUserObject(courseNode, menuTree.getTreeModel().getRootNode());
if(selectedNode != null) {
menuTree.setSelectedNode(selectedNode);
}
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if (source == menuTree) {
if (event.getCommand().equals(MenuTree.COMMAND_TREENODE_CLICKED)) {
Object uo = menuTree.getSelectedNode().getUserObject();
if(uo instanceof CourseNode) {
CourseNode selectedNode = (CourseNode)uo;
fireEvent(ureq, new CourseNodeEvent(CourseNodeEvent.SELECT_COURSE_NODE, selectedNode.getIdent()));
if(event instanceof TreeEvent) {
TreeEvent te = (TreeEvent)event;
if(TreeEvent.COMMAND_TREENODE_OPEN.equals(te.getSubCommand()) || TreeEvent.COMMAND_TREENODE_CLOSE.equals(te.getSubCommand())) {
Object uo = menuTree.getSelectedNode().getUserObject();
if(menuTree.getSelectedNode() == menuTree.getTreeModel().getRootNode()) {
//do nothing
} else if(uo instanceof AssessableCourseNode && !(uo instanceof STCourseNode)) {
AssessableCourseNode selectedNode = (AssessableCourseNode)uo;
fireEvent(ureq, new CourseNodeEvent(CourseNodeEvent.SELECT_COURSE_NODE, selectedNode.getIdent()));
}
} else if (event.getCommand().equals(MenuTree.COMMAND_TREENODE_CLICKED)) {
Object uo = menuTree.getSelectedNode().getUserObject();
if(menuTree.getSelectedNode() == menuTree.getTreeModel().getRootNode()) {
CourseNode rootNode = (CourseNode)uo;
fireEvent(ureq, new CourseNodeEvent(CourseNodeEvent.SELECT_COURSE_NODE, rootNode.getIdent()));
} else if(uo instanceof AssessableCourseNode && !(uo instanceof STCourseNode)) {
AssessableCourseNode selectedNode = (AssessableCourseNode)uo;
fireEvent(ureq, new CourseNodeEvent(CourseNodeEvent.SELECT_COURSE_NODE, selectedNode.getIdent()));
}
}
}
}
......
......@@ -473,6 +473,12 @@ public class QTI12To21Converter {
String questionText = question.getQuestion().renderAsHtmlForEditor();
itemBuilder.setQuestion(questionText);
String hintText = question.getHintText();
if(StringHelper.containsNonWhitespace(hintText)) {
ModalFeedbackBuilder hint = itemBuilder.createHint();
hint.setText(hintText);
}
String feedbackMastery = QTIEditHelper.getFeedbackMasteryText(item);
if(StringHelper.containsNonWhitespace(feedbackMastery)) {
ModalFeedbackBuilder feedback = itemBuilder.createCorrectFeedback();
......@@ -484,6 +490,7 @@ public class QTI12To21Converter {
ModalFeedbackBuilder feedback = itemBuilder.createIncorrectFeedback();
feedback.setText(feedbackFail);
}
}
private void convertDuration(Duration duration, ControlObject<?> parent) {
......
......@@ -97,3 +97,5 @@ test.complete=Test complete
test.entry.page.text=This test consists of up to {0} parts.
test.entry.page.title=Test entry
test.part.complete=Test part complete
unsupported.custom.interaction=Unsupported custom interaction
......@@ -82,6 +82,7 @@ import org.olat.core.logging.Tracing;
import org.olat.core.util.CodeHelper;
import org.olat.core.util.StringHelper;
import org.olat.core.util.Util;
import org.olat.ims.qti21.QTI21Module;
import org.olat.ims.qti21.QTI21Service;
import org.olat.ims.qti21.XmlUtilities;
import org.xml.sax.InputSource;
......@@ -595,6 +596,12 @@ public abstract class AssessmentObjectComponentRenderer extends DefaultComponent
}
break;
}
case "mathEntryInteraction": {
if(!CoreSpringFactory.getImpl(QTI21Module.class).isMathAssessExtensionEnabled()) {
interactionName = "mathEntryInteractionNotEnabled";
break;
}
}
default: interactionName = interaction.getQtiClassName(); break;
}
......
<h1>Unsupported custom interaction</h1>
\ No newline at end of file
<div class="o_warning">$r.translate("unsupported.custom.interaction") <strong>&lt;$localName&gt;</strong></div>
\ No newline at end of file
......@@ -142,4 +142,9 @@ public class DateDisplayPropertyHandler extends AbstractUserPropertyHandler {
public String getStringValue(String displayValue, Locale locale) {
return displayValue;
}
@Override
protected void setInternalGetterSetter(String name) {
//do nothing, artificial value
}
}
\ No newline at end of file
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