Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/UserForm.java =================================================================== diff -u -r365a2c22199a5fe2b1e55e18cbf4b6d2596f202b -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/UserForm.java (.../UserForm.java) (revision 365a2c22199a5fe2b1e55e18cbf4b6d2596f202b) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/UserForm.java (.../UserForm.java) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -22,6 +22,8 @@ package org.lamsfoundation.lams.admin.web.form; +import java.util.Date; + public class UserForm { private Integer orgId; @@ -50,6 +52,7 @@ private boolean tutorialsDisabled = false; private boolean firstLogin = true; private String timeZone; + private Date createDate; private Long userTheme; private boolean twoFactorAuthenticationEnabled = false; // @@ -263,6 +266,14 @@ this.timeZone = timeZone; } + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + public Long getUserTheme() { return userTheme; } Index: lams_admin/web/user.jsp =================================================================== diff -u -re6dc4db4137cfd6b07a4aa79711b9d12b39fb78e -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_admin/web/user.jsp (.../user.jsp) (revision e6dc4db4137cfd6b07a4aa79711b9d12b39fb78e) +++ lams_admin/web/user.jsp (.../user.jsp) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -473,13 +473,13 @@ - + : - + Index: lams_tool_doku/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -rd2c76e5308cd9eff91c235b3fa8e9309bbc58d50 -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_tool_doku/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision d2c76e5308cd9eff91c235b3fa8e9309bbc58d50) +++ lams_tool_doku/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -18,6 +18,7 @@ label.authoring.heading.advance.desc =Please input advance options for doKumaran label.authoring.basic.title =Title label.authoring.basic.instruction =Instruction +label.authoring.basic.description =Description label.authoring.advance.lock.on.finished =Lock when finished label.authoring.save.button =Save label.authoring.cancel.button =Cancel Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java =================================================================== diff -u -ra61b6ad192148c0ae514f37a9b488c3a15535ee9 -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java (.../GroupSummary.java) (revision a61b6ad192148c0ae514f37a9b488c3a15535ee9) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java (.../GroupSummary.java) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -40,6 +40,7 @@ private int numberColumns; private Collection users; + private Collection usersWhoReachedActivity; private Collection itemDtos; private Collection optionDtos; @@ -140,4 +141,13 @@ public void setOptionDtos(Collection optionDtos) { this.optionDtos = optionDtos; } + + public Collection getUsersWhoReachedActivity() { + return usersWhoReachedActivity; + } + + public void setUsersWhoReachedActivity(Collection usersWhoReachedActivity) { + this.usersWhoReachedActivity = usersWhoReachedActivity; + } + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -ra61b6ad192148c0ae514f37a9b488c3a15535ee9 -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision a61b6ad192148c0ae514f37a9b488c3a15535ee9) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -310,11 +310,8 @@ /** * @param contentId - * @param isIncludeOnlyLeaders - * if true - return Summaries only for leader, all users in a group otherwise - * @return */ - List getMonitoringSummary(Long contentId, boolean addPortraits); + List getMonitoringSummary(Long contentId); List getGroupSummariesByItem(Long contentId, Long itemUid); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -ra61b6ad192148c0ae514f37a9b488c3a15535ee9 -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision a61b6ad192148c0ae514f37a9b488c3a15535ee9) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -699,34 +699,45 @@ * If isIncludeOnlyLeaders then include the portrait ids needed for monitoring. If false then it * is probably the export and that doesn't need portraits. */ - public List getMonitoringSummary(Long contentId, boolean addPortraits) { + public List getMonitoringSummary(Long contentId) { List groupSummaryList = new ArrayList<>(); List sessions = scratchieSessionDao.getByContentId(contentId); for (ScratchieSession session : sessions) { + Long sessionId = session.getSessionId(); + Collection groupUsers = toolService.getToolSession(sessionId).getLearners(); + // one new summary for one session. GroupSummary groupSummary = new GroupSummary(session); int totalAttempts = scratchieAnswerVisitDao.getLogCountTotal(sessionId); groupSummary.setTotalAttempts(totalAttempts); - List sessionUsers = scratchieUserDao.getBySessionID(sessionId); - List usersToShow = new LinkedList<>(); - for (ScratchieUser user : sessionUsers) { + Map sessionUsers = getUsersBySession(sessionId).stream() + .collect(Collectors.toMap(ScratchieUser::getUserId, s -> s)); + groupSummary.setUsersWhoReachedActivity(sessionUsers.keySet()); - boolean isUserGroupLeader = session.isUserGroupLeader(user.getUid()); - if (isUserGroupLeader) { - groupSummary.setLeaderUid(user.getUid()); + List usersToShow = new LinkedList<>(); + for (User user : groupUsers) { + boolean isUserGroupLeader = false; + ScratchieUser scratchieUser = sessionUsers.get(user.getUserId().longValue()); + if (scratchieUser == null) { + scratchieUser = new ScratchieUser(); + scratchieUser.setFirstName(user.getFirstName()); + scratchieUser.setLastName(user.getLastName()); + scratchieUser.setLoginName(user.getLogin()); + scratchieUser.setUserId(user.getUserId().longValue()); + } else { + isUserGroupLeader = session.isUserGroupLeader(scratchieUser.getUid()); + if (isUserGroupLeader) { + groupSummary.setLeaderUid(scratchieUser.getUid()); + } } - if (addPortraits) { - User systemUser = (User) userManagementService.findById(User.class, user.getUserId().intValue()); - user.setPortraitId( - systemUser.getPortraitUuid() == null ? null : systemUser.getPortraitUuid().toString()); - } - usersToShow.add(user); + scratchieUser.setPortraitId(user.getPortraitUuid() == null ? null : user.getPortraitUuid().toString()); + usersToShow.add(scratchieUser); } groupSummary.setUsers(usersToShow); @@ -1549,7 +1560,7 @@ row.addCell(getMessage("label.mark")); row.addCell(getMessage("label.group")); - List summaryList = getMonitoringSummary(contentId, false); + List summaryList = getMonitoringSummary(contentId); for (GroupSummary summary : summaryList) { for (ScratchieUser user : summary.getUsers()) { row = researchAndAnalysisSheet.initRow(); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -rac33d20fb7883183fe443062a74f163abc98f012 -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision ac33d20fb7883183fe443062a74f163abc98f012) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -98,7 +98,7 @@ model.addAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); - List summaryList = scratchieService.getMonitoringSummary(contentId, true); + List summaryList = scratchieService.getMonitoringSummary(contentId); Scratchie scratchie = scratchieService.getScratchieByContentId(contentId); Set learners = scratchieService.getAllLeaders(contentId); Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -ra61b6ad192148c0ae514f37a9b488c3a15535ee9 -r3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision a61b6ad192148c0ae514f37a9b488c3a15535ee9) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 3a4e0fbc4b00ff567f1dc7561cf9596fedab7c8e) @@ -56,7 +56,8 @@ "", "", 'portraitId', - 'isLeader' + 'isLeader', + 'reachedActivity' ], colModel:[ {name:'id', index:'id', width:0, sorttype:"int", hidden: true}, @@ -72,6 +73,7 @@ }, {name:'portraitId', index:'portraitId', width:0, hidden: true}, {name:'isLeader', index:'isLeader', width:0, hidden: true}, + {name:'reachedActivity', index:'reachedActivity', width:0, hidden: true}, ], ondblClickRow: function(rowid) { var jqGrid = $("#list${summary.sessionId}"); @@ -112,12 +114,13 @@ jQuery("#list${summary.sessionId}").addRowData(${i.index + 1}, { id:"${i.index + 1}", userId:"${user.userId}", - sessionId:"${user.session.sessionId}", + sessionId:"${empty user.session ? '' : user.session.sessionId}", userName:"${user.lastName}, ${user.firstName}", totalAttempts:"${summary.leaderUid eq user.uid ? summary.totalAttempts : ''}", mark:"${summary.leaderUid eq user.uid ? (summary.totalAttempts == 0 ? '-' : summary.mark) : ''}", portraitId:"${user.portraitId}", - isLeader : "${summary.leaderUid eq user.uid}" + isLeader : "${summary.leaderUid eq user.uid}", + reachedActivity : "${summary.getUsersWhoReachedActivity().contains(user.userId)}" }); @@ -210,20 +213,30 @@ function userNameFormatter (cellvalue, options, rowObject) { var name = definePortraitPopover(rowObject.portraitId, rowObject.userId, rowObject.userName); + var icon = ''; + if (rowObject.isLeader == 'true') { - var leaderIcon = ' '; + icon = ' '; + } else if (rowObject.reachedActivity == 'true') { + icon = ' '; + } + + if (icon != '') { if (rowObject.portraitId == '') { - name += leaderIcon; + name += icon; } else { - name = name.replace('', leaderIcon + ''); + name = name.replace('', icon + ''); } } + return name; } function leaderRowFormatter (rowID, val, rawObject, cm, rdata) { if (rdata.isLeader == 'true') { return 'class="info"'; + } else if (rdata.reachedActivity == 'true') { + return 'title=""'; } }