Index: lams_tool_scratchie/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r2f8b0131c4612136cf97601abbf9daff3a9c8d01 -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 2f8b0131c4612136cf97601abbf9daff3a9c8d01) +++ lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -157,7 +157,7 @@ label.median =Median label.avg.mean =Ave. Mean label.score =Score: -label.you.ve.got =Your score: {0} +label.you.ve.got =Your score: {0} ({1}%) label.your.answer =Your answer: label.other.groups =Other groups: label.all =All Index: lams_tool_scratchie/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r2f8b0131c4612136cf97601abbf9daff3a9c8d01 -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 2f8b0131c4612136cf97601abbf9daff3a9c8d01) +++ lams_tool_scratchie/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -157,7 +157,7 @@ label.median =Median label.avg.mean =Ave. Mean label.score =Score: -label.you.ve.got =Your score: {0} +label.you.ve.got =Your score: {0} ({1}%) label.your.answer =Your answer: label.other.groups =Other groups: label.all =All Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -136,6 +136,8 @@ public static final String ATTR_ITEM = "item"; public static final String ATTR_SCORE = "score"; + + public static final String ATTR_SCORE_PERCENTAGE = "scorePercentage"; public static final String ATTR_MAX_SCORE = "maxScore"; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java =================================================================== diff -u -r22ca3de0e9fe138e44fc36be1abc6fabbbdc4002 -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java (.../ScratchieItem.java) (revision 22ca3de0e9fe138e44fc36be1abc6fabbbdc4002) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java (.../ScratchieItem.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -82,6 +82,8 @@ private boolean isUnraveled; @Transient private String burningQuestion; + @Transient + private int mark; @Override public Object clone() { @@ -121,7 +123,7 @@ public void setUid(Long userID) { this.uid = userID; } - + public String getTitle() { return title; } @@ -185,4 +187,13 @@ public void setBurningQuestion(String burningQuestion) { this.burningQuestion = burningQuestion; } + + public int getMark() { + return mark; + } + + public void setMark(int mark) { + this.mark = mark; + } + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -rf5e59b4320e8fdfb492b6432ca965c2381918d91 -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision f5e59b4320e8fdfb492b6432ca965c2381918d91) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -73,6 +73,11 @@ Collection items); /** + * Calculates and sets a mark in each item. + */ + void populateScratchieItemsWithMarks(Scratchie scratchie, Collection items, long sessionId); + + /** * Returns all activities that precede specified activity and produce confidence levels. * * @param toolContentId Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r53c3a625c611e2b5400a39d96628c774700d37ed -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 53c3a625c611e2b5400a39d96628c774700d37ed) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -461,18 +461,16 @@ */ @Override public void recalculateMarkForSession(Long sessionId, boolean isPropagateToGradebook) { - List userLogs = scratchieAnswerVisitDao.getLogsBySession(sessionId); ScratchieSession session = this.getScratchieSessionBySessionId(sessionId); Scratchie scratchie = session.getScratchie(); Set items = scratchie.getScratchieItems(); - String[] presetMarks = getPresetMarks(scratchie); + populateScratchieItemsWithMarks(scratchie, scratchie.getScratchieItems(), sessionId); + // calculate mark int mark = 0; - if (!items.isEmpty()) { - for (ScratchieItem item : items) { - mark += getUserMarkPerItem(scratchie, item, userLogs, presetMarks); - } + for (ScratchieItem item : items) { + mark += item.getMark(); } // change mark for all learners in a group @@ -810,37 +808,30 @@ return isItemUnraveled; } - /** - * - * @param scratchie - * @param item - * @param userLogs - * uses list of logs to reduce number of queries to DB - * @param presetMarks - * presetMarks to reduce number of queries to DB - * @return - */ - private int getUserMarkPerItem(Scratchie scratchie, ScratchieItem item, List userLogs, - String[] presetMarks) { + @Override + public void populateScratchieItemsWithMarks(Scratchie scratchie, Collection items, long sessionId) { + List userLogs = scratchieAnswerVisitDao.getLogsBySession(sessionId); + String[] presetMarks = getPresetMarks(scratchie); - // get lowest mark by default - int mark = Integer.parseInt(presetMarks[presetMarks.length - 1]); - // add mark only if an item was unravelled - if (isItemUnraveled(item, userLogs)) { + for (ScratchieItem item : items) { + // get lowest mark by default + int mark = Integer.parseInt(presetMarks[presetMarks.length - 1]); + // add mark only if an item was unravelled + if (isItemUnraveled(item, userLogs)) { - int itemAttempts = calculateItemAttempts(userLogs, item); - String markStr = (itemAttempts <= presetMarks.length) ? presetMarks[itemAttempts - 1] - : presetMarks[presetMarks.length - 1]; - mark = Integer.parseInt(markStr); + int itemAttempts = calculateItemAttempts(userLogs, item); + String markStr = (itemAttempts <= presetMarks.length) ? presetMarks[itemAttempts - 1] + : presetMarks[presetMarks.length - 1]; + mark = Integer.parseInt(markStr); - // add extra point if needed - if (scratchie.isExtraPoint() && (itemAttempts == 1)) { - mark++; - } + // add extra point if needed + if (scratchie.isExtraPoint() && (itemAttempts == 1)) { + mark++; + } + } + item.setMark(mark); } - - return mark; } /** @@ -1662,8 +1653,6 @@ private List getSummaryByTeam(Scratchie scratchie, Collection sortedItems) { List groupSummaries = new ArrayList<>(); - String[] presetMarks = getPresetMarks(scratchie); - List sessionList = scratchieSessionDao.getByContentId(scratchie.getContentId()); for (ScratchieSession session : sessionList) { Long sessionId = session.getSessionId(); @@ -1675,6 +1664,8 @@ List answerLogs = scratchieAnswerVisitDao.getLogsBySession(sessionId); + populateScratchieItemsWithMarks(scratchie, sortedItems, sessionId); + for (ScratchieItem item : sortedItems) { ScratchieItemDTO itemDto = new ScratchieItemDTO(); int numberOfAttempts = 0; @@ -1695,7 +1686,7 @@ numberOfAttempts = itemAttempts.size(); // for displaying purposes if there is no attemps we assign -1 which will be shown as "-" - mark = (numberOfAttempts == 0) ? -1 : getUserMarkPerItem(scratchie, item, answerLogs, presetMarks); + mark = (numberOfAttempts == 0) ? -1 : item.getMark(); isUnraveledOnFirstAttempt = (numberOfAttempts == 1) && isItemUnraveled(item, answerLogs); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java =================================================================== diff -u -r53c3a625c611e2b5400a39d96628c774700d37ed -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision 53c3a625c611e2b5400a39d96628c774700d37ed) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -284,8 +284,8 @@ /** * Stores into session map all data needed to display scratchies and answers */ - private void storeItemsToSessionMap(Long toolSessionId, Scratchie scratchie, SessionMap sessionMap, - boolean showOrder) { + private Collection storeItemsToSessionMap(Long toolSessionId, Scratchie scratchie, + SessionMap sessionMap, boolean showOrder) { // set scratched flag for display purpose Collection items = scratchieService.getItemsWithIndicatedScratches(toolSessionId); @@ -341,6 +341,7 @@ } sessionMap.put(ScratchieConstants.ATTR_ITEM_LIST, items); + return items; } /** @@ -444,13 +445,10 @@ // get updated score from ScratchieSession int score = toolSession.getMark(); + request.setAttribute(ScratchieConstants.ATTR_SCORE, score); int maxScore = (Integer) sessionMap.get(ScratchieConstants.ATTR_MAX_SCORE); - double percentage = (maxScore == 0) ? 0 : ((score * 100) / maxScore); - if (percentage < 0) { - // if lowest score for questions is negative, percentage can also be negative - percentage = 0; - } - request.setAttribute(ScratchieConstants.ATTR_SCORE, (int) percentage); + int percentage = (maxScore == 0) ? 0 : ((score * 100) / maxScore); + request.setAttribute(ScratchieConstants.ATTR_SCORE_PERCENTAGE, percentage); // display other groups' BurningQuestions if (isBurningQuestionsEnabled) { @@ -484,7 +482,8 @@ } if (scratchie.isShowScrachiesInResults()) { - storeItemsToSessionMap(toolSessionId, scratchie, sessionMap, true); + Collection items = storeItemsToSessionMap(toolSessionId, scratchie, sessionMap, true); + scratchieService.populateScratchieItemsWithMarks(scratchie, items, toolSessionId); request.setAttribute(ScratchieConstants.ATTR_SHOW_RESULTS, true); } Index: lams_tool_scratchie/web/pages/learning/results.jsp =================================================================== diff -u -rb745384874257ea8327d82156fec0455e4232ad6 -r7c8332d32bfb95927b393aa310c9cf214c6bc49b --- lams_tool_scratchie/web/pages/learning/results.jsp (.../results.jsp) (revision b745384874257ea8327d82156fec0455e4232ad6) +++ lams_tool_scratchie/web/pages/learning/results.jsp (.../results.jsp) (revision 7c8332d32bfb95927b393aa310c9cf214c6bc49b) @@ -57,6 +57,10 @@ overflow:auto; margin-top: -20px; } + + .item-score { + font-weight: bold; + } @@ -345,7 +349,8 @@ - ${score}% + ${score} + ${scorePercentage}