Index: lams_monitoring/web/css/_tblmonitor_base.scss =================================================================== diff -u -r29b264ddf2450e67397b935d9d232eac92050d7e -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_monitoring/web/css/_tblmonitor_base.scss (.../_tblmonitor_base.scss) (revision 29b264ddf2450e67397b935d9d232eac92050d7e) +++ lams_monitoring/web/css/_tblmonitor_base.scss (.../_tblmonitor_base.scss) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -379,20 +379,6 @@ background-color: $brand-success; } -span.user-response { - padding: 1px 3px; - color: white; - border-radius: 3px; -} - -span.successful-response { - background-color: $brand-success; -} - -span.wrong-response { - background-color: $brand-danger; -} - #closeBranchingButton { font-weight: inherit !important; margin-left: 7px; Index: lams_tool_scratchie/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r7c8332d32bfb95927b393aa310c9cf214c6bc49b -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) +++ lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -61,7 +61,6 @@ label.monitoring.summary.mark =Mark label.monitoring.summary.learners.summary =Learner's summary label.monitoring.summary.report.by.scratchie =Report by question -label.monitoring.summary.report.by.user =Report by learner label.monitoring.summary.attempt =Attempt label.monitoring.summary.attempt.number =Attempt # label.monitoring.summary.scratchie =Scratchie Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java =================================================================== diff -u -r22ca3de0e9fe138e44fc36be1abc6fabbbdc4002 -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision 22ca3de0e9fe138e44fc36be1abc6fabbbdc4002) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -86,7 +86,7 @@ @OneToMany(cascade = CascadeType.ALL) @OrderBy("order_id ASC") @JoinColumn(name = "scratchie_uid") - private Set scratchieItems = new HashSet<>();; + private Set scratchieItems = new HashSet<>(); @Column(name = "extra_point") private boolean extraPoint; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r7c8332d32bfb95927b393aa310c9cf214c6bc49b -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; import org.lamsfoundation.lams.events.IEventNotificationService; @@ -420,4 +421,5 @@ /** Get the statistics such as average, max, min for the marks. Used in monitoring */ LeaderResultsDTO getLeaderResultsDTOForLeaders(Long contentId); + Map prepareStudentChoicesData(Scratchie scratchie); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r7c8332d32bfb95927b393aa310c9cf214c6bc49b -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -1636,6 +1636,71 @@ return newDto; } + @Override + public Map prepareStudentChoicesData(Scratchie scratchie) { + Map model = new HashMap<>(); + + Set items = new TreeSet<>(new ScratchieItemComparator()); + items.addAll(scratchie.getScratchieItems()); + model.put("items", items); + + //find second page in excel file + List sheets = exportExcel(scratchie.getContentId()); + ExcelSheet secondPageData = sheets.get(1); + + //correct answers + ExcelRow correctAnswersRow = secondPageData.getRow(4); + model.put("correctAnswers", correctAnswersRow); + + //prepare data for displaying user answers table + int groupsSize = countSessionsByContentId(scratchie.getContentId()); + ArrayList sessionDtos = new ArrayList<>(); + for (int groupCount = 0; groupCount < groupsSize; groupCount++) { + ExcelRow groupRow = secondPageData.getRows().get(6 + groupCount); + + GroupSummary groupSummary = new GroupSummary(); + String sessionName = groupRow.getCell(0).toString(); + groupSummary.setSessionName(sessionName); + + Collection itemDtos = new ArrayList<>(); + for (int i = 1; i <= items.size(); i++) { + ScratchieItemDTO itemDto = new ScratchieItemDTO(); + String answersSequence = groupRow.getCell(i).toString(); + String[] answerLetters = answersSequence.split(", "); + + Set answers = new LinkedHashSet<>(); + for (int j = 0; j < answerLetters.length; j++) { + String answerLetter = answerLetters[j]; + String correctAnswerLetter = correctAnswersRow.getCell(i).toString(); + + ScratchieAnswer answer = new ScratchieAnswer(); + answer.setDescription(answerLetter); + answer.setCorrect(correctAnswerLetter.equals(answerLetter)); + + answers.add(answer); + } + + itemDto.setAnswers(answers); + itemDtos.add(itemDto); + } + groupSummary.setItemDtos(itemDtos); + + if (!itemDtos.isEmpty()) { + int total = (Integer) groupRow.getCell(itemDtos.size() + 1); + groupSummary.setMark(total); + + // round the percentage cell + String totalPercentage = String + .valueOf(Math.round(Double.valueOf(groupRow.getCell(itemDtos.size() + 2).toString()))); + groupSummary.setTotalPercentage(totalPercentage); + } + + sessionDtos.add(groupSummary); + } + model.put("sessionDtos", sessionDtos); + return model; + } + // ***************************************************************************** // private methods // ***************************************************************************** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -r3317bc79e858810750b2d6aacbcb4a0a6d36b841 -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 3317bc79e858810750b2d6aacbcb4a0a6d36b841) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -25,8 +25,8 @@ import java.io.IOException; import java.util.Date; -import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.TimeZone; @@ -55,7 +55,6 @@ import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; -import org.lamsfoundation.lams.util.excel.ExcelCell; import org.lamsfoundation.lams.util.excel.ExcelSheet; import org.lamsfoundation.lams.util.excel.ExcelUtil; import org.lamsfoundation.lams.web.session.SessionManager; @@ -65,6 +64,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -82,12 +82,12 @@ private IScratchieService scratchieService; @RequestMapping("/summary") - private String summary(HttpServletRequest request) { + private String summary(HttpServletRequest request, Model model) { // initialize Session Map SessionMap sessionMap = new SessionMap<>(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); - request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + 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); @@ -102,8 +102,8 @@ UserDTO teacher = (UserDTO) ss.getAttribute(AttributeNames.USER); TimeZone teacherTimeZone = teacher.getTimeZone(); Date tzSubmissionDeadline = DateUtil.convertToTimeZoneFromDefault(teacherTimeZone, submissionDeadline); - request.setAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE, tzSubmissionDeadline.getTime()); - request.setAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE_DATESTRING, + model.addAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE, tzSubmissionDeadline.getTime()); + model.addAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE_DATESTRING, DateUtil.convertToStringForJSON(submissionDeadline, request.getLocale())); } @@ -131,6 +131,9 @@ sessionMap.put(ScratchieConstants.ATTR_REFLECTIONS, reflections); } + Map modelAttributes = scratchieService.prepareStudentChoicesData(scratchie); + model.addAllAttributes(modelAttributes); + return "pages/monitoring/monitoring"; } @@ -212,7 +215,7 @@ */ @RequestMapping(path = "/exportExcel", method = RequestMethod.POST) @ResponseStatus(HttpStatus.OK) - private void exportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + private void exportExcel(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException { String sessionMapID = request.getParameter(ScratchieConstants.ATTR_SESSION_MAP_ID); SessionMap sessionMap = (SessionMap) request.getSession() .getAttribute(sessionMapID); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java =================================================================== diff -u -rc1d7d8347ccf1a0b99e55d8152c4e79381866644 -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision c1d7d8347ccf1a0b99e55d8152c4e79381866644) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -28,9 +28,9 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.TreeSet; @@ -44,10 +44,7 @@ import org.lamsfoundation.lams.tool.scratchie.ScratchieConstants; import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionDTO; import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionItemDTO; -import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; -import org.lamsfoundation.lams.tool.scratchie.dto.ScratchieItemDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; -import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; import org.lamsfoundation.lams.tool.scratchie.service.IScratchieService; @@ -62,8 +59,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @@ -118,70 +117,14 @@ * Shows tra StudentChoices page */ @RequestMapping("/traStudentChoices") - public String traStudentChoices(HttpServletRequest request) throws IOException, ServletException { - long toolContentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + public String traStudentChoices(@RequestParam(name = AttributeNames.PARAM_TOOL_CONTENT_ID) long toolContentId, + Model model) throws IOException, ServletException { Scratchie scratchie = scratchieService.getScratchieByContentId(toolContentId); - Set items = new TreeSet<>(new ScratchieItemComparator()); - items.addAll(scratchie.getScratchieItems()); - request.setAttribute("items", items); + Map modelAttributes = scratchieService.prepareStudentChoicesData(scratchie); + model.addAllAttributes(modelAttributes); - //find second page in excel file - List sheets = scratchieService.exportExcel(toolContentId); - ExcelSheet secondPageData = sheets.get(1); - - //correct answers - ExcelRow correctAnswersRow = secondPageData.getRow(4); - request.setAttribute("correctAnswers", correctAnswersRow); - - //prepare data for displaying user answers table - int groupsSize = scratchieService.countSessionsByContentId(toolContentId); - ArrayList sessionDtos = new ArrayList<>(); - for (int groupCount = 0; groupCount < groupsSize; groupCount++) { - ExcelRow groupRow = secondPageData.getRows().get(6 + groupCount); - - GroupSummary groupSummary = new GroupSummary(); - String sessionName = groupRow.getCell(0).toString(); - groupSummary.setSessionName(sessionName); - - Collection itemDtos = new ArrayList<>(); - for (int i = 1; i <= items.size(); i++) { - ScratchieItemDTO itemDto = new ScratchieItemDTO(); - String answersSequence = groupRow.getCell(i).toString(); - String[] answerLetters = answersSequence.split(", "); - - Set answers = new LinkedHashSet<>(); - for (int j = 0; j < answerLetters.length; j++) { - String answerLetter = answerLetters[j]; - String correctAnswerLetter = correctAnswersRow.getCell(i).toString(); - - ScratchieAnswer answer = new ScratchieAnswer(); - answer.setDescription(answerLetter); - answer.setCorrect(correctAnswerLetter.equals(answerLetter)); - - answers.add(answer); - } - - itemDto.setAnswers(answers); - itemDtos.add(itemDto); - } - groupSummary.setItemDtos(itemDtos); - - if (!itemDtos.isEmpty()) { - int total = (Integer) groupRow.getCell(itemDtos.size() + 1); - groupSummary.setMark(total); - - // round the percentage cell - String totalPercentage = String - .valueOf(Math.round(Double.valueOf(groupRow.getCell(itemDtos.size() + 2).toString()))); - groupSummary.setTotalPercentage(totalPercentage); - } - - sessionDtos.add(groupSummary); - } - request.setAttribute("sessionDtos", sessionDtos); - - request.setAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID, toolContentId); + model.addAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID, toolContentId); return "pages/tblmonitoring/traStudentChoices"; } Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -r3317bc79e858810750b2d6aacbcb4a0a6d36b841 -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 3317bc79e858810750b2d6aacbcb4a0a6d36b841) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -284,6 +284,9 @@
+ + + <%@ include file="../tblmonitoring/traStudentChoices.jsp"%>
@@ -296,28 +299,14 @@
-
- - - -
- - -

${summaryTitle}

-
- + - ${summary.sessionName} + ${summary.sessionName}
Index: lams_tool_scratchie/web/pages/tblmonitoring/traStudentChoices.jsp =================================================================== diff -u -rbac8a1d9f2b37ca6e26f275886b9e6603a6c0fb7 -r9ad3683dd034fb1f5e76f9c1094893c97c159eea --- lams_tool_scratchie/web/pages/tblmonitoring/traStudentChoices.jsp (.../traStudentChoices.jsp) (revision bac8a1d9f2b37ca6e26f275886b9e6603a6c0fb7) +++ lams_tool_scratchie/web/pages/tblmonitoring/traStudentChoices.jsp (.../traStudentChoices.jsp) (revision 9ad3683dd034fb1f5e76f9c1094893c97c159eea) @@ -6,75 +6,88 @@ } /*---- fixed first column ----*/ - table { + #questions-data { position: relative; } - thead th { + #questions-data thead th { position: -webkit-sticky; /* for Safari */ position: sticky; top: 0; background: #FFF; } - thead th:first-child { + #questions-data thead th:first-child { left: 0; z-index: 1; } - tbody th { + #questions-data tbody th { position: -webkit-sticky; /* for Safari */ position: sticky; left: 0; background: #FFF; } + + span.user-response { + padding: 1px 3px; + color: white; + border-radius: 3px; } + + span.successful-response { + background-color: #5cb85c; } + + span.wrong-response { + background-color: #d9534f; } - - - -
-
-

- -

+ + + + +
+
+

+ +

+
-
- - - -
-
-
+ - -
- +
+ +
@@ -122,16 +135,20 @@ - - - - - + + + + + + + - ${sessionDto.sessionName} + + ${sessionDto.sessionName} +