From 7fe9ad1492d668c145e38be1df7a6c3b6e786c1e Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Fri, 25 Oct 2019 15:08:28 +0200
Subject: [PATCH] OO-4207: Respect user visibility when get the fully assessed
 from passed

---
 .../assessment/manager/CourseAssessmentManagerImpl.java   | 2 +-
 .../course/condition/ConditionNodeAccessProvider.java     | 2 +-
 .../org/olat/course/learningpath/LearningPathConfigs.java | 2 +-
 .../manager/LearningPathNodeAccessProvider.java           | 5 +++--
 .../learningpath/model/ModuleLearningPathConfigs.java     | 8 ++++----
 .../model/UnsupportedLearningPathConfigs.java             | 2 +-
 .../org/olat/course/nodeaccess/NodeAccessProvider.java    | 2 +-
 .../org/olat/course/nodeaccess/NodeAccessService.java     | 4 +++-
 .../course/nodeaccess/manager/NodeAccessServiceImpl.java  | 5 +++--
 src/main/java/org/olat/course/nodes/ScormCourseNode.java  | 2 +-
 .../course/nodes/st/assessment/STLearningPathConfigs.java | 2 +-
 .../manager/LearningPathNodeAccessProviderTest.java       | 4 ++--
 12 files changed, 22 insertions(+), 18 deletions(-)

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 12c8a81160a..7b5f7735d7e 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 e3223daba4c..7d38882dcb4 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 3601181bf2d..5c74add4f22 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 015d4a62cad..8c1955b7106 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 0c9c1562b05..bb0c94d8224 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 9611843403c..5c5ee3b3ad9 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 14eb08f05d2..50ffc57e96b 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 3d2e21423f0..5e8117e7e24 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 c5d6e3b9b6a..99b04341fef 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 5ff52f1b040..89c3db9a872 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 d725d8a87a3..f8e3e921869 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 e38ce95a5da..7f7c72ee62b 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
-- 
GitLab