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 160ec30744f82ffba46198838b2448a841e76172..ec0a89ed267f5081b30d14ed10319055fdebed69 100644 --- a/src/main/java/org/olat/course/nodes/cp/CPRunController.java +++ b/src/main/java/org/olat/course/nodes/cp/CPRunController.java @@ -205,7 +205,7 @@ public class CPRunController extends BasicController implements ControllerEventL cpAssessmentProvider = userCourseEnv.getIdentityEnvironment().getRoles().isGuestOnly() ? DryRunAssessmentProvider.create() - : PersistingAssessmentProvider.create(re, getIdentity()); + : PersistingAssessmentProvider.create(re, getIdentity(), userCourseEnv.isParticipant()); } // else cpRoot is already set (save some db access if the user opens / // closes / reopens the cp from the same CPRuncontroller instance) diff --git a/src/main/java/org/olat/course/nodes/wiki/WikiRunController.java b/src/main/java/org/olat/course/nodes/wiki/WikiRunController.java index c34a609dee8f55a2a7c22aa8231eecc98efe3266..65ea410ae3f42c60eb58ca5d92a2acd461c20ca5 100644 --- a/src/main/java/org/olat/course/nodes/wiki/WikiRunController.java +++ b/src/main/java/org/olat/course/nodes/wiki/WikiRunController.java @@ -117,7 +117,7 @@ public class WikiRunController extends BasicController implements Activateable2 callback = new WikiSecurityCallbackImpl(courseEditRight, isAdmininstrator, isGuestOnly, false, isResourceOwner, subsContext); assessmentProvider = userCourseEnv.isParticipant() - ? PersistingAssessmentProvider.create(wikiEntry, getIdentity()) + ? PersistingAssessmentProvider.create(wikiEntry, getIdentity(), true) : DryRunAssessmentProvider.create(); } diff --git a/src/main/java/org/olat/course/nodes/wiki/_content/WikiToolController.java b/src/main/java/org/olat/course/nodes/wiki/_content/WikiToolController.java index 11e4b6e923146515a98fa12ccdd423aeafdfdacc..be55b784cb2f9e78401763b358d2630a528d375e 100644 --- a/src/main/java/org/olat/course/nodes/wiki/_content/WikiToolController.java +++ b/src/main/java/org/olat/course/nodes/wiki/_content/WikiToolController.java @@ -99,7 +99,7 @@ public class WikiToolController extends BasicController implements Activateable2 callback = new WikiSecurityCallbackImpl(Boolean.TRUE, isAdmininstrator, isGuestOnly, false, isResourceOwner, subsContext); assessmentProvider = userCourseEnv.isParticipant() - ? PersistingAssessmentProvider.create(wikiEntry, getIdentity()) + ? PersistingAssessmentProvider.create(wikiEntry, getIdentity(), false) : DryRunAssessmentProvider.create(); } 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 4cbc8db22115f6a29df462a82ba9d19fbabcd374..a2b8c7cff6c1cb806928e0474aac9efaa25a29d6 100644 --- a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java +++ b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java @@ -446,6 +446,7 @@ public class NavigationHandler implements Disposable { } if (evaluateTree) { treeModel = createTreeModel(); + reattachExternalTreeModels(treeModel); } if((TreeEvent.COMMAND_TREENODE_OPEN.equals(nodeSubCmd) || TreeEvent.COMMAND_TREENODE_CLOSE.equals(nodeSubCmd)) && @@ -567,10 +568,6 @@ public class NavigationHandler implements Disposable { // always insert before already existing course building block children parent.insert(chdc, 0); } - - if (parent instanceof GenericTreeNode) { - ((GenericTreeNode)parent).setIdent(root.getIdent()); - } } private static class SubTree { diff --git a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java index 2996dc554fbf0d67411cba883015d2b8b5f64b5b..8cfa79b7c0ae059a065aac6d78f1872fe66b6287 100644 --- a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java +++ b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java @@ -108,7 +108,7 @@ public class CPEditMainController extends BasicController implements ToolbarAwar } else { showInfo("contentcontroller.no.lock"); - CPAssessmentProvider cpAssessmentProvider = PersistingAssessmentProvider.create(cpEntry, getIdentity()); + CPAssessmentProvider cpAssessmentProvider = PersistingAssessmentProvider.create(cpEntry, getIdentity(), false); Controller cpCtr = CPUIFactory.getInstance() .createMainLayoutController(ureq, wControl, cpContainer, true, deliveryOptions, cpAssessmentProvider); putInitialPanel(cpCtr.getInitialComponent()); diff --git a/src/main/java/org/olat/modules/cp/CPAssessmentProvider.java b/src/main/java/org/olat/modules/cp/CPAssessmentProvider.java index c8305fb35eb4a969efde3e336204ae6875754bdc..21d1404fa1b41cc36b3002391bf58b0e5857b5f9 100644 --- a/src/main/java/org/olat/modules/cp/CPAssessmentProvider.java +++ b/src/main/java/org/olat/modules/cp/CPAssessmentProvider.java @@ -29,6 +29,8 @@ import org.olat.modules.assessment.model.AssessmentEntryStatus; */ public interface CPAssessmentProvider { + boolean isLearningPathCSS(); + AssessmentEntryStatus onPageVisited(String itemIdentifier); AssessmentEntryStatus getStatus(String itemIdentifier); diff --git a/src/main/java/org/olat/modules/cp/CPDisplayController.java b/src/main/java/org/olat/modules/cp/CPDisplayController.java index 2e1a8eb349060cdfa5b88894888f9a59761f5902..991ebd8bfd4155cff8f73bb9b2d7ac45d02bf9c5 100644 --- a/src/main/java/org/olat/modules/cp/CPDisplayController.java +++ b/src/main/java/org/olat/modules/cp/CPDisplayController.java @@ -498,8 +498,10 @@ public class CPDisplayController extends BasicController implements Activateable UserObject userObject = (UserObject)treeNode.getUserObject(); String identifier = userObject.getIdentifier(); AssessmentEntryStatus status = cpAssessmentProvider.onPageVisited(identifier); - String cssClass = CPManifestTreeModel.getItemCssClass(status); - ((GenericTreeNode)treeNode).setCssClass(cssClass); + if (cpAssessmentProvider.isLearningPathCSS()) { + String cssClass = CPManifestTreeModel.getItemCssClass(status); + ((GenericTreeNode)treeNode).setCssClass(cssClass); + } } @Override diff --git a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java index e939daa7d058eb45e940931fa0094359072d3c1a..ce66b0bc41545dc1f586c3a09b0dee7138e9ba6c 100644 --- a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java +++ b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java @@ -212,7 +212,9 @@ public class CPManifestTreeModel extends GenericTreeModel { } } else if (item.getName().equals("item")) { gtn.setIconCssClass("o_cp_item"); - gtn.setCssClass(getItemCssClass(identifier)); + if (cpAssessmentProvider.isLearningPathCSS()) { + gtn.setCssClass(getItemCssClass(identifier)); + } //set resolved file path directly String identifierref = item.attributeValue("identifierref"); if(identifierref != null) { diff --git a/src/main/java/org/olat/modules/cp/DryRunAssessmentProvider.java b/src/main/java/org/olat/modules/cp/DryRunAssessmentProvider.java index 46eb53be33d31851aee827a2794f5855c7108a70..2513643c5e54de90ca9a875d1618c406fb9958b5 100644 --- a/src/main/java/org/olat/modules/cp/DryRunAssessmentProvider.java +++ b/src/main/java/org/olat/modules/cp/DryRunAssessmentProvider.java @@ -38,6 +38,11 @@ public class DryRunAssessmentProvider implements CPAssessmentProvider { private DryRunAssessmentProvider() { // } + + @Override + public boolean isLearningPathCSS() { + return false; + } @Override public AssessmentEntryStatus onPageVisited(String itemIdentifier) { diff --git a/src/main/java/org/olat/modules/cp/PersistingAssessmentProvider.java b/src/main/java/org/olat/modules/cp/PersistingAssessmentProvider.java index af87aad28f7cea642fd84eac80484ea2ee8fe4e6..08fa9e87cce587c6a0026fc21b03bcbbfd8ec09a 100644 --- a/src/main/java/org/olat/modules/cp/PersistingAssessmentProvider.java +++ b/src/main/java/org/olat/modules/cp/PersistingAssessmentProvider.java @@ -39,24 +39,32 @@ public class PersistingAssessmentProvider implements CPAssessmentProvider { private final Identity identity; private final RepositoryEntry cpEntry; + private final boolean learningPathCSS; private Map<String, AssessmentEntryStatus> identifierToStatus; private AssessmentService assessmentService; - public static final CPAssessmentProvider create(RepositoryEntry cpEntry, Identity identity) { - return new PersistingAssessmentProvider(cpEntry, identity); + public static final CPAssessmentProvider create(RepositoryEntry cpEntry, Identity identity, + boolean learningPathCSS) { + return new PersistingAssessmentProvider(cpEntry, identity, learningPathCSS); } - private PersistingAssessmentProvider(RepositoryEntry cpEntry, Identity identity) { + private PersistingAssessmentProvider(RepositoryEntry cpEntry, Identity identity, boolean learningPathCSS) { this.identity = identity; this.cpEntry = cpEntry; + this.learningPathCSS = learningPathCSS; this.assessmentService = CoreSpringFactory.getImpl(AssessmentService.class); this.identifierToStatus = assessmentService.loadAssessmentEntriesByAssessedIdentity(identity, cpEntry).stream() .filter(ae -> ae.getSubIdent() != null && ae.getAssessmentStatus() != null) .collect(Collectors.toMap(AssessmentEntry::getSubIdent, AssessmentEntry::getAssessmentStatus)); } + @Override + public boolean isLearningPathCSS() { + return learningPathCSS; + } + @Override public AssessmentEntryStatus onPageVisited(String itemIdentifier) { AssessmentEntry assessmentEntry = assessmentService.getOrCreateAssessmentEntry(identity, null, cpEntry, itemIdentifier, false, null); diff --git a/src/main/java/org/olat/modules/wiki/DryRunAssessmentProvider.java b/src/main/java/org/olat/modules/wiki/DryRunAssessmentProvider.java index 9f4c0b046319364dbb848c99a3e441b83f7f9876..e4fdcc66f712ad068d159383bda22259b3e21d15 100644 --- a/src/main/java/org/olat/modules/wiki/DryRunAssessmentProvider.java +++ b/src/main/java/org/olat/modules/wiki/DryRunAssessmentProvider.java @@ -39,6 +39,11 @@ public class DryRunAssessmentProvider implements WikiAssessmentProvider { // } + @Override + public boolean isLearningPathCSS() { + return false; + } + @Override public void setStatusDone(String pageId) { // diff --git a/src/main/java/org/olat/modules/wiki/PersistingAssessmentProvider.java b/src/main/java/org/olat/modules/wiki/PersistingAssessmentProvider.java index 8330bdef120a97690ac280fc7b1543da4f399f4f..d65456397984a69903072b9a4c98aff3e4302f6b 100644 --- a/src/main/java/org/olat/modules/wiki/PersistingAssessmentProvider.java +++ b/src/main/java/org/olat/modules/wiki/PersistingAssessmentProvider.java @@ -39,24 +39,31 @@ public class PersistingAssessmentProvider implements WikiAssessmentProvider { private final Identity identity; private final RepositoryEntry wikiEntry; + private final boolean learningPathCSS; private Map<String, AssessmentEntryStatus> pageIdToStatus; private AssessmentService assessmentService; - public static final WikiAssessmentProvider create(RepositoryEntry wikiEntry, Identity identity) { - return new PersistingAssessmentProvider(wikiEntry, identity); + public static final WikiAssessmentProvider create(RepositoryEntry wikiEntry, Identity identity, boolean learningPathCSS) { + return new PersistingAssessmentProvider(wikiEntry, identity, learningPathCSS); } - private PersistingAssessmentProvider(RepositoryEntry wikiEntry, Identity identity) { + private PersistingAssessmentProvider(RepositoryEntry wikiEntry, Identity identity, boolean learningPathCSS) { this.identity = identity; this.wikiEntry = wikiEntry; + this.learningPathCSS = learningPathCSS; this.assessmentService = CoreSpringFactory.getImpl(AssessmentService.class); this.pageIdToStatus = assessmentService.loadAssessmentEntriesByAssessedIdentity(identity, wikiEntry).stream() .filter(ae -> ae.getSubIdent() != null && ae.getAssessmentStatus() != null) .collect(Collectors.toMap(AssessmentEntry::getSubIdent, AssessmentEntry::getAssessmentStatus)); } + @Override + public boolean isLearningPathCSS() { + return learningPathCSS; + } + @Override public void setStatusDone(String pageId) { AssessmentEntry assessmentEntry = assessmentService.getOrCreateAssessmentEntry(identity, null, wikiEntry, pageId, false, null); diff --git a/src/main/java/org/olat/modules/wiki/WikiAssessmentProvider.java b/src/main/java/org/olat/modules/wiki/WikiAssessmentProvider.java index 0457946b328eb9670217fde263c104dd05111cd0..118559b62f14cd5b38193bdadc6e3d022bc9ad81 100644 --- a/src/main/java/org/olat/modules/wiki/WikiAssessmentProvider.java +++ b/src/main/java/org/olat/modules/wiki/WikiAssessmentProvider.java @@ -28,6 +28,8 @@ import org.olat.modules.assessment.model.AssessmentEntryStatus; * */ public interface WikiAssessmentProvider { + + boolean isLearningPathCSS(); void setStatusDone(String pageId); diff --git a/src/main/java/org/olat/modules/wiki/WikiMainController.java b/src/main/java/org/olat/modules/wiki/WikiMainController.java index 2c5d77acef5218dce87bff672ca28f7448abaeaf..0d63b7d72f93ecae2d8aafe9f6daff5e84984b1f 100644 --- a/src/main/java/org/olat/modules/wiki/WikiMainController.java +++ b/src/main/java/org/olat/modules/wiki/WikiMainController.java @@ -465,14 +465,19 @@ public class WikiMainController extends BasicController implements CloneableCont } private String getNodeCssClass(AssessmentEntryStatus status) { - if (AssessmentEntryStatus.done.equals(status)) { - return getNodeDoneCssClass(); + if (assessmentProvider.isLearningPathCSS()) { + if (AssessmentEntryStatus.done.equals(status)) { + return getNodeDoneCssClass(); + } + return "o_lp_ready o_lp_not_in_sequence o_lp_contains_no_sequence"; } - return "o_lp_ready o_lp_not_in_sequence o_lp_contains_no_sequence"; + return ""; } private String getNodeDoneCssClass() { - return "o_lp_done o_lp_not_in_sequence o_lp_contains_no_sequence"; + return assessmentProvider.isLearningPathCSS() + ? "o_lp_done o_lp_not_in_sequence o_lp_contains_no_sequence" + : ""; } @Override diff --git a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java index 902fea30e09bbfbfd91af7f1addb0ee399d1a4bd..ae5e4e4ce3992961f9fdc4f40e4fa2e06438f84b 100644 --- a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java +++ b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java @@ -230,7 +230,7 @@ public class ImsCPHandler extends FileHandler { CoreSpringFactory.getImpl(UserCourseInformationsManager.class) .updateUserCourseInformations(entry.getOlatResource(), uureq.getIdentity()); - CPAssessmentProvider cpAssessmentProvider = PersistingAssessmentProvider.create(re, uureq.getIdentity()); + CPAssessmentProvider cpAssessmentProvider = PersistingAssessmentProvider.create(re, uureq.getIdentity(), false); CPDisplayController cpCtr = new CPDisplayController(uureq, wwControl, vfsWrapper, true, true, activateFirstPage, true, deliveryOptions, initialUri, entry.getOlatResource(), "", false, cpAssessmentProvider); LayoutMain3ColsController ctr = new LayoutMain3ColsController(uureq, wwControl, cpCtr.getMenuComponent(), cpCtr.getInitialComponent(), vfsWrapper.getName()); diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java index 6a582080b0a99cc03d3a9222bc294a4181b87969..bb7e43e0a42af16c04ea8f90a895c11f095d794d 100644 --- a/src/main/java/org/olat/repository/handlers/WikiHandler.java +++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java @@ -223,7 +223,7 @@ public class WikiHandler implements RepositoryHandler { final ContextEntry ce = bc.popLauncherContextEntry(); SubscriptionContext subsContext = new SubscriptionContext(res, WikiManager.WIKI_RESOURCE_FOLDER_NAME); final WikiSecurityCallback callback = new WikiSecurityCallbackImpl(null, isOLatAdmin, isGuestOnly, false, isResourceOwner, subsContext); - WikiAssessmentProvider assessmentProvider = PersistingAssessmentProvider.create(re, ureq.getIdentity()); + WikiAssessmentProvider assessmentProvider = PersistingAssessmentProvider.create(re, ureq.getIdentity(), false); return new RepositoryEntryRuntimeController(ureq, wControl, re, reSecurity, new RuntimeControllerCreator() {