diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java index 614eaa51edb22dcb2c21b9bef32f135f2bfe5493..17671349d59ff5e21626b75464402c7709ad5b62 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java @@ -1421,37 +1421,38 @@ public class BaseFullWebappController extends BasicController implements DTabs, } private void processAssessmentModeNotificationEvent(AssessmentModeNotificationEvent event) { - if(getIdentity() == null) return; + if(getIdentity() == null || !event.isModeOf(lockMode, getIdentity())) { + return; + } String cmd = event.getCommand(); - if(AssessmentModeNotificationEvent.STOP_WARNING.equals(cmd)) { - lockResourceMessage(event.getAssessementMode()); - } else if(event.getAssessedIdentityKeys() != null && event.getAssessedIdentityKeys().contains(getIdentity().getKey())) { - switch(cmd) { - case AssessmentModeNotificationEvent.BEFORE: - if(asyncUnlockResource(event.getAssessementMode())) { - stickyMessageCmp.setDelegateComponent(null); - } - break; - case AssessmentModeNotificationEvent.LEADTIME: - if(asyncLockResource(event.getAssessementMode())) { - stickyMessageCmp.setDelegateComponent(null); - } - break; - case AssessmentModeNotificationEvent.START_ASSESSMENT: - asyncLockResource(event.getAssessementMode()); - break; - case AssessmentModeNotificationEvent.STOP_ASSESSMENT: - if(asyncLockResource(event.getAssessementMode())) { - stickyMessageCmp.setDelegateComponent(null); - } - break; - case AssessmentModeNotificationEvent.END: - if(asyncUnlockResource(event.getAssessementMode())) { - stickyMessageCmp.setDelegateComponent(null); - } - break; - } + switch(cmd) { + case AssessmentModeNotificationEvent.STOP_WARNING: + lockResourceMessage(event.getAssessementMode()); + break; + case AssessmentModeNotificationEvent.BEFORE: + if(asyncUnlockResource(event.getAssessementMode())) { + stickyMessageCmp.setDelegateComponent(null); + } + break; + case AssessmentModeNotificationEvent.LEADTIME: + if(asyncLockResource(event.getAssessementMode())) { + stickyMessageCmp.setDelegateComponent(null); + } + break; + case AssessmentModeNotificationEvent.START_ASSESSMENT: + asyncLockResource(event.getAssessementMode()); + break; + case AssessmentModeNotificationEvent.STOP_ASSESSMENT: + if(asyncLockResource(event.getAssessementMode())) { + stickyMessageCmp.setDelegateComponent(null); + } + break; + case AssessmentModeNotificationEvent.END: + if(asyncUnlockResource(event.getAssessementMode())) { + stickyMessageCmp.setDelegateComponent(null); + } + break; } } diff --git a/src/main/java/org/olat/course/assessment/AssessmentModeNotificationEvent.java b/src/main/java/org/olat/course/assessment/AssessmentModeNotificationEvent.java index 3b81996771c698b3eca68e1dd8b44861141946e8..ef91567d061ef99bdb9e9c52171de9b4f2379c2c 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentModeNotificationEvent.java +++ b/src/main/java/org/olat/course/assessment/AssessmentModeNotificationEvent.java @@ -21,6 +21,7 @@ package org.olat.course.assessment; import java.util.Set; +import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.util.event.MultiUserEvent; import org.olat.core.util.resource.OresHelper; @@ -61,4 +62,11 @@ public class AssessmentModeNotificationEvent extends MultiUserEvent { public Set<Long> getAssessedIdentityKeys() { return assessedIdentityKeys; } + + public boolean isModeOf(TransientAssessmentMode assessmentMode, Identity identity) { + if(assessmentMode != null && assessmentMode.getModeKey().equals(mode.getModeKey())) { + return true; + } + return (assessedIdentityKeys != null && identity != null && assessedIdentityKeys.contains(identity.getKey())); + } } diff --git a/src/main/java/org/olat/modules/iq/IQDisplayController.java b/src/main/java/org/olat/modules/iq/IQDisplayController.java index 8ced7a98b2491415979a6d64436e8eaa7d5de02d..19647c04b83f6e79526acfcabe3b006e6c71c894 100644 --- a/src/main/java/org/olat/modules/iq/IQDisplayController.java +++ b/src/main/java/org/olat/modules/iq/IQDisplayController.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Locale; import java.util.Set; +import org.apache.logging.log4j.Logger; import org.dom4j.Document; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; @@ -52,7 +53,6 @@ import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; import org.olat.core.logging.AssertException; -import org.apache.logging.log4j.Logger; import org.olat.core.logging.Tracing; import org.olat.core.logging.activity.LearningResourceLoggingAction; import org.olat.core.logging.activity.StringResourceableType; @@ -416,7 +416,10 @@ public class IQDisplayController extends DefaultController implements GenericEve if(event.getAssessementMode().getResource().getResourceableId().equals(courseResId)) { String cmd = event.getCommand(); if(cmd.equals(AssessmentModeNotificationEvent.STOP_ASSESSMENT) || cmd.equals(AssessmentModeNotificationEvent.END)) { - stoppedFlag = true; + // Check if event relevant for current assessed identity + if (event.getAssessedIdentityKeys() != null && event.getAssessedIdentityKeys().contains(assessedIdentity.getKey())) { + stoppedFlag = true; + } } } }