diff --git a/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java b/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java index 86d2135efdfec82383044fb491daeb1df58262ad..652553ffcd23cdd2e75d72ab72769ad27396605c 100644 --- a/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java +++ b/src/main/java/org/olat/course/nodes/st/assessment/STRootPassedEvaluator.java @@ -21,6 +21,10 @@ package org.olat.course.nodes.st.assessment; import java.util.Date; +import org.apache.logging.log4j.Logger; +import org.hibernate.LazyInitializationException; +import org.olat.core.CoreSpringFactory; +import org.olat.core.logging.Tracing; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.STCourseNode; import org.olat.course.nodes.st.assessment.PassCounter.Counts; @@ -28,7 +32,10 @@ import org.olat.course.run.scoring.AssessmentEvaluation; import org.olat.course.run.scoring.RootPassedEvaluator; import org.olat.course.run.scoring.ScoreAccounting; import org.olat.modules.ModuleConfiguration; +import org.olat.modules.card2brain.manager.Card2BrainManagerImpl; import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryService; +import org.olat.repository.model.RepositoryEntryLifecycle; /** * @@ -37,6 +44,8 @@ import org.olat.repository.RepositoryEntry; * */ public class STRootPassedEvaluator implements RootPassedEvaluator { + + private static final Logger log = Tracing.createLoggerFor(Card2BrainManagerImpl.class); private final PassCounter passCounter; @@ -111,8 +120,9 @@ public class STRootPassedEvaluator implements RootPassedEvaluator { } // Failed if course end date is over - if (courseEntry != null && courseEntry.getLifecycle() != null && courseEntry.getLifecycle().getValidTo() != null) { - Date validTo = courseEntry.getLifecycle().getValidTo(); + RepositoryEntryLifecycle lifecycle = getLifecycle(courseEntry); + if (lifecycle != null && lifecycle.getValidTo() != null) { + Date validTo = lifecycle.getValidTo(); if (validTo.before(new Date())) { return Boolean.FALSE; } @@ -139,5 +149,23 @@ public class STRootPassedEvaluator implements RootPassedEvaluator { } return active; } + + private RepositoryEntryLifecycle getLifecycle(RepositoryEntry courseEntry) { + RepositoryEntryLifecycle lifecycle = null; + + if (courseEntry != null) { + try { + lifecycle = courseEntry.getLifecycle(); + } catch (LazyInitializationException lie) { + RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); + RepositoryEntry repositoryEntry = repositoryService.loadByKey(courseEntry.getKey()); + lifecycle = repositoryEntry.getLifecycle(); + } catch (Exception e) { + log.error("", e); + } + } + + return lifecycle; + } }