Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -4027,18 +4027,24 @@ Assessment assessment = session.getAssessment(); AssessmentUser newLeader = getUserByIdAndContent(leaderUserId, assessment.getContentId()); if (newLeader == null) { - return; - } - if (!newLeader.getSession().getSessionId().equals(toolSessionId)) { + User user = userManagementService.getUserById(Long.valueOf(leaderUserId).intValue()); + newLeader = new AssessmentUser(user.getUserDTO(), session); + createUser(newLeader); + + if (log.isDebugEnabled()) { + log.debug("Created user with ID " + leaderUserId + " to become a new leader for session with ID " + + toolSessionId); + } + } else if (!newLeader.getSession().getSessionId().equals(toolSessionId)) { throw new InvalidParameterException("User with ID " + leaderUserId + " belongs to session with ID " + newLeader.getSession().getSessionId() + " and not to session with ID " + toolSessionId); + } else { + AssessmentResult newLeaderResult = getLastAssessmentResult(assessment.getUid(), leaderUserId); + if (newLeaderResult != null) { + assessmentDao.delete(newLeaderResult); + } } - AssessmentResult newLeaderResult = getLastAssessmentResult(assessment.getUid(), leaderUserId); - if (newLeaderResult != null) { - assessmentDao.delete(newLeaderResult); - } - AssessmentResult existingLeaderResult = getLastAssessmentResult(assessment.getUid(), existingLeader.getUserId()); if (existingLeaderResult != null) { @@ -4055,6 +4061,10 @@ session.setGroupLeader(newLeader); assessmentDao.update(session); + if (log.isDebugEnabled()) { + log.debug("User with ID " + leaderUserId + " became a new leader for session with ID " + toolSessionId); + } + Set userIds = session.getAssessmentUsers().stream().collect( Collectors.mapping(assessmentUser -> assessmentUser.getUserId().intValue(), Collectors.toSet())); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java =================================================================== diff -u -r30b838c2ace64169f440c86a9756fd0959cf2323 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 30b838c2ace64169f440c86a9756fd0959cf2323) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -1060,6 +1060,18 @@ service.saveOrUpdateAssessment(assessment); } + @RequestMapping(path = "/displayChangeLeaderForGroupDialogFromActivity") + public String displayChangeLeaderForGroupDialogFromActivity( + // tell Change Leader dialog in Leader Selection tool which learner has already reached this activity + @RequestParam(name = AssessmentConstants.PARAM_TOOL_SESSION_ID) long toolSessionId) { + String availableLearners = service.getUsersBySession(toolSessionId).stream() + .collect(Collectors.mapping(user -> Long.toString(user.getUserId()), Collectors.joining(","))); + + return new StringBuilder("redirect:").append(Configuration.get(ConfigurationKeys.SERVER_URL)) + .append("tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do?toolSessionId=") + .append(toolSessionId).append("&availableLearners=").append(availableLearners).toString(); + } + @RequestMapping(path = "/changeLeaderForGroup", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.OK) Index: lams_tool_assessment/web/pages/monitoring/summary.jsp =================================================================== diff -u -rafae0757f330babf44bd7d881bcb2961602d5055 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision afae0757f330babf44bd7d881bcb2961602d5055) +++ lams_tool_assessment/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -667,8 +667,8 @@ function showChangeLeaderModal(toolSessionId) { $('#change-leader-modals').empty() - .load('tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do',{ - toolSessionId : toolSessionId + .load('',{ + toolSessionID : toolSessionId }); } Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java =================================================================== diff -u -rafae0757f330babf44bd7d881bcb2961602d5055 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision afae0757f330babf44bd7d881bcb2961602d5055) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -279,18 +279,30 @@ if (existingLeader == null || existingLeader.getUserId().equals(leaderUserId)) { return; } - Dokumaran dokumaran = session.getDokumaran(); + DokumaranUser newLeader = getUserByIDAndSession(leaderUserId, toolSessionId); if (newLeader == null) { - return; + User user = userManagementService.getUserById(Long.valueOf(leaderUserId).intValue()); + newLeader = new DokumaranUser(user.getUserDTO(), session); + saveOrUpdate(newLeader); + + if (log.isDebugEnabled()) { + log.debug("Created user with ID " + leaderUserId + " to become a new leader for session with ID " + + toolSessionId); + } } session.setGroupLeader(newLeader); dokumaranSessionDao.update(session); + if (log.isDebugEnabled()) { + log.debug("User with ID " + leaderUserId + " became a new leader for session with ID " + toolSessionId); + } + Set userIds = getUsersBySession(toolSessionId).stream() .collect(Collectors.mapping(dokumaranUser -> dokumaranUser.getUserId().intValue(), Collectors.toSet())); + Dokumaran dokumaran = session.getDokumaran(); ObjectNode jsonCommand = JsonNodeFactory.instance.objectNode(); jsonCommand.put("hookTrigger", "doku-leader-change-refresh-" + toolSessionId); learnerService.createCommandForLearners(dokumaran.getContentId(), userIds, jsonCommand.toString()); Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java =================================================================== diff -u -r8d372a4476d25a498b5af8c04e82576edc7b0976 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 8d372a4476d25a498b5af8c04e82576edc7b0976) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -278,6 +278,18 @@ } + @RequestMapping(path = "/displayChangeLeaderForGroupDialogFromActivity") + public String displayChangeLeaderForGroupDialogFromActivity( + @RequestParam(name = AttributeNames.PARAM_TOOL_SESSION_ID) long toolSessionId) { + // tell Change Leader dialog in Leader Selection tool which learner has already reached this activity + String availableLearners = dokumaranService.getUsersBySession(toolSessionId).stream() + .collect(Collectors.mapping(user -> Long.toString(user.getUserId()), Collectors.joining(","))); + + return new StringBuilder("redirect:").append(Configuration.get(ConfigurationKeys.SERVER_URL)) + .append("tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do?toolSessionId=") + .append(toolSessionId).append("&availableLearners=").append(availableLearners).toString(); + } + @RequestMapping(path = "/changeLeaderForGroup", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.OK) Index: lams_tool_doku/web/pages/monitoring/summary.jsp =================================================================== diff -u -rafae0757f330babf44bd7d881bcb2961602d5055 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision afae0757f330babf44bd7d881bcb2961602d5055) +++ lams_tool_doku/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -416,8 +416,8 @@ function showChangeLeaderModal(toolSessionId) { $('#change-leader-modals').empty() - .load('tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do',{ - toolSessionId : toolSessionId + .load('',{ + toolSessionID : toolSessionId }); } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java =================================================================== diff -u -r82e2146d85cc34f3724d59e0f1f678c1712ca329 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java (.../QaService.java) (revision 82e2146d85cc34f3724d59e0f1f678c1712ca329) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java (.../QaService.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -568,23 +568,32 @@ QaQueUsr newLeader = getUserByIdAndSession(leaderUserId, toolSessionId); if (newLeader == null) { - return; + newLeader = createUser(toolSessionId, Long.valueOf(leaderUserId).intValue()); + + if (logger.isDebugEnabled()) { + logger.debug("Created user with ID " + leaderUserId + " to become a new leader for session with ID " + + toolSessionId); + } + } else { + List newLeaderResponses = getResponsesByUserUid(newLeader.getUid()); + for (QaUsrResp response : newLeaderResponses) { + qaUsrRespDAO.removeUserResponse(response); + } } session.setGroupLeader(newLeader); qaSessionDAO.UpdateQaSession(session); - List newLeaderResponses = getResponsesByUserUid(newLeader.getUid()); - for (QaUsrResp response : newLeaderResponses) { - qaUsrRespDAO.removeUserResponse(response); - } - List existingLeaderResponses = getResponsesByUserUid(existingLeader.getUid()); for (QaUsrResp response : existingLeaderResponses) { response.setQaQueUser(newLeader); qaUsrRespDAO.updateUserResponse(response); } + if (logger.isDebugEnabled()) { + logger.debug("User with ID " + leaderUserId + " became a new leader for session with ID " + toolSessionId); + } + Set userIds = session.getQaQueUsers().stream() .collect(Collectors.mapping(qaQueUsr -> qaQueUsr.getQueUsrId().intValue(), Collectors.toSet())); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/LearningController.java =================================================================== diff -u -r82e2146d85cc34f3724d59e0f1f678c1712ca329 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/LearningController.java (.../LearningController.java) (revision 82e2146d85cc34f3724d59e0f1f678c1712ca329) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/LearningController.java (.../LearningController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -97,11 +97,6 @@ @Qualifier("qaMessageService") private MessageService messageService; - @RequestMapping("/") - public String unspecified() throws IOException, ServletException, ToolException { - return null; - } - @RequestMapping("/learning") public String execute(@ModelAttribute("qaLearningForm") QaLearningForm qaLearningForm, HttpServletRequest request) throws IOException, ServletException { Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/MonitoringController.java =================================================================== diff -u -r82e2146d85cc34f3724d59e0f1f678c1712ca329 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 82e2146d85cc34f3724d59e0f1f678c1712ca329) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -32,6 +32,7 @@ import java.util.Set; import java.util.TimeZone; import java.util.TreeSet; +import java.util.stream.Collectors; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -55,6 +56,8 @@ import org.lamsfoundation.lams.tool.qa.service.IQaService; import org.lamsfoundation.lams.tool.qa.util.QaSessionComparator; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; @@ -404,6 +407,18 @@ return "monitoring/PrintAnswers"; } + @RequestMapping(path = "/displayChangeLeaderForGroupDialogFromActivity") + public String displayChangeLeaderForGroupDialogFromActivity( + @RequestParam(name = AttributeNames.PARAM_TOOL_SESSION_ID) long toolSessionId) { + // tell Change Leader dialog in Leader Selection tool which learner has already reached this activity + String availableLearners = qaService.getUsersBySessionId(toolSessionId).stream() + .collect(Collectors.mapping(user -> Long.toString(user.getQueUsrId()), Collectors.joining(","))); + + return new StringBuilder("redirect:").append(Configuration.get(ConfigurationKeys.SERVER_URL)) + .append("tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do?toolSessionId=") + .append(toolSessionId).append("&availableLearners=").append(availableLearners).toString(); + } + @RequestMapping(path = "/changeLeaderForGroup", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.OK) Index: lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_laqa/web/monitoring/MonitoringMaincontent.jsp (.../MonitoringMaincontent.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -323,8 +323,8 @@ function showChangeLeaderModal(toolSessionId) { $('#change-leader-modals').empty() - .load('tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do',{ - toolSessionId : toolSessionId + .load('',{ + toolSessionID : toolSessionId }); } Index: lams_tool_leader/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rea8629a2ce87bf6bf4b91e1b1d47b908a3dd2e74 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_leader/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision ea8629a2ce87bf6bf4b91e1b1d47b908a3dd2e74) +++ lams_tool_leader/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -61,4 +61,5 @@ label.change.leader = Change leader label.note.leader.change = Note that the leader change only will take place for the activities in which the existing leader has not been set or commenced. label.current.leader = Current leader: -label.current.leader.none = none \ No newline at end of file +label.current.leader.none = none +label.learner.available.in.activity = Learner has reached the activity \ No newline at end of file Index: lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/web/controller/MonitoringController.java =================================================================== diff -u -rabc78aedaadb945b0be06d159b956712391fc296 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/web/controller/MonitoringController.java (.../MonitoringController.java) (revision abc78aedaadb945b0be06d159b956712391fc296) +++ lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.tool.leaderselection.dto.LeaderselectionDTO; @@ -148,7 +149,8 @@ } @RequestMapping("/displayChangeLeaderForGroupDialogFromActivity") - public String displayChangeLeaderForGroupDialog(@RequestParam long toolSessionId, Model model) { + public String displayChangeLeaderForGroupDialog(@RequestParam long toolSessionId, + @RequestParam(required = false) String availableLearners, Model model) { Long leaderSelectionToolContentId = toolService.getNearestLeaderSelectionToolContentId(toolSessionId); if (leaderSelectionToolContentId == null) { throw new InvalidParameterException( @@ -161,12 +163,13 @@ model.addAttribute("toolSessionId", toolSessionId); - return displayChangeLeaderForGroupDialog(leaderSelectionToolContentId, group.getGroupId(), model); + return displayChangeLeaderForGroupDialog(leaderSelectionToolContentId, group.getGroupId(), availableLearners, + model); } @RequestMapping("/displayChangeLeaderForGroupDialog") public String displayChangeLeaderForGroupDialog(@RequestParam long leaderSelectionToolContentId, - @RequestParam long groupId, Model model) { + @RequestParam long groupId, String availableLearners, Model model) { Leaderselection leaderSelection = leaderselectionService.getContentByContentId(leaderSelectionToolContentId); if (leaderSelection == null) { throw new InvalidParameterException( @@ -194,6 +197,10 @@ model.addAttribute("groupLeader", targetSession.getGroupLeader()); model.addAttribute("members", targetSession.getUsers()); + if (StringUtils.isNotBlank(availableLearners)) { + model.addAttribute("availableLearners", availableLearners.split(",")); + } + return "/pages/monitoring/changeLeaderDialog"; } Index: lams_tool_leader/web/pages/monitoring/changeLeaderDialog.jsp =================================================================== diff -u -rea8629a2ce87bf6bf4b91e1b1d47b908a3dd2e74 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_leader/web/pages/monitoring/changeLeaderDialog.jsp (.../changeLeaderDialog.jsp) (revision ea8629a2ce87bf6bf4b91e1b1d47b908a3dd2e74) +++ lams_tool_leader/web/pages/monitoring/changeLeaderDialog.jsp (.../changeLeaderDialog.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -69,6 +69,11 @@ + + +   + + Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -1397,18 +1397,24 @@ SubmitUser newLeader = getSessionUser(toolSessionId, leaderUserId); if (newLeader == null) { - return; + User user = userManagementService.getUserById(Long.valueOf(leaderUserId).intValue()); + newLeader = createSessionUser(user.getUserDTO(), toolSessionId); + + if (log.isDebugEnabled()) { + log.debug("Created user with ID " + leaderUserId + " to become a new leader for session with ID " + + toolSessionId); + } + } else { + List newLeaderSubmissions = submissionDetailsDAO.getBySessionAndLearner(toolSessionId, + leaderUserId); + for (SubmissionDetails submission : newLeaderSubmissions) { + submissionDetailsDAO.delete(submission); + } } session.setGroupLeader(newLeader); submitFilesSessionDAO.update(session); - List newLeaderSubmissions = submissionDetailsDAO.getBySessionAndLearner(toolSessionId, - leaderUserId); - for (SubmissionDetails submission : newLeaderSubmissions) { - submissionDetailsDAO.delete(submission); - } - List existingLeaderSubmissions = submissionDetailsDAO.getBySessionAndLearner(toolSessionId, existingLeader.getUserID()); @@ -1417,6 +1423,10 @@ submissionDetailsDAO.update(submission); } + if (log.isDebugEnabled()) { + log.debug("User with ID " + leaderUserId + " became a new leader for session with ID " + toolSessionId); + } + Set userIds = getUsersBySession(toolSessionId).stream() .collect(Collectors.mapping(submitUser -> submitUser.getUserID(), Collectors.toSet())); Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/MonitoringController.java =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/MonitoringController.java (.../MonitoringController.java) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -34,6 +34,7 @@ import java.util.SortedSet; import java.util.TimeZone; import java.util.TreeSet; +import java.util.stream.Collectors; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -56,6 +57,8 @@ import org.lamsfoundation.lams.tool.sbmt.model.SubmitUser; import org.lamsfoundation.lams.tool.sbmt.service.ISubmitFilesService; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; @@ -558,6 +561,18 @@ } } + @RequestMapping(path = "/displayChangeLeaderForGroupDialogFromActivity") + public String displayChangeLeaderForGroupDialogFromActivity( + @RequestParam(name = AttributeNames.PARAM_TOOL_SESSION_ID) long toolSessionId) { + // tell Change Leader dialog in Leader Selection tool which learner has already reached this activity + String availableLearners = submitFilesService.getUsersBySession(toolSessionId).stream() + .collect(Collectors.mapping(user -> Integer.toString(user.getUserID()), Collectors.joining(","))); + + return new StringBuilder("redirect:").append(Configuration.get(ConfigurationKeys.SERVER_URL)) + .append("tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do?toolSessionId=") + .append(toolSessionId).append("&availableLearners=").append(availableLearners).toString(); + } + @RequestMapping(path = "/changeLeaderForGroup", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.OK) Index: lams_tool_sbmt/web/monitoring/parts/summary.jsp =================================================================== diff -u -rafae0757f330babf44bd7d881bcb2961602d5055 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_sbmt/web/monitoring/parts/summary.jsp (.../summary.jsp) (revision afae0757f330babf44bd7d881bcb2961602d5055) +++ lams_tool_sbmt/web/monitoring/parts/summary.jsp (.../summary.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -145,8 +145,8 @@ function showChangeLeaderModal(toolSessionId) { $('#change-leader-modals').empty() - .load('tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do',{ - toolSessionId : toolSessionId + .load('',{ + toolSessionID : toolSessionId }); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r281e19ba98aa6bf38fc1f25507a9098304d668fb -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 281e19ba98aa6bf38fc1f25507a9098304d668fb) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -2235,16 +2235,26 @@ Scratchie scratchie = session.getScratchie(); ScratchieUser newLeader = getUserByUserIDAndContentID(leaderUserId, scratchie.getContentId()); if (newLeader == null) { - return; - } - if (!newLeader.getSession().getSessionId().equals(toolSessionId)) { + User user = userManagementService.getUserById(Long.valueOf(leaderUserId).intValue()); + newLeader = new ScratchieUser(user.getUserDTO(), session); + createUser(newLeader); + + if (log.isDebugEnabled()) { + log.debug("Created user with ID " + leaderUserId + " to become a new leader for session with ID " + + toolSessionId); + } + } else if (!newLeader.getSession().getSessionId().equals(toolSessionId)) { throw new InvalidParameterException("User with ID " + leaderUserId + " belongs to session with ID " + newLeader.getSession().getSessionId() + " and not to session with ID " + toolSessionId); } session.setGroupLeader(newLeader); scratchieSessionDao.update(session); + if (log.isDebugEnabled()) { + log.debug("User with ID " + leaderUserId + " became a new leader for session with ID " + toolSessionId); + } + Set userIds = getUsersBySession(toolSessionId).stream() .collect(Collectors.mapping(scratchieUser -> scratchieUser.getUserId().intValue(), Collectors.toSet())); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -r281e19ba98aa6bf38fc1f25507a9098304d668fb -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 281e19ba98aa6bf38fc1f25507a9098304d668fb) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -31,6 +31,7 @@ import java.util.Set; import java.util.TimeZone; import java.util.TreeSet; +import java.util.stream.Collectors; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; @@ -57,6 +58,8 @@ import org.lamsfoundation.lams.tool.scratchie.service.IScratchieService; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.JsonUtil; @@ -297,6 +300,18 @@ return "pages/monitoring/parts/statisticpart"; } + @RequestMapping(path = "/displayChangeLeaderForGroupDialogFromActivity") + public String displayChangeLeaderForGroupDialogFromActivity( + @RequestParam(name = AttributeNames.PARAM_TOOL_SESSION_ID) long toolSessionId) { + // tell Change Leader dialog in Leader Selection tool which learner has already reached this activity + String availableLearners = scratchieService.getUsersBySession(toolSessionId).stream() + .collect(Collectors.mapping(user -> Long.toString(user.getUserId()), Collectors.joining(","))); + + return new StringBuilder("redirect:").append(Configuration.get(ConfigurationKeys.SERVER_URL)) + .append("tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do?toolSessionId=") + .append(toolSessionId).append("&availableLearners=").append(availableLearners).toString(); + } + @RequestMapping(path = "/changeLeaderForGroup", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.OK) Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -r281e19ba98aa6bf38fc1f25507a9098304d668fb -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 281e19ba98aa6bf38fc1f25507a9098304d668fb) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -288,8 +288,8 @@ function showChangeLeaderModal(toolSessionId) { $('#change-leader-modals').empty() - .load('tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do',{ - toolSessionId : toolSessionId + .load('',{ + toolSessionID : toolSessionId }); } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java (.../VoteService.java) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java (.../VoteService.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -243,7 +243,18 @@ VoteQueUsr newLeader = getVoteUserBySession(leaderUserId, session.getUid()); if (newLeader == null) { - return; + User user = userManagementService.getUserById(Long.valueOf(leaderUserId).intValue()); + + String userName = user.getLogin(); + String fullName = user.getFirstName() + " " + user.getLastName(); + + newLeader = new VoteQueUsr(leaderUserId, userName, fullName, session, new TreeSet()); + createVoteQueUsr(newLeader); + + if (logger.isDebugEnabled()) { + logger.debug("Created user with ID " + leaderUserId + " to become a new leader for session with ID " + + toolSessionId); + } } session.setGroupLeader(newLeader); @@ -254,7 +265,10 @@ for (VoteUsrAttempt vote : existingLeader.getVoteUsrAttempts()) { vote.setVoteQueUsr(newLeader); voteUsrAttemptDAO.updateVoteUsrAttempt(vote); + } + if (logger.isDebugEnabled()) { + logger.debug("User with ID " + leaderUserId + " became a new leader for session with ID " + toolSessionId); } Set userIds = session.getVoteQueUsers().stream() Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/controller/MonitoringController.java =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/controller/MonitoringController.java (.../MonitoringController.java) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -30,6 +30,7 @@ import java.util.SortedSet; import java.util.TimeZone; import java.util.TreeMap; +import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -49,6 +50,8 @@ import org.lamsfoundation.lams.tool.vote.service.IVoteService; import org.lamsfoundation.lams.tool.vote.util.VoteComparator; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.DateUtil; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.session.SessionManager; @@ -430,6 +433,18 @@ return "/monitoring/MonitoringMaincontent"; } + @RequestMapping(path = "/displayChangeLeaderForGroupDialogFromActivity") + public String displayChangeLeaderForGroupDialogFromActivity( + @RequestParam(name = AttributeNames.PARAM_TOOL_SESSION_ID) long toolSessionId) { + // tell Change Leader dialog in Leader Selection tool which learner has already reached this activity + String availableLearners = voteService.getSessionBySessionId(toolSessionId).getVoteQueUsers().stream() + .collect(Collectors.mapping(user -> Long.toString(user.getQueUsrId()), Collectors.joining(","))); + + return new StringBuilder("redirect:").append(Configuration.get(ConfigurationKeys.SERVER_URL)) + .append("tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do?toolSessionId=") + .append(toolSessionId).append("&availableLearners=").append(availableLearners).toString(); + } + @RequestMapping(path = "/changeLeaderForGroup", method = RequestMethod.POST) @ResponseBody @ResponseStatus(HttpStatus.OK) Index: lams_tool_vote/web/monitoring/SummaryContent.jsp =================================================================== diff -u -rf86004309489cb81f283d1962b481b4bbb3facd6 -r3eb8dcbf308a6b082c30d57f51e7000ebbe1c184 --- lams_tool_vote/web/monitoring/SummaryContent.jsp (.../SummaryContent.jsp) (revision f86004309489cb81f283d1962b481b4bbb3facd6) +++ lams_tool_vote/web/monitoring/SummaryContent.jsp (.../SummaryContent.jsp) (revision 3eb8dcbf308a6b082c30d57f51e7000ebbe1c184) @@ -25,8 +25,8 @@ function showChangeLeaderModal(toolSessionId) { $('#change-leader-modals').empty() - .load('tool/lalead11/monitoring/displayChangeLeaderForGroupDialogFromActivity.do',{ - toolSessionId : toolSessionId + .load('',{ + toolSessionID : toolSessionId }); }