From b99aba0bb9ba3226616258d648bb938f75af608a Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 31 Mar 2017 10:19:49 +0200 Subject: [PATCH] OO-2667: hardened the code in score accounting --- .../course/run/scoring/ScoreAccounting.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java index 70ab31756ba..30bbdea5e06 100644 --- a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java +++ b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java @@ -31,6 +31,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.hibernate.LazyInitializationException; +import org.olat.core.CoreSpringFactory; import org.olat.core.id.Identity; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; @@ -46,6 +48,8 @@ import org.olat.course.nodes.PersistentAssessableCourseNode; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.modules.assessment.AssessmentEntry; import org.olat.modules.assessment.model.AssessmentEntryStatus; +import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryService; import org.olat.repository.model.RepositoryEntryLifecycle; /** @@ -205,8 +209,7 @@ public class ScoreAccounting { if(failedType == null || failedType == FailedEvaluationType.failedAsNotPassed) { passed = Boolean.FALSE; } else if(failedType == FailedEvaluationType.failedAsNotPassedAfterEndDate) { - CourseGroupManager cgm = userCourseEnvironment.getCourseEnvironment().getCourseGroupManager(); - RepositoryEntryLifecycle lifecycle = cgm.getCourseEntry().getLifecycle(); + RepositoryEntryLifecycle lifecycle = getRepositoryEntryLifecycle(); if(lifecycle != null && lifecycle.getValidTo() != null && lifecycle.getValidTo().compareTo(new Date()) < 0) { passed = Boolean.FALSE; } @@ -239,6 +242,23 @@ public class ScoreAccounting { return se; } + private RepositoryEntryLifecycle getRepositoryEntryLifecycle() { + CourseGroupManager cgm = userCourseEnvironment.getCourseEnvironment().getCourseGroupManager(); + try { + RepositoryEntryLifecycle lifecycle = cgm.getCourseEntry().getLifecycle(); + if(lifecycle != null) { + lifecycle.getValidTo();// + } + return lifecycle; + } catch (LazyInitializationException e) { + //OO-2667: only seen in 1 instance but as it's a critical place, secure the system + RepositoryEntry reloadedEntry = CoreSpringFactory.getImpl(RepositoryService.class) + .loadByKey(cgm.getCourseEntry().getKey()); + userCourseEnvironment.getCourseEnvironment().updateCourseEntry(reloadedEntry); + return reloadedEntry.getLifecycle(); + } + } + private boolean same(AssessmentEvaluation se, AssessmentEntry entry) { boolean same = true; -- GitLab