diff --git a/src/main/java/org/olat/course/assessment/AssessmentMainController.java b/src/main/java/org/olat/course/assessment/AssessmentMainController.java index cdba1f3fce0bf431e1fe49e268e486348b5683e6..3dec256812b1868834085acc6e0201ec1851a4ce 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentMainController.java +++ b/src/main/java/org/olat/course/assessment/AssessmentMainController.java @@ -27,9 +27,11 @@ package org.olat.course.assessment; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.lang.StringEscapeUtils; @@ -674,9 +676,16 @@ public class AssessmentMainController extends MainLayoutBasicController implemen private List<Identity> getAllAssessableIdentities() { List<Identity> participants = businessGroupService.getMembers(coachedGroups, GroupRoles.participant.name()); + Set<Identity> duplicateKiller = new HashSet<>(participants); + if((repoTutor && coachedGroups.isEmpty()) || (callback.mayAssessAllUsers() || callback.mayViewAllUsersAssessments())) { List<Identity> courseParticipants = repositoryService.getMembers(re, GroupRoles.participant.name()); - participants.addAll(courseParticipants); + for(Identity courseParticipant:courseParticipants) { + if(!duplicateKiller.contains(courseParticipant)) { + participants.add(courseParticipant); + duplicateKiller.add(courseParticipant); + } + } } if(callback.mayViewAllUsersAssessments() && participants.size() < 500) { @@ -684,7 +693,11 @@ public class AssessmentMainController extends MainLayoutBasicController implemen ICourse course = CourseFactory.loadCourse(ores); CoursePropertyManager pm = course.getCourseEnvironment().getCoursePropertyManager(); List<Identity> assessedRsers = pm.getAllIdentitiesWithCourseAssessmentData(participants); - participants.addAll(assessedRsers); + for(Identity assessedRser:assessedRsers) { + if(!duplicateKiller.contains(assessedRser)) { + participants.add(assessedRser); + } + } } return participants; } diff --git a/src/main/java/org/olat/repository/RepositoryService.java b/src/main/java/org/olat/repository/RepositoryService.java index 0bf4594b328ba559c4ba499f9902fb08d093f964..67920fe6f12ef3b96243dd0c8dedfb026e69117e 100644 --- a/src/main/java/org/olat/repository/RepositoryService.java +++ b/src/main/java/org/olat/repository/RepositoryService.java @@ -101,6 +101,14 @@ public interface RepositoryService { */ public List<Long> getAuthors(RepositoryEntryRef re); + /** + * Get the members of the repository entry (the method doesn't + * follow the business groups). + * + * @param re + * @param roles + * @return + */ public List<Identity> getMembers(RepositoryEntryRef re, String... roles); public List<String> getRoles(Identity identity, RepositoryEntryRef re);