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.7 -r1.8 --- lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java 19 Feb 2014 17:59:02 -0000 1.7 +++ lams_central/src/java/org/lamsfoundation/lams/web/OrganisationGroupAction.java 29 Apr 2014 15:55:51 -0000 1.8 @@ -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/orgGrouping.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/orgGrouping.jsp,v diff -u -r1.2 -r1.3 --- lams_central/web/orgGrouping.jsp 24 Sep 2013 13:47:21 -0000 1.2 +++ lams_central/web/orgGrouping.jsp 29 Apr 2014 15:55:51 -0000 1.3 @@ -16,16 +16,17 @@ Index: lams_central/web/includes/javascript/orgGrouping.js =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/includes/javascript/orgGrouping.js,v diff -u -r1.1 -r1.2 --- lams_central/web/includes/javascript/orgGrouping.js 24 Sep 2013 13:47:22 -0000 1.1 +++ lams_central/web/includes/javascript/orgGrouping.js 29 Apr 2014 15:55:51 -0000 1.2 @@ -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/includes/javascript/authoring/authoringActivity.js =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/includes/javascript/authoring/authoringActivity.js,v diff -u -r1.28 -r1.29 --- lams_central/web/includes/javascript/authoring/authoringActivity.js 24 Apr 2014 10:34:47 -0000 1.28 +++ lams_central/web/includes/javascript/authoring/authoringActivity.js 29 Apr 2014 15:55:51 -0000 1.29 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_central/web/includes/javascript/authoring/authoringProperty.js,v diff -u -r1.18 -r1.19 --- lams_central/web/includes/javascript/authoring/authoringProperty.js 24 Apr 2014 10:34:47 -0000 1.18 +++ lams_central/web/includes/javascript/authoring/authoringProperty.js 29 Apr 2014 15:55:51 -0000 1.19 @@ -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_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java,v diff -u -r1.7 -r1.8 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java 28 Apr 2014 12:05:54 -0000 1.7 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/ContributeDTOFactory.java 29 Apr 2014 15:55:49 -0000 1.8 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java,v diff -u -r1.116 -r1.117 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 28 Apr 2014 12:05:55 -0000 1.116 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/MonitoringAction.java 29 Apr 2014 15:55:49 -0000 1.117 @@ -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(); }