diff --git a/src/main/java/org/olat/course/nodes/CPCourseNode.java b/src/main/java/org/olat/course/nodes/CPCourseNode.java index 33abbeaecf0bc5b058290a6fa44f0d09abe5d639..cb35bdd8f134e8005dfa4991cc85ea726927f865 100644 --- a/src/main/java/org/olat/course/nodes/CPCourseNode.java +++ b/src/main/java/org/olat/course/nodes/CPCourseNode.java @@ -100,12 +100,10 @@ public class CPCourseNode extends AbstractAccessableCourseNode { @Override public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) { - NodeRunConstructionResult ncr; updateModuleConfigDefaults(false); OLATResourceable ores = OresHelper.createOLATResourceableInstance(ICourse.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId()); CPRunController cprunC = new CPRunController(getModuleConfiguration(), ureq, wControl, this, nodecmd, ores); - ncr = cprunC.createNodeRunConstructionResult(ureq); - return ncr; + return cprunC.createNodeRunConstructionResult(ureq, null); } /** diff --git a/src/main/java/org/olat/course/nodes/cp/CPRunController.java b/src/main/java/org/olat/course/nodes/cp/CPRunController.java index 2fc80ad44e268b39dae0009e1cbc8d99338a485d..c01e42c400aac2d753243d05a76e6157d3e38ad1 100644 --- a/src/main/java/org/olat/course/nodes/cp/CPRunController.java +++ b/src/main/java/org/olat/course/nodes/cp/CPRunController.java @@ -47,6 +47,7 @@ import org.olat.core.id.context.StateEntry; import org.olat.core.logging.AssertException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.StringHelper; import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.LocalFolderImpl; import org.olat.course.editor.NodeEditController; @@ -243,11 +244,14 @@ public class CPRunController extends BasicController implements ControllerEventL } } - public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq) { + public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, String selectedNodeId) { NodeRunConstructionResult ncr; if (isExternalMenuConfigured()) { // integrate it into the olat menu Controller ctrl = TitledWrapperHelper.getWrapper(ureq, getWindowControl(), this, cpNode, "o_cp_icon"); + if(StringHelper.containsNonWhitespace(selectedNodeId) && treeModel.getNodeById(selectedNodeId) != null) { + selNodeId = selectedNodeId; + } ncr = new NodeRunConstructionResult(ctrl, treeModel, selNodeId, treeNodeClickListener); } else { // no menu to integrate Controller ctrl = TitledWrapperHelper.getWrapper(ureq, getWindowControl(), this, cpNode, "o_cp_icon"); diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java index 612c9bd5a4682427beafd1c189dd11773f355576..1f5eb5fc2c94d258adb2d3d9d7621d81bcb7c8d1 100644 --- a/src/main/java/org/olat/course/run/RunMainController.java +++ b/src/main/java/org/olat/course/run/RunMainController.java @@ -32,7 +32,6 @@ import java.util.Set; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; -import org.olat.core.commons.services.mark.MarkManager; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.htmlsite.OlatCmdEvent; @@ -76,7 +75,6 @@ import org.olat.course.DisposedCourseRestartController; import org.olat.course.ICourse; import org.olat.course.assessment.AssessmentChangedEvent; import org.olat.course.assessment.AssessmentMode; -import org.olat.course.assessment.EfficiencyStatementManager; import org.olat.course.assessment.manager.UserCourseInformationsManager; import org.olat.course.config.CourseConfig; import org.olat.course.editor.PublishEvent; @@ -91,15 +89,12 @@ import org.olat.course.run.userview.TreeFilter; import org.olat.course.run.userview.UserCourseEnvironmentImpl; import org.olat.course.run.userview.VisibleTreeFilter; import org.olat.group.BusinessGroup; -import org.olat.group.BusinessGroupService; import org.olat.group.ui.edit.BusinessGroupModifiedEvent; import org.olat.modules.cp.TreeNodeEvent; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; -import org.olat.repository.RepositoryService; import org.olat.repository.model.RepositoryEntrySecurity; import org.olat.util.logging.activity.LoggingResourceable; -import org.springframework.beans.factory.annotation.Autowired; /** * Description: <br> @@ -139,15 +134,6 @@ public class RunMainController extends MainLayoutBasicController implements Gene private Link nextLink, previousLink; private GlossaryMarkupItemController glossaryMarkerCtr; - @Autowired - private MarkManager markManager; - @Autowired - private RepositoryService repositoryService; - @Autowired - private BusinessGroupService businessGroupService; - @Autowired - private EfficiencyStatementManager efficiencyStatementManager; - /** * Constructor for the run main controller * diff --git a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java index 7545e69148b86de63132bc581fd046634a884fb9..a8f2c60dbcb21d36461b37859c982b67de45233f 100644 --- a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java +++ b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java @@ -197,7 +197,7 @@ public class NavigationHandler implements Disposable { } if(subtreemodelListener != currentNodeController) { if(subtreemodelListener instanceof CPRunController) { - nrcr = ((CPRunController)subtreemodelListener).createNodeRunConstructionResult(ureq); + nrcr = ((CPRunController)subtreemodelListener).createNodeRunConstructionResult(ureq, selTN.getIdent()); } else { nrcr = new NodeRunConstructionResult((Controller)subtreemodelListener); } @@ -213,18 +213,28 @@ public class NavigationHandler implements Disposable { treeEvent = new TreeEvent(treeEvent.getCommand(), treeEvent.getSubCommand(), selTN.getIdent()); boolean dispatch = true; + String selectedNodeId = null; if(userObject instanceof String) { + String sObject = (String)userObject; if(MenuTree.COMMAND_TREENODE_CLICKED.equals(treeEvent.getCommand()) && treeEvent.getSubCommand() == null) { - openCourseNodeIds.add((String)userObject); - openTreeNodeIds.add((String)userObject); + openCourseNodeIds.add(sObject); + if(!openTreeNodeIds.contains(sObject)) { + openTreeNodeIds.add(sObject); + } + selectedNodeId = selTN.getIdent(); } else if(TreeEvent.COMMAND_TREENODE_OPEN.equals(treeEvent.getSubCommand())) { - openCourseNodeIds.add((String)userObject); - openTreeNodeIds.add((String)userObject); + openCourseNodeIds.add(sObject); + if(!openTreeNodeIds.contains(sObject)) { + openTreeNodeIds.add(sObject); + } + selectedNodeId = selTN.getIdent(); dispatch = false; } else if(TreeEvent.COMMAND_TREENODE_CLOSE.equals(treeEvent.getSubCommand())) { removeChildrenFromOpenNodes(selTN); - openCourseNodeIds.remove(userObject); - openTreeNodeIds.remove(userObject); + openCourseNodeIds.remove(sObject); + openTreeNodeIds.remove(sObject); + openCourseNodeIds.remove(selTN.getIdent()); + openTreeNodeIds.remove(selTN.getIdent()); dispatch = false; } } @@ -234,7 +244,7 @@ public class NavigationHandler implements Disposable { subtreemodelListener.dispatchEvent(ureq, null, treeEvent); // no node construction result indicates handled } - ncr = new NodeClickedRef(treeModel, true, selTN.getIdent(), openTreeNodeIds, internCourseNode, nrcr, true); + ncr = new NodeClickedRef(treeModel, true, selectedNodeId, openTreeNodeIds, internCourseNode, nrcr, true); } else { // normal dispatching to a coursenode. // get the courseNode that was called diff --git a/src/main/java/org/olat/modules/cp/CPDisplayController.java b/src/main/java/org/olat/modules/cp/CPDisplayController.java index 14c83bbf632526c1fa214ea90116be5440024728..f3831b9d52f3e770a02106e27d65279c8093da84 100644 --- a/src/main/java/org/olat/modules/cp/CPDisplayController.java +++ b/src/main/java/org/olat/modules/cp/CPDisplayController.java @@ -297,7 +297,6 @@ public class CPDisplayController extends BasicController implements Activateable // adjust the tree selection to the current choice if found selectTreeNode(ureq, nue.getNewUri()); } - //fxdiff VCRP-13: cp navigation } else if (source == nextLink) { TreeNode nextUri = (TreeNode)nextLink.getUserObject(); switchToPage(ureq, nextUri); @@ -305,7 +304,6 @@ public class CPDisplayController extends BasicController implements Activateable cpTree.setSelectedNode(nextUri); } fireEvent(ureq, new TreeNodeEvent(nextUri)); - //fxdiff VCRP-13: cp navigation } else if (source == previousLink) { TreeNode previousUri = (TreeNode)previousLink.getUserObject(); if(cpTree != null) { @@ -313,7 +311,6 @@ public class CPDisplayController extends BasicController implements Activateable } switchToPage(ureq, previousUri); fireEvent(ureq, new TreeNodeEvent(previousUri)); - //fxdiff VCRP-14: print cp } else if (source == printLink) { selectPagesToPrint(ureq); } @@ -331,13 +328,11 @@ public class CPDisplayController extends BasicController implements Activateable selectTreeNode(ureq, nue.getNewUri()); }// else ignore (e.g. misplaced olatcmd event (inner olat link found in a // contentpackaging file) - //fxdiff VCRP-14: print cp } else if (source == printPopup) { removeAsListenerAndDispose(printPopup); removeAsListenerAndDispose(printController); printController = null; printPopup = null; - //fxdiff VCRP-14: print cp } else if (source == printController) { if(Event.DONE_EVENT == event) { List<String> nodeToPrint = printController.getSelectedNodeIdentifiers(); @@ -377,8 +372,7 @@ public class CPDisplayController extends BasicController implements Activateable printMapper.setSelectedNodeIds(selectedNodeIds); getWindowControl().getWindowBackOffice().sendCommandTo(new JSCommand(sb.toString())); } - - //fxdiff VCRP-14: print cp + private void selectPagesToPrint(UserRequest ureq) { removeAsListenerAndDispose(printController); removeAsListenerAndDispose(printPopup);