diff --git a/src/main/java/org/olat/course/condition/interpreter/IsAssessmentModeFunction.java b/src/main/java/org/olat/course/condition/interpreter/IsAssessmentModeFunction.java index 1635bb3ca84c7e7f47db6925640e47033676c220..19bfe600f2af648dd3c2350402b2cb04bded42b9 100644 --- a/src/main/java/org/olat/course/condition/interpreter/IsAssessmentModeFunction.java +++ b/src/main/java/org/olat/course/condition/interpreter/IsAssessmentModeFunction.java @@ -22,6 +22,8 @@ package org.olat.course.condition.interpreter; import java.util.Date; import org.olat.core.CoreSpringFactory; +import org.olat.core.gui.control.ChiefController; +import org.olat.core.id.OLATResourceable; import org.olat.course.assessment.AssessmentModeManager; import org.olat.course.editor.CourseEditorEnv; import org.olat.course.run.userview.UserCourseEnvironment; @@ -57,11 +59,25 @@ public class IsAssessmentModeFunction extends AbstractFunction { // return a valid value to continue with condition evaluation test return defaultValue(); } - - AssessmentModeManager assessmentModeMgr = CoreSpringFactory.getImpl(AssessmentModeManager.class); - RepositoryEntry entry = getUserCourseEnv().getCourseEnvironment().getCourseGroupManager().getCourseEntry(); - boolean inAssessment = assessmentModeMgr.isInAssessmentMode(entry, new Date()); - return inAssessment ? ConditionInterpreter.INT_TRUE: ConditionInterpreter.INT_FALSE; + + ChiefController chiefController = getUserCourseEnv().getWindowControl().getWindowBackOffice().getChiefController(); + if(chiefController == null) { + return ConditionInterpreter.INT_FALSE; + } + OLATResourceable lockedResource = chiefController.getLockResource(); + if(lockedResource == null) { + return ConditionInterpreter.INT_FALSE; + } + + Long resourceableId = getUserCourseEnv().getCourseEnvironment().getCourseResourceableId(); + if(lockedResource.getResourceableId().equals(resourceableId)) { + RepositoryEntry entry = getUserCourseEnv().getCourseEnvironment().getCourseGroupManager().getCourseEntry(); + AssessmentModeManager assessmentModeMgr = CoreSpringFactory.getImpl(AssessmentModeManager.class); + boolean inAssessment = assessmentModeMgr.isInAssessmentMode(entry, new Date()); + return inAssessment ? ConditionInterpreter.INT_TRUE: ConditionInterpreter.INT_FALSE; + } else { + return ConditionInterpreter.INT_FALSE; + } } @Override diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java index 6a007ff9076c8e34b8d85d1aa36074e3d65441b7..137b86635d91ba3aeaf79f662c1aaece2ffead91 100644 --- a/src/main/java/org/olat/course/editor/EditorMainController.java +++ b/src/main/java/org/olat/course/editor/EditorMainController.java @@ -270,7 +270,7 @@ public class EditorMainController extends MainLayoutBasicController implements G CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager(); repoEntry = cgm.getCourseEntry(); CourseEditorEnv cev = new CourseEditorEnvImpl(cetm, cgm, ureq.getLocale()); - euce = new EditorUserCourseEnvironmentImpl(cev); + euce = new EditorUserCourseEnvironmentImpl(cev, getWindowControl()); euce.getCourseEditorEnv().setCurrentCourseNodeId(null); menuTree.setTreeModel(cetm); diff --git a/src/main/java/org/olat/course/editor/EditorUserCourseEnvironmentImpl.java b/src/main/java/org/olat/course/editor/EditorUserCourseEnvironmentImpl.java index 63b8a9d96b2fbe1c1f40f0cc14fe2a2014fae8fd..08ac3e38ba5adb8f2edbf068a5728342ace075ab 100644 --- a/src/main/java/org/olat/course/editor/EditorUserCourseEnvironmentImpl.java +++ b/src/main/java/org/olat/course/editor/EditorUserCourseEnvironmentImpl.java @@ -25,6 +25,7 @@ package org.olat.course.editor; +import org.olat.core.gui.control.WindowControl; import org.olat.core.id.IdentityEnvironment; import org.olat.core.logging.AssertException; import org.olat.course.condition.interpreter.ConditionInterpreter; @@ -51,9 +52,11 @@ public class EditorUserCourseEnvironmentImpl implements UserCourseEnvironment { private ConditionInterpreter ci; private ScoreAccounting sa; private RepositoryEntryLifecycle lifecycle; + private final WindowControl windowControl; - EditorUserCourseEnvironmentImpl(CourseEditorEnv courseEditorEnv){ + EditorUserCourseEnvironmentImpl(CourseEditorEnv courseEditorEnv, WindowControl windowControl) { this.courseEditorEnv = courseEditorEnv; + this.windowControl = windowControl; ci = new ConditionInterpreter(this); courseEditorEnv.setConditionInterpreter(ci); sa = new ScoreAccounting(this); @@ -73,6 +76,11 @@ public class EditorUserCourseEnvironmentImpl implements UserCourseEnvironment { return courseEditorEnv; } + @Override + public WindowControl getWindowControl() { + return windowControl; + } + /** * @see org.olat.course.run.userview.UserCourseEnvironment#getConditionInterpreter() */ diff --git a/src/main/java/org/olat/course/editor/PublishProcess.java b/src/main/java/org/olat/course/editor/PublishProcess.java index 075b5e4534f9060d676fe7dada1ca369be3b5154..4297864afcdaf871f98a06ad78232da598c61ed9 100644 --- a/src/main/java/org/olat/course/editor/PublishProcess.java +++ b/src/main/java/org/olat/course/editor/PublishProcess.java @@ -264,7 +264,7 @@ public class PublishProcess { CourseEditorEnv tmpCEV = new CourseEditorEnvImpl(cloneCETM, course.getCourseEnvironment().getCourseGroupManager(), locale); // the resulting object is not needed, but constructor makes // initializations within tmpCEV!! thus important step. - new EditorUserCourseEnvironmentImpl(tmpCEV); + new EditorUserCourseEnvironmentImpl(tmpCEV, null); // tmpCEV.setCurrentCourseNodeId(cloneCETM.getRootNode().getIdent()); tmpCEV.validateCourse(); diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java index 7f1b9f3c617835f948cf1446265b28deafb2b9b6..6da5963021f88155db07b67c386660301d8632cf 100644 --- a/src/main/java/org/olat/course/run/RunMainController.java +++ b/src/main/java/org/olat/course/run/RunMainController.java @@ -296,7 +296,8 @@ public class RunMainController extends MainLayoutBasicController implements Gene } else { waitingLists = Collections.emptyList(); } - return new UserCourseEnvironmentImpl(ureq.getUserSession().getIdentityEnvironment(), course.getCourseEnvironment(), + + return new UserCourseEnvironmentImpl(ureq.getUserSession().getIdentityEnvironment(), course.getCourseEnvironment(), getWindowControl(), coachedGroups, participatedGroups, waitingLists, reSecurity.isCourseCoach() || reSecurity.isGroupCoach(), reSecurity.isEntryAdmin(), @@ -502,7 +503,7 @@ public class RunMainController extends MainLayoutBasicController implements Gene // rebuild up the running structure for this user, after publish; course = CourseFactory.loadCourse(course.getResourceableId()); - uce = new UserCourseEnvironmentImpl(ureq.getUserSession().getIdentityEnvironment(), course.getCourseEnvironment(), + uce = new UserCourseEnvironmentImpl(ureq.getUserSession().getIdentityEnvironment(), course.getCourseEnvironment(), getWindowControl(), uce.getCoachedGroups(), uce.getParticipatingGroups(), uce.getWaitingLists(), null, null, null); // build score now diff --git a/src/main/java/org/olat/course/run/userview/UserCourseEnvironment.java b/src/main/java/org/olat/course/run/userview/UserCourseEnvironment.java index d876e8fb2a73365def38b5c6d31c679ae1a60994..43c561f927ae8faee21cf031079c644b882b0eb6 100644 --- a/src/main/java/org/olat/course/run/userview/UserCourseEnvironment.java +++ b/src/main/java/org/olat/course/run/userview/UserCourseEnvironment.java @@ -25,6 +25,7 @@ package org.olat.course.run.userview; +import org.olat.core.gui.control.WindowControl; import org.olat.core.id.IdentityEnvironment; import org.olat.course.condition.interpreter.ConditionInterpreter; import org.olat.course.editor.CourseEditorEnv; @@ -51,6 +52,13 @@ public interface UserCourseEnvironment { public IdentityEnvironment getIdentityEnvironment(); + /** + * Return a value only if the user has opened the course in + * the GUI. Return null otherwise. + * @return + */ + public WindowControl getWindowControl(); + public ScoreAccounting getScoreAccounting(); diff --git a/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java b/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java index 9b142f45c2ce3ef281870bf00ea5461189949ac7..bb383eca65f83bf664f541318476b54bacfe0721 100644 --- a/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java +++ b/src/main/java/org/olat/course/run/userview/UserCourseEnvironmentImpl.java @@ -32,6 +32,7 @@ import java.util.List; import org.olat.basesecurity.Group; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.PersistenceHelper; +import org.olat.core.gui.control.WindowControl; import org.olat.core.id.IdentityEnvironment; import org.olat.course.assessment.EfficiencyStatementManager; import org.olat.course.certificate.CertificatesManager; @@ -52,8 +53,8 @@ import org.olat.resource.OLATResource; * */ public class UserCourseEnvironmentImpl implements UserCourseEnvironment { - private IdentityEnvironment identityEnvironment; - private CourseEnvironment courseEnvironment; + private final IdentityEnvironment identityEnvironment; + private final CourseEnvironment courseEnvironment; private ConditionInterpreter conditionInterpreter; private ScoreAccounting scoreAccounting; private RepositoryEntryLifecycle lifecycle; @@ -62,6 +63,8 @@ public class UserCourseEnvironmentImpl implements UserCourseEnvironment { private List<BusinessGroup> participatingGroups; private List<BusinessGroup> waitingLists; + private final WindowControl windowControl; + private Boolean coach; private Boolean admin; private Boolean participant; @@ -69,10 +72,10 @@ public class UserCourseEnvironmentImpl implements UserCourseEnvironment { private Boolean certification; public UserCourseEnvironmentImpl(IdentityEnvironment identityEnvironment, CourseEnvironment courseEnvironment) { - this(identityEnvironment, courseEnvironment, null, null, null, null, null, null); + this(identityEnvironment, courseEnvironment, null, null, null, null, null, null, null); } - public UserCourseEnvironmentImpl(IdentityEnvironment identityEnvironment, CourseEnvironment courseEnvironment, + public UserCourseEnvironmentImpl(IdentityEnvironment identityEnvironment, CourseEnvironment courseEnvironment, WindowControl windowControl, List<BusinessGroup> coachedGroups, List<BusinessGroup> participatingGroups, List<BusinessGroup> waitingLists, Boolean coach, Boolean admin, Boolean participant) { this.courseEnvironment = courseEnvironment; @@ -85,6 +88,7 @@ public class UserCourseEnvironmentImpl implements UserCourseEnvironment { this.coach = coach; this.admin = admin; this.participant = participant; + this.windowControl = windowControl; } /** @@ -100,6 +104,11 @@ public class UserCourseEnvironmentImpl implements UserCourseEnvironment { return identityEnvironment; } + @Override + public WindowControl getWindowControl() { + return windowControl; + } + @Override public ConditionInterpreter getConditionInterpreter() { return conditionInterpreter;