Index: lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java =================================================================== diff -u -rbbd3fae64f21997ab27690bb74f20e9b6e4af61d -rb8c30f48f0925a8b74bd6090c7766f43096877c5 --- lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java (.../SPEnrolmentServlet.java) (revision bbd3fae64f21997ab27690bb74f20e9b6e4af61d) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/SPEnrolmentServlet.java (.../SPEnrolmentServlet.java) (revision b8c30f48f0925a8b74bd6090c7766f43096877c5) @@ -190,6 +190,8 @@ Set allUsersParsed = createUsers(extServer, creatorId, allUsersMapped, userIDs, allExistingUsers, allExistingExtUsers); + Set allUsersinCourses = new HashSet<>(); + // map lines into corresponding roles Map>> linesByMode = allLines.stream() .collect(Collectors.groupingByConcurrent(row -> row.get(6))); @@ -243,15 +245,17 @@ for (String courseCode : courses.keySet()) { Organisation course = allExistingOrganisations.get(courseCode); - assignManagers(course, creatorId, mappings, allUsersParsed, userIDs, allExistingRoles, - allExistingUsers, mappingsProcessed); + Collection courseUsers = assignManagers(course, creatorId, mappings, allUsersParsed, + userIDs, allExistingRoles, allExistingUsers, mappingsProcessed); + allUsersinCourses.addAll(courseUsers); + logger.info("Processed " + mappingsProcessed.get() + " entries"); } logger.info("Processing \"" + role + "\" role finished"); // END OF GROUP MANAGER PROCESSING! - return; + continue; } // START OF LEARNER / STAFF PROCESSING @@ -288,7 +292,6 @@ .parallelStream().filter(e -> e.getExtServer().getSid().equals(extServerSid)) .collect(Collectors.toConcurrentMap(e -> e.getOrganisation().getOrganisationId(), e -> e)); - Set allUsersinCourses = new HashSet<>(); // go through each course AtomicInteger mappingsProcessed = new AtomicInteger(); logger.info("Processing courses and assigments"); @@ -306,33 +309,27 @@ logger.info("Processed " + mappingsProcessed.get() + " entries"); } - logger.info("Disabling users"); - // users who are part of courses but are not in the file anymore are eligible for disabling - allUsersinCourses.removeAll(allUsersParsed); - for (User user : allUsersinCourses) { - // make a flat set of roles from all subcourses - Set roles = userManagementService.getRolesForUser(user.getUserId()).values().stream() - .collect(HashSet::new, Set::addAll, Set::addAll); - if (mode == Mode.STAFF) { - // check if the user is learner in any course - roles.remove(Role.ROLE_MONITOR); - roles.remove(Role.ROLE_AUTHOR); - } else { - // check if the user is staff in any course - roles.remove(Role.ROLE_LEARNER); - } - if (roles.isEmpty()) { - // he is only a learner or this is staff mode, so disable - userManagementService.disableUser(user.getUserId()); + logger.info("Processing \"" + role + "\" role finished"); + } - String message = "User \"" + user.getLogin() + "\" disabled"; - logger.info(message); - logEventService.logEvent(LogEvent.TYPE_USER_ORG_ADMIN, creatorId, null, null, null, - "SPEnrolment: " + message); - } + logger.info("Disabling users"); + // users who are part of courses but are not in the file anymore are eligible for disabling + allUsersinCourses.removeAll(allUsersParsed); + for (User user : allUsersinCourses) { + // make a flat set of roles from all subcourses + Set roles = userManagementService.getRolesForUser(user.getUserId()).values().stream() + .collect(HashSet::new, Set::addAll, Set::addAll); + if (roles.isEmpty()) { + // he is only a learner or this is staff mode, so disable + userManagementService.disableUser(user.getUserId()); + + String message = "User \"" + user.getLogin() + "\" disabled"; + logger.info(message); + logEventService.logEvent(LogEvent.TYPE_USER_ORG_ADMIN, creatorId, null, null, null, + "SPEnrolment: " + message); } - logger.info("Processing \"" + role + "\" role finished"); } + logger.info("SP enrolments provisioning completed successfully"); } catch (Exception e) { logger.error("Error while provisioning SP enrolments", e); @@ -606,7 +603,7 @@ } @SuppressWarnings("unchecked") - private void assignManagers(Organisation course, Integer creatorId, Map> mappings, + private Collection assignManagers(Organisation course, Integer creatorId, Map> mappings, Set allUsersParsed, Map userIDs, Map>> allExistingRoles, Map allExistingUsers, AtomicInteger mappingsProcessed) throws UserInfoValidationException { @@ -616,6 +613,7 @@ // get existing managers for given course Collection courseUsers = userManagementService.getUsersFromOrganisationByRole(courseId, Role.GROUP_MANAGER, true); + Set initialCourseUsers = new HashSet<>(courseUsers); // go through each user List courseMappings = mappings.get(courseCode); @@ -680,6 +678,8 @@ logEventService.logEvent(LogEvent.TYPE_USER_ORG_ADMIN, creatorId, null, null, null, "SPEnrolment: " + message); } + + return initialCourseUsers; } @Override