Skip to content
Snippets Groups Projects
Commit d2413c1c authored by uhensler's avatar uhensler
Browse files

OO-4968: Back navigation does not work if structure element has no overview

parent 80accbdb
No related branches found
No related tags found
No related merge requests found
......@@ -93,14 +93,16 @@ import org.olat.course.groupsandrights.CourseGroupManager;
import org.olat.course.nodeaccess.NodeAccessService;
import org.olat.course.nodeaccess.NodeAccessType;
import org.olat.course.nodes.CourseNode;
import org.olat.course.nodes.STCourseNode;
import org.olat.course.run.glossary.CourseGlossaryFactory;
import org.olat.course.run.glossary.CourseGlossaryToolLinkController;
import org.olat.course.run.navigation.NavigationHandler;
import org.olat.course.run.navigation.NodeClickedRef;
import org.olat.course.run.scoring.AssessmentEvaluation;
import org.olat.course.run.tools.OpenCourseToolEvent;
import org.olat.course.run.tools.CourseTool;
import org.olat.course.run.tools.OpenCourseToolEvent;
import org.olat.course.run.userview.AssessmentModeTreeFilter;
import org.olat.course.run.userview.CourseTreeNode;
import org.olat.course.run.userview.InvisibleTreeFilter;
import org.olat.course.run.userview.UserCourseEnvironmentImpl;
import org.olat.course.run.userview.VisibilityFilter;
......@@ -430,8 +432,8 @@ public class RunMainController extends MainLayoutBasicController implements Gene
} else {
List<TreeNode> flatTree = new ArrayList<>();
TreeHelper.makeTreeFlat(luTree.getTreeModel().getRootNode(), flatTree);
hasPrevious = getPreviousNonDelegatingNode(flatTree, luTree.getSelectedNode()) != null;;
int index = flatTree.indexOf(luTree.getSelectedNode());
hasPrevious = index > 0;
hasNext = index >= 0 && index+1 < flatTree.size();
}
......@@ -775,14 +777,38 @@ public class RunMainController extends MainLayoutBasicController implements Gene
List<TreeNode> flatList = new ArrayList<>();
TreeNode currentNode = luTree.getSelectedNode();
TreeHelper.makeTreeFlat(luTree.getTreeModel().getRootNode(), flatList);
int index = flatList.indexOf(currentNode);
if(index-1 >= 0 && index-1 < flatList.size()) {
TreeNode previousNode = flatList.get(index - 1);
TreeEvent tev = new TreeEvent(MenuTree.COMMAND_TREENODE_CLICKED, previousNode.getIdent());
TreeNode previousNonDelegatingNode = getPreviousNonDelegatingNode(flatList, currentNode);
if (previousNonDelegatingNode != null) {
TreeEvent tev = new TreeEvent(MenuTree.COMMAND_TREENODE_CLICKED, previousNonDelegatingNode.getIdent());
doNodeClick(ureq, tev);
}
}
private TreeNode getPreviousNonDelegatingNode(List<TreeNode> flatList, TreeNode treeNode) {
int index = flatList.indexOf(treeNode);
if (index-1 >= 0 && index-1 < flatList.size()) {
TreeNode previousNode = flatList.get(index - 1);
if (previousNode != null) {
if (isPreviuosDelegatingNode(previousNode, treeNode)) {
return getPreviousNonDelegatingNode(flatList, previousNode);
}
return previousNode;
}
}
return null;
}
private boolean isPreviuosDelegatingNode(TreeNode previousNode, TreeNode currentNode) {
// Delegating wiki or content package
boolean previousCourseTreeNode = previousNode instanceof CourseTreeNode;
boolean currentNoCourseTreeNode = !(currentNode instanceof CourseTreeNode);
if (currentNoCourseTreeNode && previousCourseTreeNode) return true;
// If it is delegating but not accessible it's ok, because the no access message is shown.
CourseNode previousCourseNode = previousCourseTreeNode? ((CourseTreeNode)previousNode).getCourseNode(): null;
return STCourseNode.isDelegatingSTCourseNode(previousCourseNode) && previousNode.isAccessible();
}
private void doAssessmentConfirmation(boolean confirmed) {
nodeAccessService.onAssessmentConfirmed(getCurrentCourseNode(), getUce(), confirmed);
updateAfterChanges(getCurrentCourseNode(), luTree.getSelectedNodeId());
......
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