Index: lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java =================================================================== diff -u -rcfa39638c61dc4a0e9f93dc19cb40fb4c6db089a -r7458588a3946b6e57836e2da89588c579aa4434c --- lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java (.../SPEnrolmentServlet.java) (revision cfa39638c61dc4a0e9f93dc19cb40fb4c6db089a) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java (.../SPEnrolmentServlet.java) (revision 7458588a3946b6e57836e2da89588c579aa4434c) @@ -296,19 +296,22 @@ // for all organisations which are present in the output file Map>> allExistingRoles = Stream .concat(allExistingParsedCourses.values().stream(), allExistingParsedSubcourses.stream()) - .flatMap(o -> o.getUserOrganisations().stream()) - .collect(Collectors.groupingBy(uo -> uo.getUser().getLogin(), Collectors.toMap( - userOrganisation -> userOrganisation.getOrganisation().getOrganisationId(), - userOrganisation -> userOrganisation.getUserOrganisationRoles().stream() - .map(userOrganisationRole -> userOrganisationRole.getRole().getRoleId()) - .collect(Collectors.toSet())))); + .flatMap(o -> o.getUserOrganisations().stream()).collect( + Collectors.groupingBy(uo -> uo.getUser().getLogin().toLowerCase(), + Collectors.toMap( + userOrganisation -> userOrganisation.getOrganisation() + .getOrganisationId(), + userOrganisation -> userOrganisation.getUserOrganisationRoles() + .stream().map(userOrganisationRole -> userOrganisationRole + .getRole().getRoleId()) + .collect(Collectors.toSet())))); // When setting group managers, just process courses, not subcourses and lessons if (mode == Mode.MANAGER) { // map of course code -> user logins Map> mappings = lines.stream() .collect(Collectors.groupingByConcurrent(elem -> elem.get(0), ConcurrentHashMap::new, - Collectors.mapping(elem -> elem.get(3), Collectors.toList()))); + Collectors.mapping(elem -> elem.get(3).toLowerCase(), Collectors.toList()))); AtomicInteger mappingsProcessed = new AtomicInteger(); logger.info("Processing manager courses and assigments"); @@ -470,7 +473,7 @@ // he is only a learner or this is staff mode, so disable userManagementService.disableUser(user.getUserId()); - String message = "User \"" + user.getLogin() + "\" disabled"; + String message = "User \"" + user.getLogin().toLowerCase() + "\" disabled"; logger.info(message); logEventService.logEvent(LogEvent.TYPE_USER_ORG_ADMIN, creatorId, null, null, null, "SPEnrolment: " + message); @@ -511,8 +514,8 @@ elementsRemaining = spliterator.tryAdvance(userEntry -> { // email servers as login - String login = userEntry.getKey(); - User user = allExistingUsers.get(login.toLowerCase()); + String login = userEntry.getKey().toLowerCase(); + User user = allExistingUsers.get(login); if (user == null) { String salt = HashUtil.salt(); String password = HashUtil.sha256(RandomPasswordGenerator.nextPassword(10), salt); @@ -539,7 +542,7 @@ logEventService.logEvent(LogEvent.TYPE_USER_ORG_ADMIN, creatorId, null, null, null, "SPEnrolment: " + message); } else { - ExtUserUseridMap userMap = allExistingExtUsers.get(login.toLowerCase()); + ExtUserUseridMap userMap = allExistingExtUsers.get(login); if (userMap == null) { userMap = new ExtUserUseridMap(); userMap.setExtServer(extServer); @@ -709,9 +712,8 @@ subcourseUsers.retainAll(authors); } - final Organisation finalSubcourse = subcourse; - for (String login : subcourseEntry.getValue()) { + login = login.toLowerCase(); logger.info("Processing \"" + login + "\""); @@ -734,7 +736,7 @@ } } if (userAlreadyAssigned) { - return; + continue; } // the user is not a learner/staff member yet, so assign him the role and add him to lessons @@ -750,8 +752,8 @@ } else { existingSubcourseRoles.add(Role.ROLE_LEARNER); } - User user = allExistingParsedUsers.get(login.toLowerCase()); - userManagementService.setRolesForUserOrganisation(user, finalSubcourse, + User user = allExistingParsedUsers.get(login); + userManagementService.setRolesForUserOrganisation(user, subcourse, existingSubcourseRoles.stream().map(String::valueOf).collect(Collectors.toList()), false); for (Lesson lesson : lessonService.getLessonsByGroup(subcourseId)) { @@ -793,7 +795,7 @@ boolean removedFromSubcourse = removeFromCourse(subcourse, user, isStaffMode ? Mode.STAFF : Mode.LEARNER, allExistingRoles); if (removedFromSubcourse) { - String message = (isStaffMode ? "Teacher" : "Learner") + " \"" + user.getLogin() + String message = (isStaffMode ? "Teacher" : "Learner") + " \"" + user.getLogin().toLowerCase() + "\" removed from subcourse " + subcourse.getOrganisationId() + " and its lessons"; logger.info(message); logEventService.logEvent(LogEvent.TYPE_USER_ORG_ADMIN, creatorId, null, null, null, @@ -807,7 +809,7 @@ private boolean removeFromCourse(Organisation course, User user, Mode mode, Map>> allExistingRoles) { // no existing roles and the user should be removed - nothing to do - Map> existingCoursesRoles = allExistingRoles.get(user.getLogin()); + Map> existingCoursesRoles = allExistingRoles.get(user.getLogin().toLowerCase()); Set existingCourseRoles = existingCoursesRoles == null ? null : existingCoursesRoles.get(course.getOrganisationId()); if (existingCourseRoles == null || existingCourseRoles.isEmpty()) { @@ -849,7 +851,7 @@ if (course.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { for (Organisation subcourse : parentCourse.getChildOrganisations()) { List rolesInSubcourse = userManagementService - .getUserOrganisationRoles(subcourse.getOrganisationId(), user.getLogin()); + .getUserOrganisationRoles(subcourse.getOrganisationId(), user.getLogin().toLowerCase()); if (!rolesInSubcourse.isEmpty()) { return true; } @@ -878,6 +880,8 @@ List courseMappings = mappings.get(courseCode); if (courseMappings != null) { for (String login : courseMappings) { + login = login.toLowerCase(); + logger.info("Processing manager \"" + login + "\""); mappingsProcessed.incrementAndGet(); @@ -904,7 +908,7 @@ } existingCourseRoles.add(Role.ROLE_GROUP_MANAGER); - User user = allExistingParsedUsers.get(login.toLowerCase()); + User user = allExistingParsedUsers.get(login); userManagementService.setRolesForUserOrganisation(user, course, existingCourseRoles.stream().map(String::valueOf).collect(Collectors.toList()), true); @@ -922,7 +926,7 @@ for (User user : courseUsers) { boolean removedFromCourse = removeFromCourse(course, user, Mode.MANAGER, allExistingRoles); if (removedFromCourse) { - String message = "Manager \"" + user.getLogin() + "\" removed from course " + courseId; + String message = "Manager \"" + user.getLogin().toLowerCase() + "\" removed from course " + courseId; logger.info(message); logEventService.logEvent(LogEvent.TYPE_USER_ORG_ADMIN, creatorId, null, null, null, "SPEnrolment: " + message);