Index: lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java =================================================================== diff -u -r3a982b5273a5f1f80b2d9980247061dce057ad98 -rbf965a1a2768bdec78ccb7b0ff8f7b694580e02c --- lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java (.../OrganisationGroupAction.java) (revision 3a982b5273a5f1f80b2d9980247061dce057ad98) +++ lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java (.../OrganisationGroupAction.java) (revision bf965a1a2768bdec78ccb7b0ff8f7b694580e02c) @@ -226,11 +226,12 @@ HttpServletResponse response) throws JSONException { Integer userId = getUserDTO().getUserID(); Integer organisationId = WebUtil.readIntParam(request, AttributeNames.PARAM_ORGANISATION_ID, true); + Long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID, true); + Lesson lesson = null; if (organisationId == null) { // read organisation ID from lesson - Long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); - organisationId = ((Lesson) getUserManagementService().findById(Lesson.class, lessonId)).getOrganisation() - .getOrganisationId(); + lesson = (Lesson) getUserManagementService().findById(Lesson.class, lessonId); + organisationId = lesson.getOrganisation().getOrganisationId(); } // check if user is allowed to view and edit groups @@ -283,13 +284,19 @@ } JSONArray orgGroupsJSON = null; - Vector learners = getUserManagementService().getUsersFromOrganisationByRole(organisationId, Role.LEARNER, - false, true); + Collection learners = null; + // select source for groups (course or lesson) if ((lessonGroups == null) || lessonGroups.isEmpty()) { + learners = getUserManagementService().getUsersFromOrganisationByRole(organisationId, Role.LEARNER, false, + true); Set orgGroups = orgGrouping == null ? null : orgGrouping.getGroups(); orgGroupsJSON = getOrgGroupsDetails(orgGroups, learners); } else { + if (lesson == null) { + lesson = (Lesson) getUserManagementService().findById(Lesson.class, lessonId); + } + learners = lesson.getLessonClass().getLearners(); orgGroupsJSON = getLessonGroupsDetails(lessonGroups, learners); request.setAttribute("skipInitialAssigning", true); } Index: lams_central/web/includes/javascript/authoring/authoringActivity.js =================================================================== diff -u -r260f167585ffb5b4db7b021294782607437aed4a -rbf965a1a2768bdec78ccb7b0ff8f7b694580e02c --- lams_central/web/includes/javascript/authoring/authoringActivity.js (.../authoringActivity.js) (revision 260f167585ffb5b4db7b021294782607437aed4a) +++ lams_central/web/includes/javascript/authoring/authoringActivity.js (.../authoringActivity.js) (revision bf965a1a2768bdec78ccb7b0ff8f7b694580e02c) @@ -67,7 +67,7 @@ this.learnerCount = +learnerCount || 1; this.equalSizes = equalSizes || false; this.viewLearners = viewLearners || false; - this.groups = groups || []; + this.groups = groups || PropertyLib.fillNameAndUIIDList(this.groupCount, [], 'name', 'Group '); this.transitions = { 'from' : [], 'to' : [] Index: lams_central/web/includes/javascript/authoring/authoringProperty.js =================================================================== diff -u -r260f167585ffb5b4db7b021294782607437aed4a -rbf965a1a2768bdec78ccb7b0ff8f7b694580e02c --- lams_central/web/includes/javascript/authoring/authoringProperty.js (.../authoringProperty.js) (revision 260f167585ffb5b4db7b021294782607437aed4a) +++ lams_central/web/includes/javascript/authoring/authoringProperty.js (.../authoringProperty.js) (revision bf965a1a2768bdec78ccb7b0ff8f7b694580e02c) @@ -854,8 +854,6 @@ // remove existing entries and add reference to the initiating activity dialog.empty().dialog('option', 'parentObject', activity); - activity.groups = PropertyLib.fillNameAndUIIDList(activity.groupCount, - activity.groups, 'name', 'Group '); $.each(activity.groups, function(){ $('').addClass('groupName').appendTo(dialog).val(this.name); dialog.append('
'); Index: lams_central/web/includes/javascript/orgGrouping.js =================================================================== diff -u -r3ead910e766fb518a08fc2d2cf53382431313cbf -rbf965a1a2768bdec78ccb7b0ff8f7b694580e02c --- lams_central/web/includes/javascript/orgGrouping.js (.../orgGrouping.js) (revision 3ead910e766fb518a08fc2d2cf53382431313cbf) +++ lams_central/web/includes/javascript/orgGrouping.js (.../orgGrouping.js) (revision bf965a1a2768bdec78ccb7b0ff8f7b694580e02c) @@ -12,6 +12,9 @@ function showGroups(groupingId) { var url = LAMS_URL + 'OrganisationGroup.do?method=viewGroups&organisationID=' + organisationId; + if (lessonId) { + url += '&lessonID=' + lessonId; + } // no grouping ID means we open a brand new grouping if (groupingId) { url += '&groupingId=' + groupingId; Index: lams_central/web/orgGrouping.jsp =================================================================== diff -u -r3ead910e766fb518a08fc2d2cf53382431313cbf -rbf965a1a2768bdec78ccb7b0ff8f7b694580e02c --- lams_central/web/orgGrouping.jsp (.../orgGrouping.jsp) (revision 3ead910e766fb518a08fc2d2cf53382431313cbf) +++ lams_central/web/orgGrouping.jsp (.../orgGrouping.jsp) (revision bf965a1a2768bdec78ccb7b0ff8f7b694580e02c) @@ -16,16 +16,17 @@ Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java =================================================================== diff -u -r5b6e51b5d96619f619209830fdab0ed1ef572c05 -rbf965a1a2768bdec78ccb7b0ff8f7b694580e02c --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java (.../ContributeDTOFactory.java) (revision 5b6e51b5d96619f619209830fdab0ed1ef572c05) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java (.../ContributeDTOFactory.java) (revision bf965a1a2768bdec78ccb7b0ff8f7b694580e02c) @@ -25,23 +25,30 @@ package org.lamsfoundation.lams.monitoring; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedList; +import java.util.Set; import java.util.Vector; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ComplexActivity; import org.lamsfoundation.lams.learningdesign.ContributionTypes; import org.lamsfoundation.lams.learningdesign.GateActivity; +import org.lamsfoundation.lams.learningdesign.Group; +import org.lamsfoundation.lams.learningdesign.Grouping; +import org.lamsfoundation.lams.learningdesign.GroupingActivity; import org.lamsfoundation.lams.learningdesign.SimpleActivity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.strategy.ComplexActivityStrategy; import org.lamsfoundation.lams.learningdesign.strategy.IContributionTypeStrategy; import org.lamsfoundation.lams.learningdesign.strategy.SimpleActivityStrategy; +import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.monitoring.dto.ContributeActivityDTO; import org.lamsfoundation.lams.monitoring.dto.ContributeActivityDTO.ContributeEntry; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; +import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.WebUtil; public class ContributeDTOFactory { @@ -62,6 +69,7 @@ return dto; } + @SuppressWarnings("unchecked") private static ContributeActivityDTO addContributionURLS(Long lessonID, Activity activity, IContributionTypeStrategy strategy, ILamsCoreToolService toolService) { ContributeActivityDTO dto = null; @@ -83,6 +91,35 @@ if (ContributionTypes.PERMISSION_GATE.equals(contributionTypeEntry) && ((GateActivity) activity).getGateOpen()) { entry.setIsComplete(true); + + } else if (ContributionTypes.CHOSEN_GROUPING.equals(contributionTypeEntry)) { + Lesson lesson = null; + // find the lesson for this activity + for (Lesson candidateLesson : (Set) activity.getLearningDesign().getLessons()) { + if (candidateLesson.getLessonId().equals(lessonID)) { + lesson = candidateLesson; + break; + } + } + if (lesson != null) { + // all availables users + Set learners = new HashSet(lesson.getLessonClass().getLearners()); + if (!learners.isEmpty()) { + // check if all users were assigned to groups and can not move anymore + GroupingActivity groupingActivity = (GroupingActivity) activity; + Grouping grouping = groupingActivity.getCreateGrouping(); + if ((grouping != null) && (grouping.getGroups() != null)) { + for (Group group : (Set) grouping.getGroups()) { + if (!group.mayBeDeleted()) { + learners.removeAll(group.getUsers()); + } + } + } + } + if (learners.isEmpty()) { + entry.setIsComplete(true); + } + } } } } @@ -131,7 +168,5 @@ } } return dto; - } - -} +} \ No newline at end of file Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java =================================================================== diff -u -r5b6e51b5d96619f619209830fdab0ed1ef572c05 -rbf965a1a2768bdec78ccb7b0ff8f7b694580e02c --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision 5b6e51b5d96619f619209830fdab0ed1ef572c05) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java (.../MonitoringAction.java) (revision bf965a1a2768bdec78ccb7b0ff8f7b694580e02c) @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -56,7 +57,12 @@ import org.lamsfoundation.lams.learning.service.ICoreLearnerService; import org.lamsfoundation.lams.learning.web.bean.ActivityURL; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.BranchingActivity; +import org.lamsfoundation.lams.learningdesign.ChosenBranchingActivity; +import org.lamsfoundation.lams.learningdesign.ContributionTypes; +import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.learningdesign.exception.LearningDesignException; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.lesson.Lesson; @@ -66,6 +72,7 @@ import org.lamsfoundation.lams.lesson.util.LearnerProgressNameComparator; import org.lamsfoundation.lams.monitoring.MonitoringConstants; import org.lamsfoundation.lams.monitoring.dto.ContributeActivityDTO; +import org.lamsfoundation.lams.monitoring.dto.ContributeActivityDTO.ContributeEntry; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceProxy; import org.lamsfoundation.lams.timezone.service.ITimezoneService; @@ -984,7 +991,7 @@ indfm.format(tzStartDate) + " " + user.getTimeZone().getDisplayName(userLocale)); } - List contributeActivities = getContributeActivities(lessonId); + List contributeActivities = getContributeActivities(lessonId, false); if (contributeActivities != null) { Gson gson = new GsonBuilder().create(); responseJSON.put("contributeActivities", new JSONArray(gson.toJson(contributeActivities))); @@ -1062,12 +1069,12 @@ responseJSON.put("activities", new JSONArray(activitiesMap.values())); responseJSON.put("numberPossibleLearners", lessonDetails.getNumberPossibleLearners()); - List contributeActivities = getContributeActivities(lessonId); + List contributeActivities = getContributeActivities(lessonId, true); if (contributeActivities != null) { Gson gson = new GsonBuilder().create(); responseJSON.put("contributeActivities", new JSONArray(gson.toJson(contributeActivities))); } - + response.setContentType("application/json;charset=utf-8"); response.getWriter().write(responseJSON.toString()); @@ -1341,10 +1348,12 @@ && parentActivity.getParentActivity().getActivityId().equals(branchingActivityId); } - private List getContributeActivities(Long lessonId) { + @SuppressWarnings("unchecked") + private List getContributeActivities(Long lessonId, boolean skipCompletedBranching) { IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet() .getServletContext()); List contributeActivities = monitoringService.getAllContributeActivityDTO(lessonId); + Lesson lesson = getLessonService().getLesson(lessonId); if (contributeActivities != null) { List resultContributeActivities = new ArrayList(); @@ -1354,6 +1363,22 @@ .getContributeEntries().iterator(); while (entryIterator.hasNext()) { ContributeActivityDTO.ContributeEntry contributeEntry = entryIterator.next(); + + // extra filtering for chosen branching: do not show in Sequence tab if all users were assigned + if (skipCompletedBranching + && ContributionTypes.CHOSEN_BRANCHING.equals(contributeEntry.getContributionType())) { + Set learners = new HashSet(lesson.getLessonClass().getLearners()); + ChosenBranchingActivity branching = (ChosenBranchingActivity) monitoringService + .getActivityById(contributeActivity.getActivityID()); + for (SequenceActivity branch : (Set) branching.getActivities()) { + Group group = branch.getSoleGroupForBranch(); + if (group != null) { + learners.removeAll(group.getUsers()); + } + } + contributeEntry.setIsComplete(learners.isEmpty()); + } + if (!contributeEntry.getIsRequired() || contributeEntry.getIsComplete()) { entryIterator.remove(); }