-
Type:
Bug
-
Status: Closed (View Workflow)
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 10.4.10
-
Fix Version/s: 10.5
-
Component/s: Course
-
Labels:None
-
Funded by:
When exporting the course results in the archiver, identities which are both course members and group members have two records in the exported file. This is because they are added two times to the userList in ScoreAccountingHelper.loadUsers().
My suggestion is to use a Set instead of List because an object (Identity) can only appear once in Set.
This is the patch:
diff --git a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java --- a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java +++ b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java @@ -416,21 +418,20 @@ List<BusinessGroup> groups = gm.getAllBusinessGroups(); BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class); - List<Identity> userList = businessGroupService.getMembers(groups, GroupRoles.participant.name()); - userList = new ArrayList<>(new HashSet<>(userList)); + HashSet<Identity> userSet = new HashSet<>(businessGroupService.getMembers(groups, GroupRoles.participant.name())); OLATResourceable ores = OresHelper.createOLATResourceableInstance(CourseModule.class, courseEnv.getCourseResourceableId()); RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(ores, false); if(re != null) { RepositoryService repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); - userList.addAll(repositoryService.getMembers(re, GroupRoles.participant.name())); + userSet.addAll(repositoryService.getMembers(re, GroupRoles.participant.name())); } - List<Identity> assessedList = courseEnv.getCoursePropertyManager().getAllIdentitiesWithCourseAssessmentData(userList); + List<Identity> assessedList = courseEnv.getCoursePropertyManager().getAllIdentitiesWithCourseAssessmentData(userSet); if(assessedList.size() > 0) { - assessedList.removeAll(userList);//deduplicate - userList.addAll(assessedList); + assessedList.removeAll(userSet);//deduplicate + userSet.addAll(assessedList); } - return userList; + return new ArrayList<Identity>(userSet); } public static List<Identity> loadUsers(CourseEnvironment courseEnv, ArchiveOptions options) {