diff --git a/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java b/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java index b41f7de4a8292b1706006073c4e444ecf1a79983..1e8d0360baf2ad4575f010d1605cd93092017d89 100644 --- a/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java +++ b/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java @@ -31,6 +31,7 @@ import org.olat.course.editor.ConditionAccessEditConfig; import org.olat.course.nodeaccess.NodeAccessProvider; import org.olat.course.nodes.AbstractAccessableCourseNode; import org.olat.course.nodes.CourseNode; +import org.olat.course.run.CoursePaginationController; import org.olat.course.run.userview.CourseTreeModelBuilder; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.tree.CourseEditorTreeModel; @@ -89,6 +90,11 @@ public class ConditionNodeAccessProvider implements NodeAccessProvider { return ""; } + @Override + public CoursePaginationController getCoursePaginationController(UserRequest ureq, WindowControl wControl) { + return null; + } + @Override public CourseTreeModelBuilder getCourseTreeModelBuilder(UserCourseEnvironment userCourseEnv) { return new ConditionCourseTreeModelBuilder(userCourseEnv); diff --git a/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java b/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java index 97f7acc03e4da6dad8c596b7a7ed1c74dd8b4636..5e35fcac389ed6248bb2efb444f1827ca038e2d1 100644 --- a/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java +++ b/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java @@ -35,6 +35,7 @@ import org.olat.course.learningpath.ui.LearningPathNodeConfigController; import org.olat.course.learningpath.ui.TabbableLeaningPathNodeConfigController; import org.olat.course.nodeaccess.NodeAccessProvider; import org.olat.course.nodes.CourseNode; +import org.olat.course.run.CoursePaginationController; import org.olat.course.run.userview.CourseTreeModelBuilder; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.tree.CourseEditorTreeModel; @@ -98,6 +99,11 @@ public class LearningPathNodeAccessProvider implements NodeAccessProvider { return "o_lp_tree"; } + @Override + public CoursePaginationController getCoursePaginationController(UserRequest ureq, WindowControl wControl) { + return new CoursePaginationController(ureq, wControl); + } + @Override public CourseTreeModelBuilder getCourseTreeModelBuilder(UserCourseEnvironment userCourseEnv) { return new LearningPathCourseTreeModelBuilder(userCourseEnv); diff --git a/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java b/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java index c77ae2f313d50e1a5b9322e5d14ea90b26d497aa..dd38ea9bf57555e2ea2403b9eec6bbdebb3febd8 100644 --- a/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java +++ b/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java @@ -24,6 +24,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.tabbable.TabbableController; import org.olat.course.ICourse; import org.olat.course.nodes.CourseNode; +import org.olat.course.run.CoursePaginationController; import org.olat.course.run.userview.CourseTreeModelBuilder; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.tree.CourseEditorTreeModel; @@ -47,6 +48,8 @@ public interface NodeAccessProvider extends NodeAccessProviderIdentifier { public String getCourseTreeCssClass(); + public CoursePaginationController getCoursePaginationController(UserRequest ureq, WindowControl wControl); + public CourseTreeModelBuilder getCourseTreeModelBuilder(UserCourseEnvironment userCourseEnv); public boolean onNodeVisited(CourseNode courseNode, UserCourseEnvironment userCourseEnvironment); diff --git a/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java b/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java index e8a4dd950d21e6c42d432adbfb7bf4329fdc2b53..058be43fc51b36e95bc88805a0ab08bfd36f076b 100644 --- a/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java +++ b/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java @@ -27,6 +27,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.tabbable.TabbableController; import org.olat.course.ICourse; import org.olat.course.nodes.CourseNode; +import org.olat.course.run.CoursePaginationController; import org.olat.course.run.userview.CourseTreeModelBuilder; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.tree.CourseEditorTreeModel; @@ -76,6 +77,16 @@ public interface NodeAccessService { * @return */ public String getCourseTreeCssClass(NodeAccessType type); + + /** + * Controller to navigate to the next and the previous course node. + * + * @param ureq + * @param wControl + * @param type + * @return + */ + public CoursePaginationController getCoursePaginationController(UserRequest ureq, WindowControl wControl, NodeAccessType type); /** * Builder to build the TreeModel of the complete course run structure. diff --git a/src/main/java/org/olat/course/nodeaccess/manager/NodeAccessServiceImpl.java b/src/main/java/org/olat/course/nodeaccess/manager/NodeAccessServiceImpl.java index 4a0f4f273a8b8112593680990ed5aacb83e9e20a..bf45a3b3358ee51ef030305ab7d6470311e83697 100644 --- a/src/main/java/org/olat/course/nodeaccess/manager/NodeAccessServiceImpl.java +++ b/src/main/java/org/olat/course/nodeaccess/manager/NodeAccessServiceImpl.java @@ -33,6 +33,7 @@ import org.olat.course.nodeaccess.NodeAccessProviderIdentifier; import org.olat.course.nodeaccess.NodeAccessService; import org.olat.course.nodeaccess.NodeAccessType; import org.olat.course.nodes.CourseNode; +import org.olat.course.run.CoursePaginationController; import org.olat.course.run.navigation.NodeVisitedListener; import org.olat.course.run.userview.CourseTreeModelBuilder; import org.olat.course.run.userview.UserCourseEnvironment; @@ -101,6 +102,11 @@ public class NodeAccessServiceImpl implements NodeAccessService, NodeVisitedList public String getCourseTreeCssClass(NodeAccessType type) { return getNodeAccessProvider(type).getCourseTreeCssClass(); } + + @Override + public CoursePaginationController getCoursePaginationController(UserRequest ureq, WindowControl wControl, NodeAccessType type) { + return getNodeAccessProvider(type).getCoursePaginationController(ureq, wControl); + } @Override public CourseTreeModelBuilder getCourseTreeModelBuilder(UserCourseEnvironment userCourseEnv) { diff --git a/src/main/java/org/olat/course/run/CourseContentController.java b/src/main/java/org/olat/course/run/CourseContentController.java index 78fe22c659342aa62a1038586227b4da97119414..0520b55eb546bf70b876fb44706f5d3541235c28 100644 --- a/src/main/java/org/olat/course/run/CourseContentController.java +++ b/src/main/java/org/olat/course/run/CourseContentController.java @@ -40,8 +40,12 @@ public class CourseContentController extends BasicController { Component row2) { super(ureq, wControl); mainVC = createVelocityContainer("content"); - mainVC.put("row1", row1); - mainVC.put("row2", row2); + if (row1 != null) { + mainVC.put("row1", row1); + } + if (row2 != null) { + mainVC.put("row2", row2); + } putInitialPanel(mainVC); } diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java index 98105fc4698158527c6ad70c2ab8c85d343a3b92..3722bc8b31255cea1784668a670d347a812b1c99 100644 --- a/src/main/java/org/olat/course/run/RunMainController.java +++ b/src/main/java/org/olat/course/run/RunMainController.java @@ -186,12 +186,14 @@ public class RunMainController extends MainLayoutBasicController implements Gene luTree = new MenuTree(null, "luTreeRun", this); luTree.setScrollTopOnClick(true); luTree.setExpandSelectedNode(false); - String treeCssClass =nodeAccessService.getCourseTreeCssClass(NodeAccessType.of(course)); + String treeCssClass = nodeAccessService.getCourseTreeCssClass(NodeAccessType.of(course)); luTree.setElementCssClass("o_course_menu " + treeCssClass); contentP = new Panel("building_block_content"); - paginationCtrl = new CoursePaginationController(ureq, getWindowControl()); - listenTo(paginationCtrl); + paginationCtrl = nodeAccessService.getCoursePaginationController(ureq, getWindowControl(), NodeAccessType.of(course)); + if (paginationCtrl != null) { + listenTo(paginationCtrl); + } // build up the running structure for this user // get all group memberships for this course @@ -226,6 +228,7 @@ public class RunMainController extends MainLayoutBasicController implements Gene layoutTree = null; } + Component paginationCmp = paginationCtrl != null? paginationCtrl.getInitialComponent(): null; if (glossaryMarkerCtr != null) { listenTo(glossaryMarkerCtr); // enable / disable glossary highlighting according to user prefs @@ -242,11 +245,10 @@ public class RunMainController extends MainLayoutBasicController implements Gene } else { glossaryMarkerCtr.setTextMarkingEnabled(state.booleanValue()); } - contentCtrl = new CourseContentController(ureq, getWindowControl(), paginationCtrl.getInitialComponent(), + contentCtrl = new CourseContentController(ureq, getWindowControl(), paginationCmp, glossaryMarkerCtr.getInitialComponent()); } else { - contentCtrl = new CourseContentController(ureq, getWindowControl(), paginationCtrl.getInitialComponent(), - contentP); + contentCtrl = new CourseContentController(ureq, getWindowControl(), paginationCmp, contentP); } columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), layoutTree, contentCtrl.getInitialComponent(), "courseRun" + course.getResourceableId());