diff --git a/src/main/java/org/olat/course/assessment/AssessmentManager.java b/src/main/java/org/olat/course/assessment/AssessmentManager.java index e8bb685131c5396ad38e03324337344fcfe92b09..37be8fc98a2c5abe51606fd418b3e87ac586686e 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentManager.java +++ b/src/main/java/org/olat/course/assessment/AssessmentManager.java @@ -207,7 +207,7 @@ public interface AssessmentManager { public List<AssessmentEntry> getAssessmentEntries(CourseNode courseNode); - public List<AssessmentEntry> getAssessmentEntriesWithStatus(CourseNode courseNode, AssessmentEntryStatus status); + public List<AssessmentEntry> getAssessmentEntriesWithStatus(CourseNode courseNode, AssessmentEntryStatus status, boolean excludeZeroScore); public List<AssessmentEntry> getAssessmentEntries(BusinessGroup group, CourseNode courseNode); 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 a59ec52b8988e7441f4918111fb3d2983ce689b5..aa1e1d9445a9e80f3265066c51c4ec04cc22a83c 100644 --- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java +++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java @@ -96,8 +96,8 @@ public class CourseAssessmentManagerImpl implements AssessmentManager { } @Override - public List<AssessmentEntry> getAssessmentEntriesWithStatus(CourseNode courseNode, AssessmentEntryStatus status) { - return assessmentService.loadAssessmentEntriesBySubIdentWithStatus(cgm.getCourseEntry(), courseNode.getIdent(), status); + public List<AssessmentEntry> getAssessmentEntriesWithStatus(CourseNode courseNode, AssessmentEntryStatus status, boolean excludeZeroScore) { + return assessmentService.loadAssessmentEntriesBySubIdentWithStatus(cgm.getCourseEntry(), courseNode.getIdent(), status, excludeZeroScore); } @Override diff --git a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java index 60b8b3b4496971efebfb7aa02eb16571c5fd30fc..5e790b6963e5bece6ecdde48a102ced589e2db0a 100644 --- a/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java +++ b/src/main/java/org/olat/course/highscore/manager/HighScoreManager.java @@ -74,21 +74,22 @@ public class HighScoreManager { // int rank = 1; double[] allScores = new double[allMembers.size()]; for (int j = 0; j < allMembers.size(); j++) { - if (allMembers.get(j).getScore() < buffer){ + HighScoreTableEntry member = allMembers.get(j); + if (member.getScore() < buffer){ index++; // rank = j + 1; } - //first three position are put in separate lists, - if (index < 3){ - allPodium.get(index).add(allMembers.get(j)); + //first three position are put in separate lists, exclude zero scorers + if (index < 3 && member.getScore() > 0) { + allPodium.get(index).add(member); } // finding position rank for own id - if (allMembers.get(j).getIdentity().equals(ownIdentity)){ + if (member.getIdentity().equals(ownIdentity)){ ownIdIndices.add(j); } //setting rank for each member - allMembers.get(j).setRank(index + 1); - buffer = allMembers.get(j).getScore(); + member.setRank(index + 1); + buffer = member.getScore(); //adding scores for histogram allScores[j] = buffer; } diff --git a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java index 5a38db2ad820e276f092323875c3be72c5cae25c..fd855171081a490f2a14797c965fc58d16b45275 100644 --- a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java +++ b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java @@ -55,6 +55,7 @@ import org.olat.course.highscore.manager.HighScoreManager; import org.olat.course.highscore.model.HighScoreRankingResults; import org.olat.course.nodes.CourseNode; import org.olat.course.nodes.MSCourseNode; +import org.olat.course.nodes.STCourseNode; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.modules.ModuleConfiguration; import org.olat.modules.assessment.AssessmentEntry; @@ -74,7 +75,7 @@ public class HighScoreRunController extends FormBasicController{ private List<Integer> ownIdIndices; private int tableSize; private Identity ownIdentity; - private boolean viewTable, viewPosition, viewHistogram, viewPodium, viewHighscore, anonymous; + private boolean viewTable, viewPosition, viewHistogram, viewPodium, viewHighscore, anonymous, isSTCourseNode; private double[] allScores; private Link[] links = new Link[3]; private CloseableCalloutWindowController calloutCtr; @@ -108,6 +109,7 @@ public class HighScoreRunController extends FormBasicController{ CourseNode courseNode) { super(ureq, wControl, "highscore"); this.nodeID = courseNode.getIdent(); + this.isSTCourseNode = courseNode instanceof STCourseNode; setupContent(ureq, userCourseEnv, courseNode); } @@ -151,16 +153,8 @@ public class HighScoreRunController extends FormBasicController{ return; } - List<AssessmentEntry> assessEntries; - if ("iqtest".equals(courseNode.getType())) { - assessEntries = assessmentManager.getAssessmentEntriesWithStatus(courseNode, null); - } else { - assessEntries = assessmentManager.getAssessmentEntries(courseNode); - } - // do not take coach or admin results into account - if (assessEntries != null && adminORcoach) { - assessEntries.remove(ownEntry); - } + List<AssessmentEntry> assessEntries = assessmentManager.getAssessmentEntriesWithStatus(courseNode, null, isSTCourseNode); + // display only if has content if (assessEntries == null || assessEntries.isEmpty()) { viewHighscore = false; diff --git a/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java b/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java index bffe767aeeb2ceda081f01bc2f63afe8693e16d6..1a271f6d2329ad01813fef9be52684eccab368dd 100644 --- a/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java +++ b/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java @@ -69,7 +69,7 @@ final class PreviewAssessmentManager extends BasicManager implements AssessmentM } @Override - public List<AssessmentEntry> getAssessmentEntriesWithStatus(CourseNode courseNode, AssessmentEntryStatus status) { + public List<AssessmentEntry> getAssessmentEntriesWithStatus(CourseNode courseNode, AssessmentEntryStatus status, boolean excludeZeroScore) { return Collections.emptyList(); } diff --git a/src/main/java/org/olat/modules/assessment/AssessmentService.java b/src/main/java/org/olat/modules/assessment/AssessmentService.java index cbfebb1b093bee1c5e464c7ced836b5e896d3fab..f9b386b069adb0e516ce4b2743b69865bbb588a3 100644 --- a/src/main/java/org/olat/modules/assessment/AssessmentService.java +++ b/src/main/java/org/olat/modules/assessment/AssessmentService.java @@ -84,7 +84,7 @@ public interface AssessmentService { public List<AssessmentEntry> loadAssessmentEntriesBySubIdent(RepositoryEntry entry, String subIdent); - public List<AssessmentEntry> loadAssessmentEntriesBySubIdentWithStatus(RepositoryEntry entry, String subIdent, AssessmentEntryStatus status); + public List<AssessmentEntry> loadAssessmentEntriesBySubIdentWithStatus(RepositoryEntry entry, String subIdent, AssessmentEntryStatus status, boolean excludeZeroScore); public List<AssessmentEntry> loadAssessmentEntriesByAssessedIdentity(Identity assessedIdentity, RepositoryEntry entry); diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java index 608418f99871aef94bab55d9f5d86f6c0087b531..9f5e28d17581aa4e3f9d29a55908e9758c663bb7 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java @@ -32,6 +32,7 @@ import org.olat.core.id.Identity; import org.olat.modules.assessment.AssessmentEntry; import org.olat.modules.assessment.model.AssessmentEntryImpl; import org.olat.modules.assessment.model.AssessmentEntryStatus; +import org.olat.modules.vitero.model.GroupRole; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryEntryRef; import org.springframework.beans.factory.annotation.Autowired; @@ -232,9 +233,11 @@ public class AssessmentEntryDAO { * @param entry The entry (mandatory) * @param subIdent The subIdent (mandatory) * @param status The status of the assessment entry (optional) + * @param excludeZeroScore disallow zero (0) scores * @return A list of assessment entries */ - public List<AssessmentEntry> loadAssessmentEntryBySubIdentWithStatus(RepositoryEntryRef entry, String subIdent, AssessmentEntryStatus status) { + public List<AssessmentEntry> loadAssessmentEntryBySubIdentWithStatus(RepositoryEntryRef entry, String subIdent, + AssessmentEntryStatus status, boolean excludeZeroScore) { StringBuilder sb = new StringBuilder(); sb.append("select data from assessmententry data ") .append(" inner join fetch data.identity ident") @@ -242,10 +245,17 @@ public class AssessmentEntryDAO { .append(" where data.repositoryEntry.key=:repositoryEntryKey") .append(" and data.subIdent=:subIdent") .append(" and data.userVisibility is true") - .append(" and data.score is not null"); + .append(" and data.score is not null") + .append(" and ident.key in ( select membership.identity.key from repoentrytogroup as rel, bgroupmember membership ") + .append(" where rel.entry.key=:repositoryEntryKey and rel.group.key=membership.group.key and membership.role='") + .append(GroupRole.participant).append("'") + .append(" )"); if (status != null) { sb.append(" and data.status=:status"); + } + if(excludeZeroScore) { + sb.append(" and data.score > 0"); } TypedQuery<AssessmentEntry> typedQuery = dbInstance.getCurrentEntityManager() diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java index bb2c9f7b15d0dd463bdf5f3c812de9364de0cb0d..f9f5890f1d6411a2dc44a7305d6f11858d134252 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java @@ -90,8 +90,9 @@ public class AssessmentServiceImpl implements AssessmentService, UserDataDeletab } @Override - public List<AssessmentEntry> loadAssessmentEntriesBySubIdentWithStatus(RepositoryEntry entry, String subIdent, AssessmentEntryStatus status) { - return assessmentEntryDao.loadAssessmentEntryBySubIdentWithStatus(entry, subIdent, status); + public List<AssessmentEntry> loadAssessmentEntriesBySubIdentWithStatus(RepositoryEntry entry, String subIdent, + AssessmentEntryStatus status, boolean excludeZeroScore) { + return assessmentEntryDao.loadAssessmentEntryBySubIdentWithStatus(entry, subIdent, status, excludeZeroScore); } @Override