Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieSessionDAO.java =================================================================== diff -u -rb8e5c281efce81034ea2675a610ba3ea8faa41fb -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieSessionDAO.java (.../ScratchieSessionDAO.java) (revision b8e5c281efce81034ea2675a610ba3ea8faa41fb) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieSessionDAO.java (.../ScratchieSessionDAO.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -42,9 +42,9 @@ void delete(ScratchieSession session); void deleteBySessionId(Long toolSessionId); - - List getRawLeaderMarksByToolContentId(Long toolContentId); - + + List getRawLeaderMarksByToolContentId(Long toolContentId); + /** * Returns all session ids where specified qbQuestionUid is used with the given answer */ Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieSessionDAOHibernate.java =================================================================== diff -u -rf0ff6bc30e8fa7e5d4201b7b9571194845ad3a83 -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieSessionDAOHibernate.java (.../ScratchieSessionDAOHibernate.java) (revision f0ff6bc30e8fa7e5d4201b7b9571194845ad3a83) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieSessionDAOHibernate.java (.../ScratchieSessionDAOHibernate.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -27,6 +27,7 @@ import java.util.List; import java.util.Set; import java.util.TreeSet; +import java.util.stream.Collectors; import org.apache.commons.lang.StringUtils; import org.hibernate.query.NativeQuery; @@ -89,10 +90,10 @@ @SuppressWarnings("unchecked") @Override - public List getRawLeaderMarksByToolContentId(Long toolContentId) { - NativeQuery query = getSession().createNativeQuery(LOAD_MARKS); + public List getRawLeaderMarksByToolContentId(Long toolContentId) { + NativeQuery query = getSession().createNativeQuery(LOAD_MARKS); query.setParameter("toolContentId", toolContentId); - return query.list(); + return query.stream().collect(Collectors.mapping(Float::doubleValue, Collectors.toList())); } @Override Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20230410.sql =================================================================== diff -u --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20230410.sql (revision 0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dbupdates/patch20230410.sql (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -0,0 +1,14 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +-- Put all sql statements below here + +-- LDEV-5385 Allow real numbers for marks +ALTER TABLE tl_lascrt11_session MODIFY COLUMN mark FLOAT DEFAULT '0'; + +-- Put all sql statements above here + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java =================================================================== diff -u -r82c531ec90377dbaf474edc1966f9490582a03ff -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java (.../GroupSummary.java) (revision 82c531ec90377dbaf474edc1966f9490582a03ff) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/GroupSummary.java (.../GroupSummary.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -31,7 +31,7 @@ private Long sessionId; private String sessionName; - private int mark; + private double mark; private int totalAttempts; private Double totalPercentage; private Long leaderUid; @@ -79,11 +79,11 @@ this.sessionName = sessionName; } - public int getMark() { + public double getMark() { return mark; } - public void setMark(int mark) { + public void setMark(double mark) { this.mark = mark; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/LeaderResultsDTO.java =================================================================== diff -u -r682279f3b246b3293dd9a4b550a06767949499ac -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/LeaderResultsDTO.java (.../LeaderResultsDTO.java) (revision 682279f3b246b3293dd9a4b550a06767949499ac) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/LeaderResultsDTO.java (.../LeaderResultsDTO.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -40,23 +40,23 @@ private Long contentId; private int count; - private Integer min; - private Integer max; - private Float average; - private Float median; - private Collection modes; + private Double min; + private Double max; + private Double average; + private Double median; + private Collection modes; - public LeaderResultsDTO(Long contentId, List grades) { + public LeaderResultsDTO(Long contentId, List grades) { this.contentId = contentId; if (grades == null || grades.isEmpty()) { return; } - float sum = 0; - min = Integer.MAX_VALUE; - max = Integer.MIN_VALUE; - for (Integer grade : grades) { + double sum = 0; + min = Double.MAX_VALUE; + max = Double.MIN_VALUE; + for (Double grade : grades) { if (grade < min) { min = grade; } @@ -70,7 +70,7 @@ average = sum / count; Collections.sort(grades); - median = grades.get(count / 2).floatValue(); + median = grades.get(count / 2).doubleValue(); if (count % 2 == 0) { median = (median + grades.get(count / 2 - 1)) / 2; } @@ -89,39 +89,39 @@ return count; } - public Integer getMin() { + public Double getMin() { return min; } public String getMinString() { return LeaderResultsDTO.format(min); } - public Integer getMax() { + public Double getMax() { return max; } public String getMaxString() { return LeaderResultsDTO.format(max); } - public Float getAverage() { + public Double getAverage() { return average; } public String getAverageString() { return LeaderResultsDTO.format(average); } - public Float getMedian() { + public Double getMedian() { return median; } public String getMedianString() { return LeaderResultsDTO.format(median); } - public Collection getModes() { + public Collection getModes() { return modes; } @@ -130,15 +130,15 @@ return "-"; } - Iterator modeIterator = modes.iterator(); + Iterator modeIterator = modes.iterator(); StringBuilder result = new StringBuilder(LeaderResultsDTO.format(modeIterator.next())); while (modeIterator.hasNext()) { result.append(", ").append(LeaderResultsDTO.format(modeIterator.next())); } return result.toString(); } - private static String format(Number input) { + public static String format(Number input) { return input == null ? "-" : NumberUtil.formatLocalisedNumber(input, (Locale) null, 2); } } \ No newline at end of file Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/ScratchieItemDTO.java =================================================================== diff -u -re4ab7517268533520c11b8cb076abd74d7721d89 -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/ScratchieItemDTO.java (.../ScratchieItemDTO.java) (revision e4ab7517268533520c11b8cb076abd74d7721d89) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/ScratchieItemDTO.java (.../ScratchieItemDTO.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -15,7 +15,7 @@ private Integer type; private List optionDtos; private boolean unraveledOnFirstAttempt; - private int userMark; + private double userMark; private int userAttempts; //sequence of optionDtos selected by user in the form of "X, Y, Z" private String optionsSequence; @@ -45,7 +45,7 @@ public void setTitle(String title) { this.title = title; } - + public Integer getType() { return type; } @@ -70,11 +70,11 @@ this.unraveledOnFirstAttempt = isUnraveledOnFirstAttempt; } - public int getUserMark() { + public double getUserMark() { return userMark; } - public void setUserMark(int userMark) { + public void setUserMark(double userMark) { this.userMark = userMark; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java =================================================================== diff -u -r82c531ec90377dbaf474edc1966f9490582a03ff -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java (.../ScratchieItem.java) (revision 82c531ec90377dbaf474edc1966f9490582a03ff) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieItem.java (.../ScratchieItem.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -64,7 +64,7 @@ @Transient private List optionDtos = null; @Transient - private int mark; + private double mark; @Transient private String correctAnswerLetter; @Transient @@ -120,11 +120,11 @@ this.burningQuestion = burningQuestion; } - public int getMark() { + public double getMark() { return mark; } - public void setMark(int mark) { + public void setMark(double mark) { this.mark = mark; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java =================================================================== diff -u -r804dca72fa2ac638a9d3e2e66054d82688951c31 -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java (.../ScratchieSession.java) (revision 804dca72fa2ac638a9d3e2e66054d82688951c31) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieSession.java (.../ScratchieSession.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -83,7 +83,7 @@ private ScratchieUser groupLeader; @Column - private int mark; + private double mark; @Column(name = "scratching_finished") private boolean scratchingFinished; @@ -187,14 +187,12 @@ /** * Mark scored by a leader and shared by all users in a group. - * - * @return */ - public int getMark() { + public double getMark() { return mark; } - public void setMark(int mark) { + public void setMark(double mark) { this.mark = mark; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -rf0ff6bc30e8fa7e5d4201b7b9571194845ad3a83 -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision f0ff6bc30e8fa7e5d4201b7b9571194845ad3a83) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -396,7 +396,7 @@ */ Set getAllLeaders(Long contentId); - void changeUserMark(Long userId, Long userUid, Integer newMark); + void changeUserMark(Long userId, Long userUid, Double newMark); /** * Recalculate marks after editing content from monitoring. @@ -425,14 +425,11 @@ /** * Return a maximum possible mark that user can get on answering all questions. - * - * @param scratchie - * @return */ - int getMaxPossibleScore(Scratchie scratchie); + double getMaxPossibleScore(Scratchie scratchie); /** Get the raw marks for display in a graph in monitoring */ - List getMarksArray(Long contentId); + List getMarksArray(Long contentId); /** Get the statistics such as average, max, min for the marks. Used in monitoring */ LeaderResultsDTO getLeaderResultsDTOForLeaders(Long toolContentId); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java =================================================================== diff -u -ra05bb8ff92c659cc340b037de664fd0d9b103c96 -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java (.../ScratchieOutputFactory.java) (revision a05bb8ff92c659cc340b037de664fd0d9b103c96) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieOutputFactory.java (.../ScratchieOutputFactory.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -63,10 +63,10 @@ Scratchie scratchie = (Scratchie) toolContentObject; // calculate totalMarksPossible - long maxPossibleScore = scratchieService.getMaxPossibleScore(scratchie); + double maxPossibleScore = Math.ceil(scratchieService.getMaxPossibleScore(scratchie)); - ToolOutputDefinition definition = buildRangeDefinition(ScratchieConstants.LEARNER_MARK, new Long(0), - maxPossibleScore, true); + ToolOutputDefinition definition = buildRangeDefinition(ScratchieConstants.LEARNER_MARK, 0L, + Double.valueOf(maxPossibleScore).longValue(), true); definition.setWeightable(true); definitionMap.put(ScratchieConstants.LEARNER_MARK, definition); @@ -107,7 +107,7 @@ */ private ToolOutput getUserMark(IScratchieService scratchieService, Long toolSessionId, Long learnerId) { ScratchieSession session = scratchieService.getScratchieSessionBySessionId(toolSessionId); - int userMark = 0; + double userMark = 0; if (scratchieService.isLearnerEligibleForMark(learnerId.intValue(), session.getScratchie().getContentId())) { userMark = session.getMark(); } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r6e66deb12354d9e1ff5b9824ed4219e7f7549b6a -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 6e66deb12354d9e1ff5b9824ed4219e7f7549b6a) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -271,12 +271,12 @@ } @Override - public int getMaxPossibleScore(Scratchie scratchie) { + public double getMaxPossibleScore(Scratchie scratchie) { int itemsNumber = scratchie.getScratchieItems().size(); // calculate totalMarksPossible String[] presetMarks = getPresetMarks(scratchie); - int maxPossibleScore = (presetMarks.length > 0) ? itemsNumber * Integer.parseInt(presetMarks[0]) : 0; + double maxPossibleScore = (presetMarks.length > 0) ? itemsNumber * Double.valueOf(presetMarks[0]) : 0; return maxPossibleScore; } @@ -385,13 +385,13 @@ } @Override - public void changeUserMark(Long userId, Long sessionId, Integer newMark) { + public void changeUserMark(Long userId, Long sessionId, Double newMark) { if (newMark == null) { return; } ScratchieSession session = this.getScratchieSessionBySessionId(sessionId); - int oldMark = session.getMark(); + double oldMark = session.getMark(); session.setMark(newMark); scratchieSessionDao.saveObject(session); @@ -400,8 +400,8 @@ List users = this.getUsersBySession(sessionId); for (ScratchieUser user : users) { - toolService.updateActivityMark(newMark.doubleValue(), null, user.getUserId().intValue(), - user.getSession().getSessionId(), false); + toolService.updateActivityMark(newMark, null, user.getUserId().intValue(), user.getSession().getSessionId(), + false); // record mark change with audit service Long toolContentId = null; @@ -494,7 +494,7 @@ populateScratchieItemsWithMarks(scratchie, scratchie.getScratchieItems(), sessionId); // calculate mark - int mark = 0; + double mark = 0; for (ScratchieItem item : items) { mark += item.getMark(); } @@ -509,7 +509,7 @@ for (ScratchieUser user : users) { Double userMark = 0.0; if (isLearnerEligibleForMark(user.getUserId(), scratchie.getContentId())) { - userMark = Double.valueOf(mark); + userMark = mark; } toolService.updateActivityMark(userMark, null, user.getUserId().intValue(), user.getSession().getSessionId(), false); @@ -1104,15 +1104,15 @@ break; } // if the option has the highest grade, it is considered the correct one - if (correctAnswersGroup == null ? option.getMaxMark() > 0 : option.getMaxMark() > correctAnswersGroup.getMaxMark()) { + if (correctAnswersGroup == null ? option.getMaxMark() > 0 + : option.getMaxMark() > correctAnswersGroup.getMaxMark()) { correctAnswersGroup = option; } } if (correctAnswersGroup == null) { return false; } - - + String name = correctAnswersGroup.getName(); for (String userAnswer : userAnswers) { String normalisedQuestionAnswer = QbUtils.normaliseVSAnswer(userAnswer, qbQuestion.isExactMatch()); @@ -1131,13 +1131,13 @@ for (ScratchieItem item : items) { // get lowest mark by default - int mark = Integer.parseInt(presetMarks[presetMarks.length - 1]); + double mark = Double.valueOf(presetMarks[presetMarks.length - 1]); // add mark only if an item was unravelled if (ScratchieServiceImpl.isItemUnraveled(item, userLogs)) { int itemAttempts = ScratchieServiceImpl.getNumberAttemptsForItem(item, userLogs); String markStr = (itemAttempts <= presetMarks.length) ? presetMarks[itemAttempts - 1] : presetMarks[presetMarks.length - 1]; - mark = Integer.parseInt(markStr); + mark = Double.valueOf(markStr); } item.setMark(mark); } @@ -1193,7 +1193,6 @@ groupSummary.setNumberColumns(numberColumns); Map optionMap = new HashMap<>(); - long i = 0l; for (QbOption dbOption : options) { // clone it so it doesn't interfere with values from other sessions OptionDTO optionDto = new OptionDTO(dbOption); @@ -1483,7 +1482,7 @@ row.addCell(getMessage("label.marks") + " %", true); List summaryByTeam = getSummaryByTeam(scratchie, items); - int maxPossibleScore = getMaxPossibleScore(scratchie); + double maxPossibleScore = getMaxPossibleScore(scratchie); for (GroupSummary summary : summaryByTeam) { @@ -1514,8 +1513,8 @@ double percentage = (numberOfItems == 0) ? 0 : (double) numberOfFirstChoiceEvents / numberOfItems; row.addPercentageCell(percentage); - row.addCell(summary.getMark()); - percentage = (numberOfItems == 0) ? 0 : (double) summary.getMark() / maxPossibleScore; + row.addCell(LeaderResultsDTO.format(summary.getMark())); + percentage = (numberOfItems == 0) ? 0 : summary.getMark() / maxPossibleScore; row.addPercentageCell(percentage); } @@ -1605,9 +1604,8 @@ percentages[groupCount - 1] = percentage; groupCount++; - - row.addCell(summary.getMark()); - percentage = (numberOfItems == 0) ? 0 : (double) summary.getMark() / maxPossibleScore; + row.addCell(LeaderResultsDTO.format(summary.getMark())); + percentage = (numberOfItems == 0) ? 0 : summary.getMark() / maxPossibleScore; row.addPercentageCell(percentage); } @@ -1696,7 +1694,7 @@ } row.addCell(isFirstChoice, color); row.addCell(Integer.valueOf(attempts), color); - Long mark = (itemDto.getUserMark() == -1) ? null : Long.valueOf(itemDto.getUserMark()); + String mark = itemDto.getUserMark() == -1 ? "" : LeaderResultsDTO.format(itemDto.getUserMark()); row.addCell(mark); } } @@ -1724,8 +1722,8 @@ row = researchAndAnalysisSheet.initRow(); row.addCell(user.getFirstName() + " " + user.getLastName()); row.addCell(Long.valueOf(summary.getTotalAttempts())); - Long mark = (summary.getTotalAttempts() == 0) ? null : Long.valueOf(summary.getMark()); - row.addCell(mark); + Double mark = summary.getTotalAttempts() == 0 ? null : summary.getMark(); + row.addCell(mark == null ? "" : LeaderResultsDTO.format(mark)); row.addCell(summary.getSessionName()); } } @@ -1854,7 +1852,7 @@ Long attempts = (long) scratchieAnswerVisitDao.getLogCountTotal(sessionId); row.addCell(attempts); row.addCell(getMessage("label.mark") + ":"); - row.addCell(Long.valueOf(session.getMark())); + row.addCell(LeaderResultsDTO.format(session.getMark())); row = researchAndAnalysisSheet.initRow(); row.addCell(getMessage("label.team.leader") + session.getSessionName()); @@ -1991,7 +1989,7 @@ // attempts row.addCell(Integer.valueOf(attempts)); // mark - Object mark = (itemDto.getUserMark() == -1) ? "" : Long.valueOf(itemDto.getUserMark()); + String mark = itemDto.getUserMark() == -1 ? "" : LeaderResultsDTO.format(itemDto.getUserMark()); row.addCell(mark); //build list of all logs left for this item and this session @@ -2079,14 +2077,14 @@ } @Override - public List getMarksArray(Long toolContentId) { + public List getMarksArray(Long toolContentId) { return scratchieSessionDao.getRawLeaderMarksByToolContentId(toolContentId); } @Override public LeaderResultsDTO getLeaderResultsDTOForLeaders(Long toolContentId) { - List marks = scratchieSessionDao.getRawLeaderMarksByToolContentId(toolContentId); + List marks = scratchieSessionDao.getRawLeaderMarksByToolContentId(toolContentId); LeaderResultsDTO newDto = new LeaderResultsDTO(toolContentId, marks); return newDto; @@ -2213,7 +2211,7 @@ for (ScratchieItem item : sortedItems) { ScratchieItemDTO itemDto = new ScratchieItemDTO(); int numberOfAttempts = 0; - int mark = -1; + double mark = -1; boolean isUnraveledOnFirstAttempt = false; String optionsSequence = ""; QbQuestion qbQuestion = item.getQbQuestion(); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java =================================================================== diff -u -r0c2664b4727d894371762bc6a6e0fcc7ff6e94d2 -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision 0c2664b4727d894371762bc6a6e0fcc7ff6e94d2) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/LearningController.java (.../LearningController.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -222,7 +222,7 @@ sessionMap.put(ScratchieConstants.ATTR_SCRATCHIE, scratchie); // calculate max score - int maxScore = scratchieService.getMaxPossibleScore(scratchie); + double maxScore = scratchieService.getMaxPossibleScore(scratchie); sessionMap.put(ScratchieConstants.ATTR_MAX_SCORE, maxScore); boolean isScratchingFinished = toolSession.isScratchingFinished(); @@ -289,9 +289,9 @@ if (mode.isTeacher()) { scratchieService.populateScratchieItemsWithMarks(scratchie, items, toolSessionID); // get updated score from ScratchieSession - int score = toolSession.getMark(); + double score = toolSession.getMark(); request.setAttribute(ScratchieConstants.ATTR_SCORE, score); - int percentage = (maxScore == 0) ? 0 : ((score * 100) / maxScore); + int percentage = (maxScore == 0) ? 0 : Double.valueOf((score * 100) / maxScore).intValue(); request.setAttribute(ScratchieConstants.ATTR_SCORE_PERCENTAGE, percentage); } @@ -555,10 +555,10 @@ } // get updated score from ScratchieSession - int score = toolSession.getMark(); + double score = toolSession.getMark(); request.setAttribute(ScratchieConstants.ATTR_SCORE, score); - int maxScore = (Integer) sessionMap.get(ScratchieConstants.ATTR_MAX_SCORE); - int percentage = (maxScore == 0) ? 0 : ((score * 100) / maxScore); + double maxScore = (Double) sessionMap.get(ScratchieConstants.ATTR_MAX_SCORE); + int percentage = (maxScore == 0) ? 0 : Double.valueOf((score * 100) / maxScore).intValue(); request.setAttribute(ScratchieConstants.ATTR_SCORE_PERCENTAGE, percentage); // display other groups' BurningQuestions Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -r5563dc18a8b8d19478fb804c8beef31e63bd249b -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 5563dc18a8b8d19478fb804c8beef31e63bd249b) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -40,7 +40,6 @@ import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @@ -197,7 +196,7 @@ Long userId = WebUtil.readLongParam(request, ScratchieConstants.ATTR_USER_ID); Long sessionId = WebUtil.readLongParam(request, ScratchieConstants.PARAM_SESSION_ID); - Integer newMark = Integer.valueOf(request.getParameter(ScratchieConstants.PARAM_MARK)); + Double newMark = Double.valueOf(request.getParameter(ScratchieConstants.PARAM_MARK)); scratchieService.changeUserMark(userId, sessionId, newMark); } @@ -264,7 +263,7 @@ SessionMap sessionMap = getSessionMap(request); Scratchie scratchie = (Scratchie) sessionMap.get(ScratchieConstants.ATTR_SCRATCHIE); - List results = null; + List results = null; if (scratchie != null) { results = scratchieService.getMarksArray(scratchie.getContentId()); Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -r247497a7d9d4f70de1fa371bed92b0635f090cac -rf05bad0f63a5e9515f10dc19d40bfdd26195ff9f --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 247497a7d9d4f70de1fa371bed92b0635f090cac) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision f05bad0f63a5e9515f10dc19d40bfdd26195ff9f) @@ -114,14 +114,14 @@ oldValue = eval(val); }, afterSaveCell : function (rowid,name,val,iRow,iCol){ - var intRegex = /^\d+$/; - if (!intRegex.test(val)) { + var number = new Number(val); + if (Number.isNaN(number)) { jQuery("#list${summary.sessionId}").restoreCell(iRow,iCol); } }, beforeSubmitCell : function (rowid,name,val,iRow,iCol){ - var intRegex = /^\d+$/; - if (!intRegex.test(val)) { + var number = new Number(val); + if (Number.isNaN(number)) { return {nan:true}; } else { var userId = jQuery("#list${summary.sessionId}").getCell(rowid, 'userId');