Index: lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java,v diff -u -r1.9.2.14 -r1.9.2.15 --- lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java 13 Jan 2017 06:05:17 -0000 1.9.2.14 +++ lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java 13 Jan 2017 06:56:25 -0000 1.9.2.15 @@ -101,12 +101,6 @@ public ActionForward viewGroupings(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Long activityID = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID, true); - - boolean lessonGroupsExist = getLessonGrouping(request, activityID, false) != null; - if (lessonGroupsExist) { - // this is lesson mode and user have already chosen a grouping before, so show it - return viewGroups(mapping, form, request, response); - } Integer userId = getUserDTO().getUserID(); Integer organisationId = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID, true); @@ -133,6 +127,19 @@ response.sendError(HttpServletResponse.SC_FORBIDDEN, "User is not a participant in the organisation"); return null; } + + Grouping grouping = getLessonGrouping(activityID); + boolean lessonGroupsExist = (grouping != null) && (grouping.getGroups() != null) + && !grouping.getGroups().isEmpty() && !isDefaultChosenGrouping(grouping); + if (lessonGroupsExist) { + // this is lesson mode and user have already chosen a grouping before, so show it + return viewGroups(mapping, form, request, response); + } + + // if this grouping is used for branching then it should use groups set in authoring. It will be possible to + // remove users from the groups, but not delete groups due to the branching relationships. + boolean isUsedForBranching = (grouping != null) && grouping.isUsedForBranching(); + request.setAttribute(GroupingAJAXAction.PARAM_USED_FOR_BRANCHING, isUsedForBranching); if (OrganisationGroupAction.log.isDebugEnabled()) { OrganisationGroupAction.log @@ -141,7 +148,7 @@ request.setAttribute(AttributeNames.PARAM_ORGANISATION_ID, organisationId); // if it's not a group-based branching and lesson is created using integrations - show groups received from LMS instead of actual LAMS ones - if (getIntegrationService().isIntegratedServerGroupFetchingAvailable(lessonId)) { + if (!isUsedForBranching && getIntegrationService().isIntegratedServerGroupFetchingAvailable(lessonId)) { if (lessonId == null) { //it's when a learner clicks back button on groups page @@ -154,7 +161,6 @@ request.setAttribute("extGroups", extGroups); // TODO ? show only with user number >0 return mapping.findForward(OrganisationGroupAction.MAPPING_VIEW_EXT_GROUPS); - } boolean isGroupSuperuser = getUserManagementService().isUserInRole(userId, organisationId, Role.GROUP_ADMIN) @@ -228,7 +234,7 @@ boolean isExternalGroupsSelected = extGroupIds != null && extGroupIds.length > 0; // check if any groups already exist in this grouping - Grouping lessonGrouping = getLessonGrouping(request, activityId, true); + Grouping lessonGrouping = getLessonGrouping(activityId); Set lessonGroups = lessonGrouping == null ? null : lessonGrouping.getGroups(); if ((activityId != null) && (lessonGrouping != null) && (isExternalGroupsSelected || (orgGroupingId != null)) && isDefaultChosenGrouping(lessonGrouping)) { @@ -246,6 +252,11 @@ lessonGroups = null; } + + // if this grouping is used for branching then it should use groups set in authoring. It will be possible to + // remove users from the groups, but not delete groups due to the branching relationships. + boolean isUsedForBranching = (lessonGrouping != null) && lessonGrouping.isUsedForBranching(); + request.setAttribute(GroupingAJAXAction.PARAM_USED_FOR_BRANCHING, isUsedForBranching); JSONArray orgGroupsJSON = new JSONArray(); Collection learners = null; @@ -592,25 +603,15 @@ /** * Checks if lesson-level groups exist for the given activity. */ - private Grouping getLessonGrouping(HttpServletRequest request, Long activityID, boolean allowDefault) { + private Grouping getLessonGrouping(Long activityID) { if (activityID != null) { // we need to fetch real objects instead of stubs/proxies Activity activity = (Activity) getUserManagementService().findById(Activity.class, activityID); Grouping grouping = activity.isChosenBranchingActivity() ? activity.getGrouping() : ((GroupingActivity) getUserManagementService().findById(GroupingActivity.class, activityID)) .getCreateGrouping(); - if ((grouping != null) && (grouping.getGroups() != null)) { - - // if this grouping is used for branching then it should use groups set in authoring. It will be possible to - // remove users from the groups, but not delete groups due to the branching relationships. - // (Not very obvious place to use it, but it made most sense.) - boolean isUsedForBranching = grouping.isUsedForBranching(); - request.setAttribute(GroupingAJAXAction.PARAM_USED_FOR_BRANCHING, isUsedForBranching); - - Set groups = grouping.getGroups(); - return !groups.isEmpty() && (allowDefault || isUsedForBranching || !isDefaultChosenGrouping(grouping)) ? grouping : null; - } + return grouping; } return null;