diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java index 12c8a81160a367f47bd4ed7cb33932c1a5bc75f8..7b5f7735d7ea66dd50690c8d89c7249acc3302bc 100644 --- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java @@ -530,7 +530,7 @@ public class CourseAssessmentManagerImpl implements AssessmentManager { assessmentEntry = assessmentService.updateAssessmentEntry(assessmentEntry); DBFactory.getInstance().commit(); - nodeAccessService.onPassedUpdated(courseNode, userCourseEnv, passed, Role.auto); + nodeAccessService.onPassedUpdated(courseNode, userCourseEnv, passed, assessmentEntry.getUserVisibility(), by); nodeAccessService.onStatusUpdated(courseNode, userCourseEnv, assessmentEntry.getAssessmentStatus(), by); DBFactory.getInstance().commit(); diff --git a/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java b/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java index e3223daba4c27e92a8482b6b133ee5eedf7aa79f..7d38882dcb4c36066363fb937c7e4dcfcb86bad3 100644 --- a/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java +++ b/src/main/java/org/olat/course/condition/ConditionNodeAccessProvider.java @@ -105,7 +105,7 @@ public class ConditionNodeAccessProvider implements NodeAccessProvider { } @Override - public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Role by) { + public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Boolean userVisibility, Role by) { // nothing to do } diff --git a/src/main/java/org/olat/course/learningpath/LearningPathConfigs.java b/src/main/java/org/olat/course/learningpath/LearningPathConfigs.java index 3601181bf2d4ed69d12cb0cf0b4449b68e5ec921..5c74add4f22bb7976fa6e35e39554624217b63a3 100644 --- a/src/main/java/org/olat/course/learningpath/LearningPathConfigs.java +++ b/src/main/java/org/olat/course/learningpath/LearningPathConfigs.java @@ -40,7 +40,7 @@ public interface LearningPathConfigs { public FullyAssessedResult isFullyAssessedOnConfirmation(); - public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed); + public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed, Boolean userVisibility); public FullyAssessedResult isFullyAssessedOnStatus(AssessmentEntryStatus status); 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 015d4a62cadf0a5e57e78faf1aa9b0e0f993cabf..8c1955b7106cf94e624180eeb236e7f1e82237f1 100644 --- a/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java +++ b/src/main/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProvider.java @@ -120,8 +120,9 @@ public class LearningPathNodeAccessProvider implements NodeAccessProvider { } @Override - public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Role by) { - FullyAssessedResult result = getConfigs(courseNode).isFullyAssessedOnPassed(passed); + public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, + Boolean userVisibility, Role by) { + FullyAssessedResult result = getConfigs(courseNode).isFullyAssessedOnPassed(passed, userVisibility); updateFullyAssessed(courseNode, userCourseEnv, by, result); } diff --git a/src/main/java/org/olat/course/learningpath/model/ModuleLearningPathConfigs.java b/src/main/java/org/olat/course/learningpath/model/ModuleLearningPathConfigs.java index 0c9c1562b056153a8bb37fbcf33b8fc8ede176b0..bb0c94d8224618353c3d63b7e53b67135d1016cf 100644 --- a/src/main/java/org/olat/course/learningpath/model/ModuleLearningPathConfigs.java +++ b/src/main/java/org/olat/course/learningpath/model/ModuleLearningPathConfigs.java @@ -98,10 +98,10 @@ public class ModuleLearningPathConfigs implements LearningPathConfigs { } @Override - public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed) { + public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed, Boolean userVisibility) { String doneTriggerName = getDoneTriggerName(); if (CONFIG_VALUE_TRIGGER_PASSED.equals(doneTriggerName)) { - boolean fullyAssessed = Boolean.TRUE.equals(passed); + boolean fullyAssessed = Boolean.TRUE.equals(passed) && Boolean.TRUE.equals(userVisibility); return LearningPathConfigs.fullyAssessed(true, fullyAssessed, doneOnFullyAssessed); } return LearningPathConfigs.notFullyAssessed(); @@ -115,8 +115,8 @@ public class ModuleLearningPathConfigs implements LearningPathConfigs { public FullyAssessedResult isFullyAssessedOnStatus(AssessmentEntryStatus status) { String doneTriggerName = getDoneTriggerName(); if (CONFIG_VALUE_TRIGGER_STATUS_DONE.equals(doneTriggerName)) { - boolean fulylAssessed = AssessmentEntryStatus.done.equals(status); - return LearningPathConfigs.fullyAssessed(true, fulylAssessed, false); + boolean fullyAssessed = AssessmentEntryStatus.done.equals(status); + return LearningPathConfigs.fullyAssessed(true, fullyAssessed, false); } return LearningPathConfigs.notFullyAssessed(); } diff --git a/src/main/java/org/olat/course/learningpath/model/UnsupportedLearningPathConfigs.java b/src/main/java/org/olat/course/learningpath/model/UnsupportedLearningPathConfigs.java index 9611843403c603d3d31b87282821d215429b8d6f..5c5ee3b3ad96ce9296aa4a7a59b7e57e881651ad 100644 --- a/src/main/java/org/olat/course/learningpath/model/UnsupportedLearningPathConfigs.java +++ b/src/main/java/org/olat/course/learningpath/model/UnsupportedLearningPathConfigs.java @@ -57,7 +57,7 @@ public class UnsupportedLearningPathConfigs implements LearningPathConfigs { } @Override - public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed) { + public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed, Boolean userVisibility) { return LearningPathConfigs.notFullyAssessed(); } diff --git a/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java b/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java index 14eb08f05d25f94819f595b5700f6c7fef2c04a7..50ffc57e96b084121150e511e8a49df66773fb06 100644 --- a/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java +++ b/src/main/java/org/olat/course/nodeaccess/NodeAccessProvider.java @@ -50,7 +50,7 @@ public interface NodeAccessProvider extends NodeAccessProviderIdentifier { public void onAssessmentConfirmed(CourseNode courseNode, UserCourseEnvironment userCourseEnv); - public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Role by); + public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Boolean userVisibility, Role by); public void onStatusUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, AssessmentEntryStatus status, Role by); diff --git a/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java b/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java index 3d2e21423f07d4164e4cd026970f6012812089af..5e8117e7e24e5531e1902d46be3ed3c37bb53b26 100644 --- a/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java +++ b/src/main/java/org/olat/course/nodeaccess/NodeAccessService.java @@ -91,9 +91,11 @@ public interface NodeAccessService { * @param courseNode * @param userCourseEnv * @param passed + * @param userVisibility * @param by */ - public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Role by); + public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, + Boolean userVisibility, Role by); /** * Hook after the completion and the run status is updated. 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 c5d6e3b9b6a01a33720bfd4eae6f652c4d8abf74..99b04341fefa870273aadf190dac30befa0f327d 100644 --- a/src/main/java/org/olat/course/nodeaccess/manager/NodeAccessServiceImpl.java +++ b/src/main/java/org/olat/course/nodeaccess/manager/NodeAccessServiceImpl.java @@ -104,9 +104,10 @@ public class NodeAccessServiceImpl implements NodeAccessService, NodeVisitedList } @Override - public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, Role by) { + public void onPassedUpdated(CourseNode courseNode, UserCourseEnvironment userCourseEnv, Boolean passed, + Boolean userVisibility, Role by) { NodeAccessType type = NodeAccessType.of(userCourseEnv); - getNodeAccessProvider(type).onPassedUpdated(courseNode, userCourseEnv, passed, by); + getNodeAccessProvider(type).onPassedUpdated(courseNode, userCourseEnv, passed, userVisibility, by); } @Override diff --git a/src/main/java/org/olat/course/nodes/ScormCourseNode.java b/src/main/java/org/olat/course/nodes/ScormCourseNode.java index 5ff52f1b040b545a826da376513ae50aadd14770..89c3db9a87269fc499f9238aefc3b0d159cc5abc 100644 --- a/src/main/java/org/olat/course/nodes/ScormCourseNode.java +++ b/src/main/java/org/olat/course/nodes/ScormCourseNode.java @@ -178,7 +178,7 @@ public class ScormCourseNode extends AbstractAccessableCourseNode { boolean hasPassed = new ScormAssessmentConfig(getModuleConfiguration()).hasPassed(); boolean isPassedTrigger = CoreSpringFactory.getImpl(ScormLearningPathNodeHandler.class) .getConfigs(this) - .isFullyAssessedOnPassed(null) + .isFullyAssessedOnPassed(null, null) .isFullyAssessed(); return isPassedTrigger && !hasPassed; } diff --git a/src/main/java/org/olat/course/nodes/st/assessment/STLearningPathConfigs.java b/src/main/java/org/olat/course/nodes/st/assessment/STLearningPathConfigs.java index d725d8a87a39c19d25892f171f53a8835de62e67..f8e3e9218699835f07d7ecae5abd276f9d51a62f 100644 --- a/src/main/java/org/olat/course/nodes/st/assessment/STLearningPathConfigs.java +++ b/src/main/java/org/olat/course/nodes/st/assessment/STLearningPathConfigs.java @@ -57,7 +57,7 @@ public class STLearningPathConfigs implements LearningPathConfigs { } @Override - public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed) { + public FullyAssessedResult isFullyAssessedOnPassed(Boolean passed, Boolean userVisibility) { return LearningPathConfigs.notFullyAssessed(); } diff --git a/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java b/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java index e38ce95a5da2e660ff6415a772100cd0cb62c5aa..7f7c72ee62b9da34afa253976fcd3e2e379a987a 100644 --- a/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java +++ b/src/test/java/org/olat/course/learningpath/manager/LearningPathNodeAccessProviderTest.java @@ -234,9 +234,9 @@ public class LearningPathNodeAccessProviderTest { @Test public void shouldInvokePassedConfig() { - sut.onPassedUpdated(courseNodeMock, coachCourseEnv, null, null); + sut.onPassedUpdated(courseNodeMock, coachCourseEnv, null, null, null); - verify(configMock).isFullyAssessedOnPassed(any()); + verify(configMock).isFullyAssessedOnPassed(any(), null); } @Test