From b6f1fd4a94144fa8ff461cdfbc0341a88f7bc099 Mon Sep 17 00:00:00 2001 From: fkiefer <none@none> Date: Wed, 8 Mar 2017 18:50:22 +0100 Subject: [PATCH] OO-2133 redefine business logic, adjust DB query --- .../course/assessment/AssessmentManager.java | 2 +- .../manager/CourseAssessmentManagerImpl.java | 4 ++-- .../highscore/manager/HighScoreManager.java | 15 ++++++++------- .../highscore/ui/HighScoreRunController.java | 16 +++++----------- .../run/preview/PreviewAssessmentManager.java | 2 +- .../modules/assessment/AssessmentService.java | 2 +- .../assessment/manager/AssessmentEntryDAO.java | 14 ++++++++++++-- .../manager/AssessmentServiceImpl.java | 5 +++-- 8 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/olat/course/assessment/AssessmentManager.java b/src/main/java/org/olat/course/assessment/AssessmentManager.java index e8bb685131c..37be8fc98a2 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 a59ec52b898..aa1e1d9445a 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 60b8b3b4496..5e790b6963e 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 5a38db2ad82..fd855171081 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 bffe767aeeb..1a271f6d232 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 cbfebb1b093..f9b386b069a 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 608418f9987..9f5e28d1758 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 bb2c9f7b15d..f9f5890f1d6 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 -- GitLab