Index: lams_tool_scratchie/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r7e1ec952df67f307b1840179b78f2e762b5ffdcd -r3dee98435d9284b0993e2927ba9e5afadf894782 --- lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7e1ec952df67f307b1840179b78f2e762b5ffdcd) +++ lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 3dee98435d9284b0993e2927ba9e5afadf894782) @@ -198,6 +198,7 @@ label.waiting.for.leader.submit.notebook =Time limit set by teacher is expired. Please wait until a group leader submits notebook. label.authoring.advanced.shuffle.items =Shuffle questions label.summary.downloaded =Excel file downloaded. +label.summary.reached.activity =Learner reached this activity label.number.groups.finished =Number of groups finished label.graph.help =In the graph(s) below, click on a bar in the graph and then use your mouse wheel to zoom in and out of the graph. Once you zoom in, the grey selection in the bottom graph can be dragged left or right to show a different set of marks. label.lowest.mark =Lowest mark: Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java =================================================================== diff -u -r7e1ec952df67f307b1840179b78f2e762b5ffdcd -r3dee98435d9284b0993e2927ba9e5afadf894782 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java (.../GroupSummary.java) (revision 7e1ec952df67f307b1840179b78f2e762b5ffdcd) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java (.../GroupSummary.java) (revision 3dee98435d9284b0993e2927ba9e5afadf894782) @@ -20,7 +20,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.scratchie.dto; import java.util.Collection; @@ -39,6 +38,7 @@ private Long leaderUid; private Collection users; + private Collection usersWhoReachedActivity; private Collection itemDtos; private Collection answers; @@ -91,7 +91,7 @@ public void setTotalAttempts(int totalAttempts) { this.totalAttempts = totalAttempts; } - + public String getTotalPercentage() { return totalPercentage; } @@ -101,11 +101,11 @@ } public Long getLeaderUid() { - return leaderUid; + return leaderUid; } public void setLeaderUid(Long leaderUid) { - this.leaderUid = leaderUid; + this.leaderUid = leaderUid; } public Collection getUsers() { @@ -131,4 +131,13 @@ public void setAnswers(Collection answers) { this.answers = answers; } + + 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/ScratchieServiceImpl.java =================================================================== diff -u -r7e1ec952df67f307b1840179b78f2e762b5ffdcd -r3dee98435d9284b0993e2927ba9e5afadf894782 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 7e1ec952df67f307b1840179b78f2e762b5ffdcd) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 3dee98435d9284b0993e2927ba9e5afadf894782) @@ -40,6 +40,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeSet; +import java.util.stream.Collectors; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; @@ -685,28 +686,40 @@ 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()); - } - usersToShow.add(user); + + scratchieUser.setPortraitId(user.getPortraitUuid()); + usersToShow.add(scratchieUser); } groupSummary.setUsers(usersToShow); Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -r1245f5ec3cc26b9de04869da72858f1fec12bb71 -r3dee98435d9284b0993e2927ba9e5afadf894782 --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 1245f5ec3cc26b9de04869da72858f1fec12bb71) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 3dee98435d9284b0993e2927ba9e5afadf894782) @@ -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)}" }); @@ -209,20 +212,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=""'; } }