Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r48b7b344ad0171dfa0ebdacdf742560366d5d1dc -rfd131067cd0d56f83e3f9675277248bca41e259e --- lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 48b7b344ad0171dfa0ebdacdf742560366d5d1dc) +++ lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision fd131067cd0d56f83e3f9675277248bca41e259e) @@ -86,6 +86,7 @@ admin.user.disable = Disable user admin.user.actions = Actions admin.user.import = Import users +admin.user.add.to.lessons = Add user to existing lessons admin.list.disabled.users = List disabled accounts label.excel.spreadsheet = File label.spreadsheet = spreadsheet Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/UserOrgRoleSaveController.java =================================================================== diff -u -rc7c5d74f9c402bdab97bd3fd46436adbfa9202b8 -rfd131067cd0d56f83e3f9675277248bca41e259e --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/UserOrgRoleSaveController.java (.../UserOrgRoleSaveController.java) (revision c7c5d74f9c402bdab97bd3fd46436adbfa9202b8) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/UserOrgRoleSaveController.java (.../UserOrgRoleSaveController.java) (revision fd131067cd0d56f83e3f9675277248bca41e259e) @@ -35,6 +35,7 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.admin.web.dto.UserBean; import org.lamsfoundation.lams.admin.web.form.UserOrgRoleForm; +import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.security.ISecurityService; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.Role; @@ -69,7 +70,11 @@ @Autowired private IUserManagementService userManagementService; + @Autowired + private ILessonService lessonService; + + @Autowired private ISecurityService securityService; @Autowired @Qualifier("adminMessageService") @@ -126,13 +131,23 @@ userManagementService.save(user); } + if (userOrgRoleForm.isAddToLessons()) { + for (String roleIdString : roleIds) { + Integer roleId = Integer.valueOf(roleIdString); + if (roleId.equals(Role.ROLE_LEARNER) || roleId.equals(Role.ROLE_MONITOR)) { + lessonService.addParticipantToOrganisationLessons(orgId, user.getUserId(), roleId, false); + } + } + } + List roles = Stream.of(roleIds).collect(Collectors .mapping(roleId -> Role.ROLE_MAP.get(Integer.valueOf(roleId)), Collectors.toUnmodifiableList())); logMessageBuilder.append("to user ").append(user.getFirstName()).append(" ").append(user.getLastName()) .append(" (").append(user.getLogin()).append(") assigned roles ").append(roles); if (i < userBeans.size() - 1) { logMessageBuilder.append(", "); } + // FMALIKOFF 5/7/7 Commented out the following code that set the roles in the course if the current org is a class, as the logic // is done in service.setRolesForUserOrganisation() //if (organisation.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { @@ -144,6 +159,9 @@ if (logMessageBuilder.length() > 0) { logMessageBuilder.append(" in organisation \"").append(organisation.getName()).append("\""); + if (userOrgRoleForm.isAddToLessons()) { + logMessageBuilder.append(" and added to all lessons"); + } AuditLogFilter.log(AuditLogFilter.ROLE_ADD_ACTION, logMessageBuilder); } Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/UserRolesSaveController.java =================================================================== diff -u -r1fb317e9f6db7094ec64f77782bf0be389012e43 -rfd131067cd0d56f83e3f9675277248bca41e259e --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/UserRolesSaveController.java (.../UserRolesSaveController.java) (revision 1fb317e9f6db7094ec64f77782bf0be389012e43) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/controller/UserRolesSaveController.java (.../UserRolesSaveController.java) (revision fd131067cd0d56f83e3f9675277248bca41e259e) @@ -36,6 +36,7 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.admin.web.form.UserRolesForm; +import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.security.ISecurityService; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.Role; @@ -64,7 +65,11 @@ @Autowired private IUserManagementService userManagementService; + @Autowired + private ILessonService lessonService; + + @Autowired private ISecurityService securityService; @Autowired @Qualifier("adminMessageService") @@ -131,8 +136,17 @@ userManagementService.save(user); } - auditLog(org, userId, roles); + if (userRolesForm.isAddToLessons()) { + for (String roleIdString : roles) { + Integer roleId = Integer.valueOf(roleIdString); + if (roleId.equals(Role.ROLE_LEARNER) || roleId.equals(Role.ROLE_MONITOR)) { + lessonService.addParticipantToOrganisationLessons(orgId, user.getUserId(), roleId, false); + } + } + } + auditLog(org, userId, roles, userRolesForm.isAddToLessons()); + return "redirect:/usermanage.do?org=" + orgId; } @@ -142,13 +156,16 @@ return user != null ? user.getUserID() : null; } - private void auditLog(Organisation organisation, Integer userId, String[] roleIds) { + private void auditLog(Organisation organisation, Integer userId, String[] roleIds, boolean addToLessons) { List roles = Stream.of(roleIds).collect(Collectors .mapping(roleId -> Role.ROLE_MAP.get(Integer.valueOf(roleId)), Collectors.toUnmodifiableList())); User targetUser = userManagementService.getUserById(userId); StringBuilder auditLogMessage = new StringBuilder("to user ").append(targetUser.getFirstName()).append(" ") .append(targetUser.getLastName()).append(" (").append(targetUser.getLogin()).append(") assigned roles ") .append(roles).append(" in organisation \"").append(organisation.getName()).append("\""); + if (addToLessons) { + auditLogMessage.append(" and added to all lessons"); + } AuditLogFilter.log(AuditLogFilter.ROLE_ADD_ACTION, auditLogMessage); } } \ No newline at end of file Index: lams_admin/web/userorgrole.jsp =================================================================== diff -u -r66f0be031a6a7793d4dc02e7e123508bcdff609d -rfd131067cd0d56f83e3f9675277248bca41e259e --- lams_admin/web/userorgrole.jsp (.../userorgrole.jsp) (revision 66f0be031a6a7793d4dc02e7e123508bcdff609d) +++ lams_admin/web/userorgrole.jsp (.../userorgrole.jsp) (revision fd131067cd0d56f83e3f9675277248bca41e259e) @@ -48,7 +48,11 @@ - + + +
Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java =================================================================== diff -u -r7b3eba5d7b856941bb0b89cb6e49a1498a8feac4 -rfd131067cd0d56f83e3f9675277248bca41e259e --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision 7b3eba5d7b856941bb0b89cb6e49a1498a8feac4) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/ILessonService.java (.../ILessonService.java) (revision fd131067cd0d56f83e3f9675277248bca41e259e) @@ -317,6 +317,12 @@ void updateStaffMembers(Lesson lesson, Collection users) throws LessonServiceException; /** + * Adds given user as learner or monitor to all lessons in the given course and optionally its subcourses. + */ + void addParticipantToOrganisationLessons(Integer organisationId, Integer userId, Integer roleId, + boolean addToSubcourses); + + /** * Remove references to an activity from all learner progress entries. Used by Live Edit, to remove any references * to the system gates * Index: lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java =================================================================== diff -u -r7b3eba5d7b856941bb0b89cb6e49a1498a8feac4 -rfd131067cd0d56f83e3f9675277248bca41e259e --- lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision 7b3eba5d7b856941bb0b89cb6e49a1498a8feac4) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/service/LessonService.java (.../LessonService.java) (revision fd131067cd0d56f83e3f9675277248bca41e259e) @@ -53,8 +53,11 @@ import org.lamsfoundation.lams.lesson.dao.ILessonDAO; import org.lamsfoundation.lams.lesson.dto.ActivityTimeLimitDTO; import org.lamsfoundation.lams.lesson.dto.LessonDetailsDTO; +import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.OrganisationGroup; import org.lamsfoundation.lams.usermanagement.OrganisationGrouping; +import org.lamsfoundation.lams.usermanagement.OrganisationType; +import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.MessageService; @@ -290,7 +293,6 @@ if (grouper != null) { try { grouper.removeAllLearnersFromGrouping(grouping); - grouping.getGroups().clear(); } catch (GroupingException e) { throw new LessonServiceException(e); } @@ -359,7 +361,9 @@ // nuke all existing groups and create new ones removeAllLearnersFromGrouping(grouping); + grouping.getGroups().clear(); groupingDAO.flush(); + for (OrganisationGroup orgGroup : orgGrouping.getGroups()) { Group group = Group.createLearnerGroup(grouping, orgGroup.getName(), new HashSet<>(orgGroup.getUsers())); @@ -558,8 +562,41 @@ } } - @SuppressWarnings("unchecked") @Override + public void addParticipantToOrganisationLessons(Integer organisationId, Integer userId, Integer roleId, + boolean addToSubcourses) { + if (roleId == null || !(roleId.equals(Role.ROLE_LEARNER) || roleId.equals(Role.ROLE_MONITOR))) { + log.error("Unsupported role to assign to all lesssons in organisation " + organisationId + ": " + roleId); + return; + } + + // add to course + for (Lesson lesson : getLessonsByGroup(organisationId)) { + if (roleId.equals(Role.ROLE_MONITOR)) { + addStaffMember(lesson.getLessonId(), userId); + } else { + addLearner(lesson.getLessonId(), userId); + } + } + + if (addToSubcourses) { + // add to subcourses + Organisation organisation = baseDAO.find(Organisation.class, organisationId); + if (organisation.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.COURSE_TYPE)) { + for (Organisation subCourse : organisation.getChildOrganisations()) { + for (Lesson lesson : getLessonsByGroup(subCourse.getOrganisationId())) { + if (roleId.equals(Role.ROLE_MONITOR)) { + addStaffMember(lesson.getLessonId(), userId); + } else { + addLearner(lesson.getLessonId(), userId); + } + } + } + } + } + } + + @Override public void removeProgressReferencesToActivity(Activity activity) { if (activity != null) { LessonService.log.debug("Processing learner progress for activity " + activity.getActivityId()); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadController.java =================================================================== diff -u -r3eab31a1109437bc25679e6ebe38be0a350e17ac -rfd131067cd0d56f83e3f9675277248bca41e259e --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadController.java (.../GroupingUploadController.java) (revision 3eab31a1109437bc25679e6ebe38be0a350e17ac) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/GroupingUploadController.java (.../GroupingUploadController.java) (revision fd131067cd0d56f83e3f9675277248bca41e259e) @@ -425,6 +425,17 @@ // remove all the existing users from their groups lessonService.removeAllLearnersFromGrouping(grouping); + if (!grouping.isUsedForBranching()) { + Iterator groupIterator = grouping.getGroups().iterator(); + while (groupIterator.hasNext()) { + Group group = groupIterator.next(); + // remove empty groups + if (group.getUsers().isEmpty() && group.getBranchActivities().isEmpty()) { + groupIterator.remove(); + } + } + userManagementService.save(grouping); + } // Now put in the new users groupings for (Map.Entry> groupEntry : groups.entrySet()) {