Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -r341861061a7479b63c67712f7811bd77d091c474 -rc4c29fd5db10de898ba8f9892236d6d537efba0f --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 341861061a7479b63c67712f7811bd77d091c474) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision c4c29fd5db10de898ba8f9892236d6d537efba0f) @@ -2475,7 +2475,7 @@ : 0.0; for (GradebookUserActivity guact : userActivities) { - if (markedActivity == null || guact.getUid() != markedActivity.getUid()) { + if (guact.getMark() != null && (markedActivity == null || guact.getUid() != markedActivity.getUid())) { if (useWeightings) { totalMark = totalMark + getWeightedMark(useWeightings, guact, guact.getMark()); } else { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r4436ad48ebfcbce1f25ad39db54f55c32873afc1 -rc4c29fd5db10de898ba8f9892236d6d537efba0f --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 4436ad48ebfcbce1f25ad39db54f55c32873afc1) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision c4c29fd5db10de898ba8f9892236d6d537efba0f) @@ -2198,6 +2198,9 @@ summaryTableRow = new ExcelRow(); List options = question.getQbQuestion().getQbOptions(); for (QbOption option : options) { + if (option == null || StringUtils.isBlank(option.getName())) { + continue; + } summaryOfAnswers.put(option.getUid(), 0); StringBuilder bldr = new StringBuilder(getMessage("label.authoring.basic.option.answer")).append(" ") .append(i + 1).append(" - "); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r75568970e61df4a238f0ad03f66162dd99c8c730 -rc4c29fd5db10de898ba8f9892236d6d537efba0f --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 75568970e61df4a238f0ad03f66162dd99c8c730) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision c4c29fd5db10de898ba8f9892236d6d537efba0f) @@ -55,6 +55,8 @@ import org.lamsfoundation.lams.confidencelevel.VsaAnswerDTO; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.events.IEventNotificationService; +import org.lamsfoundation.lams.flux.FluxMap; +import org.lamsfoundation.lams.flux.FluxRegistry; import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; @@ -175,6 +177,12 @@ private ScratchieOutputFactory scratchieOutputFactory; + public ScratchieServiceImpl() { + FluxRegistry.initFluxMap(ScratchieConstants.ANSWERS_UPDATED_SINK_NAME, + ScratchieConstants.ANSWERS_UPDATED_SINK_NAME, null, toolContentId -> "doRefresh", + FluxMap.SHORT_THROTTLE, FluxMap.STANDARD_TIMEOUT); + } + // ******************************************************************************* // Service method // ******************************************************************************* @@ -464,8 +472,11 @@ log.setQbToolQuestion(qbToolQuestion); log.setAccessDate(new Timestamp(new Date().getTime())); scratchieAnswerVisitDao.saveObject(log); + // need to flush so subscribers to sink see new answers in DB + scratchieAnswerVisitDao.flush(); recalculateMarkForSession(sessionId, false); + FluxRegistry.emit(ScratchieConstants.ANSWERS_UPDATED_SINK_NAME, log.getQbToolQuestion().getToolContentId()); } } @@ -646,6 +657,15 @@ } /** + * Tells whether burning questions are enabled in the given activity + */ + @Override + public boolean isBurningQuestionsEnabled(long toolContentId) { + Scratchie scratchie = getScratchieByContentId(toolContentId); + return scratchie != null && scratchie.isBurningQuestionsEnabled(); + } + + /** * Counts how many questions were answered correctly on first attempt by the given user, regardless of mark given. */ @Override