Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20180201.sql =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20180201.sql (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20180201.sql (revision d15ad2104997c36ac5ccb243c2d3db1d42e60f33) @@ -0,0 +1,9 @@ +SET AUTOCOMMIT = 0; +set FOREIGN_KEY_CHECKS = 0; + +-- LDEV-4507 Make sure that duplicate groups are not created +ALTER TABLE lams_group ADD UNIQUE KEY UQ_lams_group_1 (grouping_id, order_id); + +COMMIT; +SET AUTOCOMMIT = 1; +set FOREIGN_KEY_CHECKS = 1; Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Group.java =================================================================== diff -u -refd67298c7f0ea03a8fc9d670329812589db742a -rd15ad2104997c36ac5ccb243c2d3db1d42e60f33 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Group.java (.../Group.java) (revision efd67298c7f0ea03a8fc9d670329812589db742a) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Group.java (.../Group.java) (revision d15ad2104997c36ac5ccb243c2d3db1d42e60f33) @@ -37,7 +37,7 @@ public class Group implements Serializable, Nullable, Comparable { - public final static int STAFF_GROUP_ORDER_ID = 1; + public final static int STAFF_GROUP_ORDER_ID = 2; public final static String NAME_OF_STAFF_GROUP = "Staff Group"; /** identifier field */ Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java =================================================================== diff -u -r16593058f78a135e25dae055f0fc16c4bed4da42 -rd15ad2104997c36ac5ccb243c2d3db1d42e60f33 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision 16593058f78a135e25dae055f0fc16c4bed4da42) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ICoreLearnerService.java (.../ICoreLearnerService.java) (revision d15ad2104997c36ac5ccb243c2d3db1d42e60f33) @@ -229,7 +229,7 @@ * @return the maximum number of learners per group;null if the requirement for equal number of * learners in groups was not set */ - Integer calculateMaxNumberOfLearnersPerGroup(Long lessonId, Grouping grouping); + Integer calculateMaxNumberOfLearnersPerGroup(Long lessonId, Long groupingId); Grouping getGrouping(Long groupingId); Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r60355e9a91260c605e1a55e1f2329dd69fea08b9 -rd15ad2104997c36ac5ccb243c2d3db1d42e60f33 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 60355e9a91260c605e1a55e1f2329dd69fea08b9) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision d15ad2104997c36ac5ccb243c2d3db1d42e60f33) @@ -890,8 +890,8 @@ public Lesson getLessonByActivity(Activity activity) { Lesson lesson = lessonDAO.getLessonForActivity(activity.getActivityId()); if (lesson == null) { - LearnerService.log - .warn("Tried to get lesson id for a non-lesson based activity. An error is likely to be thrown soon. Activity was " + LearnerService.log.warn( + "Tried to get lesson id for a non-lesson based activity. An error is likely to be thrown soon. Activity was " + activity); } return lesson; @@ -1031,8 +1031,8 @@ SequenceActivity.class); } else { if (LearnerService.log.isDebugEnabled()) { - LearnerService.log - .debug("No branches match and no default branch exists. Uable to allocate learner to a branch for the branching activity" + LearnerService.log.debug( + "No branches match and no default branch exists. Uable to allocate learner to a branch for the branching activity" + branchingActivity.getActivityId() + ":" + branchingActivity.getTitle() + " for learner " + learner.getUserId() + ":" + learner.getLogin()); } @@ -1241,11 +1241,11 @@ * {@inheritDoc} */ @Override - public Integer calculateMaxNumberOfLearnersPerGroup(Long lessonId, Grouping grouping) { - Lesson lesson = getLesson(lessonId); + public Integer calculateMaxNumberOfLearnersPerGroup(Long lessonId, Long groupingId) { + LearnerChoiceGrouping grouping = (LearnerChoiceGrouping) getGrouping(groupingId); LearnerChoiceGrouping learnerChoiceGrouping = (LearnerChoiceGrouping) grouping; Integer maxNumberOfLearnersPerGroup = null; - int learnerCount = lesson.getAllLearners().size(); + int learnerCount = lessonService.getCountLessonLearners(lessonId, null); int groupCount = grouping.getGroups().size(); if (learnerChoiceGrouping.getLearnersPerGroup() == null) { if (groupCount == 0) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java =================================================================== diff -u -r75496fa1baab1302fe097cce2183029e19285ebf -rd15ad2104997c36ac5ccb243c2d3db1d42e60f33 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision 75496fa1baab1302fe097cce2183029e19285ebf) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/GroupingAction.java (.../GroupingAction.java) (revision d15ad2104997c36ac5ccb243c2d3db1d42e60f33) @@ -153,11 +153,10 @@ // forward to group choosing page if (((GroupingActivity) activity).getCreateGrouping().isLearnerChoiceGrouping()) { Long groupingId = ((GroupingActivity) activity).getCreateGrouping().getGroupingId(); - - LearnerChoiceGrouping grouping = (LearnerChoiceGrouping) learnerService.getGrouping(groupingId); Integer maxNumberOfLeaernersPerGroup = learnerService.calculateMaxNumberOfLearnersPerGroup(lessonId, - grouping); + groupingId); + LearnerChoiceGrouping grouping = (LearnerChoiceGrouping) learnerService.getGrouping(groupingId); prepareGroupData(request); request.setAttribute(GroupingAction.MAX_LEARNERS_PER_GROUP, maxNumberOfLeaernersPerGroup); request.setAttribute(GroupingAction.LOCAL_FILES, Boolean.FALSE); @@ -236,7 +235,6 @@ * * @param request */ - @SuppressWarnings("unchecked") private void prepareGroupData(HttpServletRequest request) { ICoreLearnerService learnerService = LearnerServiceProxy.getLearnerService(getServlet().getServletContext()); @@ -287,9 +285,9 @@ } Long groupingId = ((GroupingActivity) activity).getCreateGrouping().getGroupingId(); + Integer maxNumberOfLeaernersPerGroup = learnerService.calculateMaxNumberOfLearnersPerGroup(lessonId, + groupingId); LearnerChoiceGrouping grouping = (LearnerChoiceGrouping) learnerService.getGrouping(groupingId); - Integer maxNumberOfLeaernersPerGroup = learnerService.calculateMaxNumberOfLearnersPerGroup(lessonId, grouping); - prepareGroupData(request); request.setAttribute(GroupingAction.MAX_LEARNERS_PER_GROUP, maxNumberOfLeaernersPerGroup); request.setAttribute(GroupingAction.LOCAL_FILES, Boolean.FALSE);